@hestia-earth/ui-components 0.6.1 → 0.6.3
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/bundles/hestia-earth-ui-components.umd.js +37 -30
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
- package/esm2015/common/data-table/data-table.component.js +1 -1
- package/esm2015/cycles/cycles-activity/cycles-activity.component.js +2 -2
- package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +2 -2
- package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +14 -12
- package/esm2015/cycles/cycles-practices/cycles-practices.component.js +2 -2
- package/esm2015/engine/engine-orchestrator-edit/engine-orchestrator-edit.component.js +5 -4
- package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +14 -11
- package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +2 -2
- package/esm2015/sites/sites-measurements/sites-measurements.component.js +2 -2
- package/fesm2015/hestia-earth-ui-components.js +36 -30
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/package.json +1 -1
|
@@ -80,7 +80,7 @@ export class CyclesPracticesComponent {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
CyclesPracticesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesPracticesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
CyclesPracticesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesPracticesComponent, selector: "he-cycles-practices", inputs: { originalValues: "originalValues", cycles: "cycles", dataState: "dataState" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column is-hidden-mobile\"></div>\n <ng-container *ngIf=\"selectedView === View.table && practices.length\">\n <div class=\"column is-narrow\">\n <button class=\"button is-dark is-outlined is-small\" (click)=\"showDownload = true\">\n <fa-icon icon=\"download\"></fa-icon>\n <span class=\"pl-2\">Download (CSV)</span>\n </button>\n </div>\n <div class=\"column is-narrow col-sep\"></div>\n </ng-container>\n <div class=\"column is-narrow\" *ngIf=\"showTimeline || !isOriginal\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.table\" (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"showTimeline\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.timeline\" (click)=\"selectedView = View.timeline\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list-alt\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Operations timeline</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"practices.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let practice of practices\"\n [attr.title]=\"practice.value.term.name\"\n >\n <he-node-link [node]=\"practice.value.term\">\n <span>{{practice.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th *ngFor=\"let practice of practices\"\n [attr.title]=\"practice.value.term.units\"\n >{{practice.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles[0]\"></he-cycles-functional-unit-measure>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let practice of practices\">\n <span *ngIf=\"practice.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"togglePopover(p, { data: practice.value.values[cycle['@id']], cycle: cycle, key: 'practices' })\"\n >\n <span pointer>{{propertyValue(practice.value.values[cycle['@id']].value, practice.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"practice.value.values[cycle['@id']].node\"\n key=\"value\"\n ></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<div class=\"px-3 pb-3\" *ngIf=\"selectedView === View.timeline\">\n <he-cycles-practices-timeline [dataState]=\"dataState\"\n [cycle]=\"cycles[0]\" [filterTermTypes]=\"timelineTermType\"\n ></he-cycles-practices-timeline>\n\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-cycles-practices-logs *ngIf=\"selectedIndex >= 0\"\n [cycle]=\"cycles[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.practices\"\n [recalculatedValues]=\"cycles[selectedIndex]?.practices\"\n ></he-cycles-practices-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"cycles\" filename=\"cycle-practices.csv\" [isUpload]=\"false\"\n [headerKeys]=\"['cycle.id', 'cycle.@id', 'cycle.practices.']\"\n (closed)=\"showDownload = false\"\n></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data</span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p><b>{{defaultLabel(node)}}</b></p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i2.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: i3.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i4.CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { type: i5.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state"] }, { type: i6.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { type: i7.CyclesPracticesTimelineComponent, selector: "he-cycles-practices-timeline", inputs: ["filterTermTypes", "dataState", "cycle"] }, { type: i8.CyclesPracticesLogsComponent, selector: "he-cycles-practices-logs", inputs: ["cycle", "originalValues", "recalculatedValues"] }, { type: i9.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i10.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: i13.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i13.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "ellipsis": i14.EllipsisPipe, "default": i15.DefaultPipe, "precision": i16.PrecisionPipe } });
|
|
83
|
+
CyclesPracticesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesPracticesComponent, selector: "he-cycles-practices", inputs: { originalValues: "originalValues", cycles: "cycles", dataState: "dataState" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column is-hidden-mobile\"></div>\n <ng-container *ngIf=\"selectedView === View.table && practices.length\">\n <div class=\"column is-narrow\">\n <button class=\"button is-dark is-outlined is-small\" (click)=\"showDownload = true\">\n <fa-icon icon=\"download\"></fa-icon>\n <span class=\"pl-2\">Download (CSV)</span>\n </button>\n </div>\n <div class=\"column is-narrow col-sep is-hidden-mobile\"></div>\n </ng-container>\n <div class=\"column is-narrow\" *ngIf=\"showTimeline || !isOriginal\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.table\" (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"showTimeline\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.timeline\" (click)=\"selectedView = View.timeline\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list-alt\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Operations timeline</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"practices.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let practice of practices\"\n [attr.title]=\"practice.value.term.name\"\n >\n <he-node-link [node]=\"practice.value.term\">\n <span>{{practice.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th *ngFor=\"let practice of practices\"\n [attr.title]=\"practice.value.term.units\"\n >{{practice.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles[0]\"></he-cycles-functional-unit-measure>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let practice of practices\">\n <span *ngIf=\"practice.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"togglePopover(p, { data: practice.value.values[cycle['@id']], cycle: cycle, key: 'practices' })\"\n >\n <span pointer>{{propertyValue(practice.value.values[cycle['@id']].value, practice.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"practice.value.values[cycle['@id']].node\"\n key=\"value\"\n ></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<div class=\"px-3 pb-3\" *ngIf=\"selectedView === View.timeline\">\n <he-cycles-practices-timeline [dataState]=\"dataState\"\n [cycle]=\"cycles[0]\" [filterTermTypes]=\"timelineTermType\"\n ></he-cycles-practices-timeline>\n\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-cycles-practices-logs *ngIf=\"selectedIndex >= 0\"\n [cycle]=\"cycles[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.practices\"\n [recalculatedValues]=\"cycles[selectedIndex]?.practices\"\n ></he-cycles-practices-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"cycles\" filename=\"cycle-practices.csv\" [isUpload]=\"false\"\n [headerKeys]=\"['cycle.id', 'cycle.@id', 'cycle.practices.']\"\n (closed)=\"showDownload = false\"\n></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data</span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p><b>{{defaultLabel(node)}}</b></p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i2.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: i3.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i4.CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { type: i5.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state"] }, { type: i6.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { type: i7.CyclesPracticesTimelineComponent, selector: "he-cycles-practices-timeline", inputs: ["filterTermTypes", "dataState", "cycle"] }, { type: i8.CyclesPracticesLogsComponent, selector: "he-cycles-practices-logs", inputs: ["cycle", "originalValues", "recalculatedValues"] }, { type: i9.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i10.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: i13.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i13.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "ellipsis": i14.EllipsisPipe, "default": i15.DefaultPipe, "precision": i16.PrecisionPipe } });
|
|
84
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesPracticesComponent, decorators: [{
|
|
85
85
|
type: Component,
|
|
86
86
|
args: [{
|
|
@@ -95,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
95
95
|
}], dataState: [{
|
|
96
96
|
type: Input
|
|
97
97
|
}] } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1wcmFjdGljZXMvY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1wcmFjdGljZXMvY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBMEIsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSDNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBSzFDLElBQUssSUFJSjtBQUpELFdBQUssSUFBSTtJQUNQLHVCQUFlLENBQUE7SUFDZiw2QkFBcUIsQ0FBQTtJQUNyQixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLElBQUksS0FBSixJQUFJLFFBSVI7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBT2xELE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFPUyxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFJNUIsWUFBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdB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cywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBQcmFjdGljZSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQgeyBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZEtleXMsIGdyb3VwcGVkS2V5cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ3RhYmxlJyxcbiAgdGltZWxpbmUgPSAndGltZWxpbmUnLFxuICBsb2dzID0gJ2xvZ3MnXG59XG5cbmNvbnN0IHRpbWVsaW5lVGVybVR5cGUgPSBbVGVybVRlcm1UeXBlLm9wZXJhdGlvbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1wcmFjdGljZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1wcmFjdGljZXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNQcmFjdGljZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3JpZ2luYWxWYWx1ZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHVibGljIHRpbWVsaW5lVGVybVR5cGUgPSB0aW1lbGluZVRlcm1UeXBlO1xuICBwdWJsaWMgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG4gIHB1YmxpYyBWaWV3ID0gVmlldztcbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4ID0gMDtcblxuICBwdWJsaWMgcHJhY3RpY2VzOiBJR3JvdXBlZEtleXM8UHJhY3RpY2U+W10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdjeWNsZXMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbmRleCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmICgnZGF0YVN0YXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHVibGljIGdldCBpc09yaWdpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdGF0ZSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgY29uc3QgcHJhY3RpY2VzUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCwgUHJhY3RpY2U+KHRoaXMuY3ljbGVzLCAncHJhY3RpY2VzJywgdGhpcy5vcmlnaW5hbFZhbHVlcyk7XG4gICAgdGhpcy5wcmFjdGljZXMgPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhwcmFjdGljZXNQZXJDeWNsZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1RpbWVsaW5lKCkge1xuICAgIHJldHVybiAodGhpcy5jeWNsZXM/LlswXT8ucHJhY3RpY2VzIHx8IFtdKS5zb21lKHAgPT4gdGltZWxpbmVUZXJtVHlwZS5pbmNsdWRlcyhwLnRlcm0/LnRlcm1UeXBlKSk7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZSAmJiBwcmFjdGljZXMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwXCI+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiICpuZ0lmPVwic2hvd1RpbWVsaW5lIHx8ICFpc09yaWdpbmFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZVwiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwibGlzdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+VGFibGUgdmlldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCJzaG93VGltZWxpbmVcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRpbWVsaW5lXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGltZWxpbmVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0LWFsdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+T3BlcmF0aW9ucyB0aW1lbGluZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCIhaXNPcmlnaW5hbFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmxvZ3NcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjYWxjdWxhdG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5SZWNhbGN1bGF0aW9ucyBsb2dzPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzZWxlY3RlZFZpZXcgIT09IFZpZXcudGFibGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByYWN0aWNlcy5sZW5ndGg7IGVsc2UgZW1wdHlUYWJsZVwiPlxuICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgW25iUm93c109XCJjeWNsZXMubGVuZ3RoXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0b1wiPjwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgcHJhY3RpY2Ugb2YgcHJhY3RpY2VzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicHJhY3RpY2UudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJwcmFjdGljZS52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3twcmFjdGljZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczozMH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0N5Y2xlI2Z1bmN0aW9uYWxVbml0J1wiIHRhcmdldD1cIl9ibGFua1wiPkZ1bmN0aW9uYWwgdW5pdDwvYT5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHByYWN0aWNlIG9mIHByYWN0aWNlc1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInByYWN0aWNlLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgPnt7cHJhY3RpY2UudmFsdWUudGVybS51bml0c319PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3ljbGUgb2YgY3ljbGVzOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0b1wiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImN5Y2xlLnRlcm0gfHwgY3ljbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2RlZmF1bHRMYWJlbChjeWNsZSl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxoZS1jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUgW2N5Y2xlXT1cImN5Y2xlc1swXVwiPjwvaGUtY3ljbGVzLWZ1bmN0aW9uYWwtdW5pdC1tZWFzdXJlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgcHJhY3RpY2Ugb2YgcHJhY3RpY2VzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwcmFjdGljZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXTsgZWxzZSBlbXB0eVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogcHJhY3RpY2UudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0sIGN5Y2xlOiBjeWNsZSwga2V5OiAncHJhY3RpY2VzJyB9KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj57e3Byb3BlcnR5VmFsdWUocHJhY3RpY2UudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0udmFsdWUsIHByYWN0aWNlLnZhbHVlLnRlcm1bJ0BpZCddKSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlIGNsYXNzPVwibWwtMVwiIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwicHJhY3RpY2UudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRpbWVsaW5lXCI+XG4gIDxoZS1jeWNsZXMtcHJhY3RpY2VzLXRpbWVsaW5lIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCJcbiAgICBbY3ljbGVdPVwiY3ljbGVzWzBdXCIgW2ZpbHRlclRlcm1UeXBlc109XCJ0aW1lbGluZVRlcm1UeXBlXCJcbiAgPjwvaGUtY3ljbGVzLXByYWN0aWNlcy10aW1lbGluZT5cblxuICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9ncyAmJiAhaXNPcmlnaW5hbFwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTNcIiAqbmdJZj1cImN5Y2xlcy5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpY1wiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aFwiPlxuICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwic2VsZWN0SW5kZXgoJGV2ZW50KVwiPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGN5Y2xlczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpXCI+e3tpICsgMX19LiB7e2RlZmF1bHRMYWJlbCh2YWx1ZSl9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8aGUtY3ljbGVzLXByYWN0aWNlcy1sb2dzICpuZ0lmPVwic2VsZWN0ZWRJbmRleCA+PSAwXCJcbiAgICBbY3ljbGVdPVwiY3ljbGVzW3NlbGVjdGVkSW5kZXhdXCJcbiAgICBbb3JpZ2luYWxWYWx1ZXNdPVwib3JpZ2luYWxWYWx1ZXNbc2VsZWN0ZWRJbmRleF0/LnByYWN0aWNlc1wiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJjeWNsZXNbc2VsZWN0ZWRJbmRleF0/LnByYWN0aWNlc1wiXG4gID48L2hlLWN5Y2xlcy1wcmFjdGljZXMtbG9ncz5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0gKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiY3ljbGVzXCIgZmlsZW5hbWU9XCJjeWNsZS1wcmFjdGljZXMuY3N2XCIgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydjeWNsZS5pZCcsICdjeWNsZS5AaWQnLCAnY3ljbGUucHJhY3RpY2VzLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiXG4+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICA8c3Bhbj5ObyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImN5Y2xlXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImtleVwiPlxuICA8cD48Yj57e2RlZmF1bHRMYWJlbChub2RlKX19PC9iPjwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIiBbbm9kZVR5cGVdPVwibm9kZVsnQHR5cGUnXVwiIFtkYXRhS2V5XT1cImtleVwiXG4gID48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1wcmFjdGljZXMvY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1wcmFjdGljZXMvY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBMEIsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSDNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBSzFDLElBQUssSUFJSjtBQUpELFdBQUssSUFBSTtJQUNQLHVCQUFlLENBQUE7SUFDZiw2QkFBcUIsQ0FBQTtJQUNyQixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLElBQUksS0FBSixJQUFJLFFBSVI7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBT2xELE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFPUyxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFJNUIsWUFBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdB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cywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBQcmFjdGljZSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQgeyBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZEtleXMsIGdyb3VwcGVkS2V5cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ3RhYmxlJyxcbiAgdGltZWxpbmUgPSAndGltZWxpbmUnLFxuICBsb2dzID0gJ2xvZ3MnXG59XG5cbmNvbnN0IHRpbWVsaW5lVGVybVR5cGUgPSBbVGVybVRlcm1UeXBlLm9wZXJhdGlvbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1wcmFjdGljZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLXByYWN0aWNlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1wcmFjdGljZXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNQcmFjdGljZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3JpZ2luYWxWYWx1ZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHVibGljIHRpbWVsaW5lVGVybVR5cGUgPSB0aW1lbGluZVRlcm1UeXBlO1xuICBwdWJsaWMgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG4gIHB1YmxpYyBWaWV3ID0gVmlldztcbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4ID0gMDtcblxuICBwdWJsaWMgcHJhY3RpY2VzOiBJR3JvdXBlZEtleXM8UHJhY3RpY2U+W10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdjeWNsZXMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbmRleCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmICgnZGF0YVN0YXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHVibGljIGdldCBpc09yaWdpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdGF0ZSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgY29uc3QgcHJhY3RpY2VzUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCwgUHJhY3RpY2U+KHRoaXMuY3ljbGVzLCAncHJhY3RpY2VzJywgdGhpcy5vcmlnaW5hbFZhbHVlcyk7XG4gICAgdGhpcy5wcmFjdGljZXMgPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhwcmFjdGljZXNQZXJDeWNsZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1RpbWVsaW5lKCkge1xuICAgIHJldHVybiAodGhpcy5jeWNsZXM/LlswXT8ucHJhY3RpY2VzIHx8IFtdKS5zb21lKHAgPT4gdGltZWxpbmVUZXJtVHlwZS5pbmNsdWRlcyhwLnRlcm0/LnRlcm1UeXBlKSk7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZSAmJiBwcmFjdGljZXMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCJzaG93VGltZWxpbmUgfHwgIWlzT3JpZ2luYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cInNob3dUaW1lbGluZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGltZWxpbmVcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50aW1lbGluZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3QtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5PcGVyYXRpb25zIHRpbWVsaW5lPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cIiFpc09yaWdpbmFsXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcubG9nc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNhbGN1bGF0b3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlJlY2FsY3VsYXRpb25zIGxvZ3M8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy50YWJsZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJhY3RpY2VzLmxlbmd0aDsgZWxzZSBlbXB0eVRhYmxlXCI+XG4gICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBbbmJSb3dzXT1cImN5Y2xlcy5sZW5ndGhcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBwcmFjdGljZSBvZiBwcmFjdGljZXNcIlxuICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJwcmFjdGljZS52YWx1ZS50ZXJtLm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cInByYWN0aWNlLnZhbHVlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3ByYWN0aWNlLnZhbHVlLnRlcm0ubmFtZSB8IGVsbGlwc2lzOjMwfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvQ3ljbGUjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgcHJhY3RpY2Ugb2YgcHJhY3RpY2VzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicHJhY3RpY2UudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICA+e3twcmFjdGljZS52YWx1ZS50ZXJtLnVuaXRzfX08L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjeWNsZSBvZiBjeWNsZXM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiZGVmYXVsdExhYmVsKGN5Y2xlKVwiPlxuICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiY3ljbGUudGVybSB8fCBjeWNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2kgKyAxfX0uIHt7ZGVmYXVsdExhYmVsKGN5Y2xlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGhlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZSBbY3ljbGVdPVwiY3ljbGVzWzBdXCI+PC9oZS1jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmU+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBwcmFjdGljZSBvZiBwcmFjdGljZXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByYWN0aWNlLnZhbHVlLnZhbHVlc1tjeWNsZVsnQGlkJ11dOyBlbHNlIGVtcHR5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCIgI3A9XCJuZ2JQb3BvdmVyXCIgcGxhY2VtZW50PVwibGVmdFwiIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBwcmFjdGljZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXSwgY3ljbGU6IGN5Y2xlLCBrZXk6ICdwcmFjdGljZXMnIH0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBwb2ludGVyPnt7cHJvcGVydHlWYWx1ZShwcmFjdGljZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS52YWx1ZSwgcHJhY3RpY2UudmFsdWUudGVybVsnQGlkJ10pIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUgY2xhc3M9XCJtbC0xXCIgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJwcmFjdGljZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS5ub2RlXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGltZWxpbmVcIj5cbiAgPGhlLWN5Y2xlcy1wcmFjdGljZXMtdGltZWxpbmUgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIlxuICAgIFtjeWNsZV09XCJjeWNsZXNbMF1cIiBbZmlsdGVyVGVybVR5cGVzXT1cInRpbWVsaW5lVGVybVR5cGVcIlxuICA+PC9oZS1jeWNsZXMtcHJhY3RpY2VzLXRpbWVsaW5lPlxuXG4gIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsXCI+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwiY3ljbGVzLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljXCI+U2VsZWN0IGEgQ3ljbGU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoXCI+XG4gICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgY3ljbGVzOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj57e2kgKyAxfX0uIHt7ZGVmYXVsdExhYmVsKHZhbHVlKX19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxoZS1jeWNsZXMtcHJhY3RpY2VzLWxvZ3MgKm5nSWY9XCJzZWxlY3RlZEluZGV4ID49IDBcIlxuICAgIFtjeWNsZV09XCJjeWNsZXNbc2VsZWN0ZWRJbmRleF1cIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJvcmlnaW5hbFZhbHVlc1tzZWxlY3RlZEluZGV4XT8ucHJhY3RpY2VzXCJcbiAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cImN5Y2xlc1tzZWxlY3RlZEluZGV4XT8ucHJhY3RpY2VzXCJcbiAgPjwvaGUtY3ljbGVzLXByYWN0aWNlcy1sb2dzPlxuPC9uZy1jb250YWluZXI+XG5cbjxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybSAqbmdJZj1cInNob3dEb3dubG9hZFwiXG4gIFtub2Rlc109XCJjeWNsZXNcIiBmaWxlbmFtZT1cImN5Y2xlLXByYWN0aWNlcy5jc3ZcIiBbaXNVcGxvYWRdPVwiZmFsc2VcIlxuICBbaGVhZGVyS2V5c109XCJbJ2N5Y2xlLmlkJywgJ2N5Y2xlLkBpZCcsICdjeWNsZS5wcmFjdGljZXMuJ11cIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCJcbj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgIDxzcGFuPk5vIGRhdGE8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVZhbHVlPlxuICA8c3Bhbj4tPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwiY3ljbGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwPjxiPnt7ZGVmYXVsdExhYmVsKG5vZGUpfX08L2I+PC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiIFtub2RlVHlwZV09XCJub2RlWydAdHlwZSddXCIgW2RhdGFLZXldPVwia2V5XCJcbiAgPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -35,8 +35,9 @@ const isRecalculated = ({ runStrategy, mergeStrategy, mergeArgs }) => [
|
|
|
35
35
|
'add_blank_node_if_missing',
|
|
36
36
|
'add_key_if_missing'
|
|
37
37
|
].includes(runStrategy) && (mergeStrategy === 'list' && (mergeArgs === null || mergeArgs === void 0 ? void 0 : mergeArgs.replaceThreshold));
|
|
38
|
-
const filterGapFilled = (configs, onlyGapFilled) => configs
|
|
39
|
-
.
|
|
38
|
+
const filterGapFilled = (configs, onlyGapFilled) => configs
|
|
39
|
+
.map(model => Array.isArray(model) && onlyGapFilled ? model.filter(isGapFilled) : model)
|
|
40
|
+
.filter(model => !onlyGapFilled || Array.isArray(model) || isGapFilled(model));
|
|
40
41
|
const modelKeyName = (modelKey) => modelKey.includes('.') ? modelKey.split('.')[1] : modelKey;
|
|
41
42
|
const groupConfig = (configs) => from(configs.flat()).pipe(filter(({ key }) => isSchemaType(key)), groupBy(({ key }) => key), mergeMap(group => group.pipe(toArray())), reduce((prev, curr) => {
|
|
42
43
|
const key = curr[0].key;
|
|
@@ -106,7 +107,7 @@ export class EngineOrchestratorEditComponent {
|
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
EngineOrchestratorEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EngineOrchestratorEditComponent, deps: [{ token: i1.HeEngineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
109
|
-
EngineOrchestratorEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EngineOrchestratorEditComponent, selector: "he-engine-orchestrator-edit", inputs: { config: "config", nodeType: "nodeType" }, usesOnChanges: true, ngImport: i0, template: "<p>\n <i>The configuration below is a preview of the <a [href]=\"configUrl\" target=\"_blank\">JSON configuration file</a> used for the orchestration of the Hestia's calculations.</i>\n</p>\n<p>\n <i>Note: not all models might be represented accurately.</i>\n</p>\n\n<div class=\"is-size-7 is-italic\">\n <div class=\"columns is-vcentered is-variable is-1 my-0\">\n <div class=\"column\">\n <div class=\"pl-3 model-parallel my-3\">\n <span>Models running in parallel</span>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field\">\n <input type=\"checkbox\" class=\"switch\"\n [(ngModel)]=\"onlyGapFilled\" id=\"onlyGapFilled\"\n (change)=\"filterModels()\"\n >\n <label class=\"is-size-7\" for=\"onlyGapFilled\">\n <span>Show only gap-filled data</span>\n </label>\n </div>\n </div>\n <div class=\"column is-narrow has-text-right\">\n <div class=\"dropdown is-right has-text-left\"\n [class.is-active]=\"showDisplayBy\"\n (clickOutside)=\"showDisplayBy = false\"\n >\n <div class=\"dropdown-trigger\" (click)=\"showDisplayBy = !showDisplayBy\">\n <button class=\"button is-light\"\n aria-haspopup=\"true\" aria-controls=\"display-menu\"\n ngbTooltip=\"Display options\" placement=\"bottom\" container=\"body\" [disableTooltip]=\"showDisplayBy\"\n >\n <ng-container [ngSwitch]=\"displayBy\">\n <ng-container *ngSwitchCase=\"'list'\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"pl-2\">Display by Prority</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"'type'\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"table\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"pl-2\">Display by Type</span>\n </ng-container>\n </ng-container>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"display-menu\" role=\"menu\">\n <div class=\"dropdown-content\" (click)=\"showDisplayBy = false\">\n <a class=\"dropdown-item\"\n [class.is-active]=\"displayBy === 'list'\"\n (click)=\"displayBy = 'list'\"\n >\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n <span class=\"pl-2\">Display by Prority</span>\n </a>\n <a class=\"dropdown-item\"\n [class.is-active]=\"displayBy === 'type'\"\n (click)=\"displayBy = 'type'\"\n >\n <fa-icon icon=\"table\" aria-hidden=\"true\"></fa-icon>\n <span class=\"pl-2\">Display by Type</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"displayBy === 'list' && models\">\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:models}\"></ng-container>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"displayBy === 'type' && groupedModels\">\n <div class=\"tabs\">\n <ul>\n <li\n *ngFor=\"let group of groupedModels | keys; trackBy: trackByKey\"\n [class.is-active]=\"selectedGroupedKey === group.key\"\n >\n <a (click)=\"selectedGroupedKey = group.key\">\n <span class=\"pl-2\">{{group.key}} ({{group.value.length}})</span>\n </a>\n </li>\n </ul>\n </div>\n\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:groupedModels[selectedGroupedKey]}\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #modelList let-data>\n <div *ngFor=\"let v of data\">\n <ng-container *ngTemplateOutlet=\"model;context:{$implicit:v}\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #model let-data>\n <ng-container *ngIf=\"isArray(data)\">\n <div class=\"pl-3 model-parallel\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:data}\"></ng-container>\n </div>\n\n <hr>\n </ng-container>\n <ng-container *ngIf=\"!isArray(data)\">\n <div class=\"card mb-2 model-serie is-size-6\">\n <div class=\"card-content p-3\">\n <span class=\"is-capitalized\">{{data.key | keyToLabel}}</span>:\n <ng-template #defaultView>\n <span class=\"default-value\">{{data.value}}</span>\n\n <p>\n <span class=\"pr-1\">Model:</span>\n <span>{{data.model | keyToLabel}}</span>\n </p>\n </ng-template>\n\n <ng-template #modelFromPathLink>\n <ng-container *ngIf=\"modelPathLink$(data) | async as link; else defaultView\">\n <ng-container *ngTemplateOutlet=\"modelPathLink;context:{model:data.model, value: data.value, link}\"></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf=\"modelLink$(data) | async as link; else modelFromPathLink\">\n <ng-container *ngTemplateOutlet=\"modelLink;context:{model:data.model, value: data.value, link}\"></ng-container>\n </ng-container>\n\n <div *ngIf=\"data.runStrategy\">\n <span class=\"pr-1\">Run strategy:</span>\n <ng-container *ngTemplateOutlet=\"strategiesLink;context:{strategy:data.runStrategy,type:'run'}\"></ng-container>\n\n <div class=\"pl-3 is-size-7\" *ngIf=\"data.runArgs\">\n <p><b>Run arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs;context:{$implicit:data.runArgs}\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"data.mergeStrategy\">\n <span class=\"pr-1\">Merge strategy:</span>\n <ng-container *ngTemplateOutlet=\"strategiesLink;context:{strategy:data.mergeStrategy,type:'merge'}\"></ng-container>\n\n <div class=\"pl-3 is-size-7\" *ngIf=\"data.mergeArgs\">\n <p><b>Merge arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs;context:{$implicit:data.mergeArgs}\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #modelLinkKey let-model=\"model\" let-link=\"link\">\n <a [href]=\"modelKeyUrl(link, model)\" target=\"_blank\">{{modelKeyName(link.modelKey)}}</a>\n</ng-template>\n\n<ng-template #modelLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n <he-node-link *ngIf=\"link.term\" [node]=\"{'@type':'Term','@id':link.term}\" [showExternalLink]=\"true\">\n <span>{{link.term | keyToLabel}}</span>\n </he-node-link>\n\n <span *ngIf=\"!link.term && !link?.modelKey\" class=\"default-value\">{{value}}</span>\n\n <ng-container *ngIf=\"!link.term && link?.modelKey\">\n <ng-container *ngTemplateOutlet=\"modelLinkKey;context:{link, model}\"></ng-container>\n </ng-container>\n\n <p class=\"model-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">{{model | keyToLabel}}</span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n </p>\n</ng-template>\n\n<ng-template #modelPathLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n <span *ngIf=\"!link?.modelKey\" class=\"default-value\">{{value}}</span>\n\n <ng-container *ngIf=\"link?.modelKey\">\n <ng-container *ngTemplateOutlet=\"modelLinkKey;context:{link, model}\"></ng-container>\n </ng-container>\n\n <p class=\"model-path-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">{{model | keyToLabel}}</span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n </p>\n</ng-template>\n\n<ng-template #strategiesLink let-strategy=\"strategy\" let-type=\"type\">\n <span class=\"pr-2\"><code>{{strategy}}</code></span>\n\n <a class=\"is-size-7\" [href]=\"strategiesDocs + '/' + type + '/' + (type === 'merge' ? 'merge_' : '') + strategy + '.md'\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n</ng-template>\n\n<ng-template #strategiesArgs let-args>\n <div class=\"pl-2\">\n <p *ngFor=\"let arg of args | keys\">\n <span class=\"has-text-underline\">{{arg.key}}</span>: <code>{{arg.value | json}}</code>\n </p>\n </div>\n</ng-template>\n", styles: [":host{display:block}.model-parallel{border-left:3px solid #7a7a7a}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i3.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }], directives: [{ type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "keys": i8.KeysPipe, "keyToLabel": i9.KeyToLabelPipe, "async": i7.AsyncPipe, "json": i7.JsonPipe } });
|
|
110
|
+
EngineOrchestratorEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EngineOrchestratorEditComponent, selector: "he-engine-orchestrator-edit", inputs: { config: "config", nodeType: "nodeType" }, usesOnChanges: true, ngImport: i0, template: "<p>\n <i>The configuration below is a preview of the <a [href]=\"configUrl\" target=\"_blank\">JSON configuration file</a> used for the orchestration of the Hestia's calculations.</i>\n</p>\n<p>\n <i>Note: not all models might be represented accurately.</i>\n</p>\n\n<div class=\"is-size-7 is-italic\">\n <div class=\"columns is-mobile is-multiline is-vcentered is-variable is-1 my-0\">\n <div class=\"column\">\n <div class=\"pl-3 model-parallel my-3\">\n <span>Models running in parallel</span>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field\">\n <input type=\"checkbox\" class=\"switch\"\n [(ngModel)]=\"onlyGapFilled\" id=\"onlyGapFilled\"\n (change)=\"filterModels()\"\n >\n <label class=\"is-size-7\" for=\"onlyGapFilled\">\n <span>Show only gap-filled data</span>\n </label>\n </div>\n </div>\n <div class=\"column is-12-mobile is-narrow-tablet has-text-right\">\n <div class=\"dropdown is-right has-text-left\"\n [class.is-active]=\"showDisplayBy\"\n (clickOutside)=\"showDisplayBy = false\"\n >\n <div class=\"dropdown-trigger\" (click)=\"showDisplayBy = !showDisplayBy\">\n <button class=\"button is-light\"\n aria-haspopup=\"true\" aria-controls=\"display-menu\"\n ngbTooltip=\"Display options\" placement=\"bottom\" container=\"body\" [disableTooltip]=\"showDisplayBy\"\n >\n <ng-container [ngSwitch]=\"displayBy\">\n <ng-container *ngSwitchCase=\"'list'\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"pl-2\">Display by Prority</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"'type'\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"table\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"pl-2\">Display by Type</span>\n </ng-container>\n </ng-container>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"display-menu\" role=\"menu\">\n <div class=\"dropdown-content\" (click)=\"showDisplayBy = false\">\n <a class=\"dropdown-item\"\n [class.is-active]=\"displayBy === 'list'\"\n (click)=\"displayBy = 'list'\"\n >\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n <span class=\"pl-2\">Display by Prority</span>\n </a>\n <a class=\"dropdown-item\"\n [class.is-active]=\"displayBy === 'type'\"\n (click)=\"displayBy = 'type'\"\n >\n <fa-icon icon=\"table\" aria-hidden=\"true\"></fa-icon>\n <span class=\"pl-2\">Display by Type</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"displayBy === 'list' && models\">\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:models}\"></ng-container>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"displayBy === 'type' && groupedModels\">\n <div class=\"tabs\">\n <ul>\n <li\n *ngFor=\"let group of groupedModels | keys; trackBy: trackByKey\"\n [class.is-active]=\"selectedGroupedKey === group.key\"\n >\n <a (click)=\"selectedGroupedKey = group.key\">\n <span class=\"pl-2\">{{group.key}} ({{group.value.length}})</span>\n </a>\n </li>\n </ul>\n </div>\n\n <div class=\"pl-3\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:groupedModels[selectedGroupedKey]}\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #modelList let-data>\n <div *ngFor=\"let v of data\">\n <ng-container *ngTemplateOutlet=\"model;context:{$implicit:v}\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #model let-data>\n <ng-container *ngIf=\"isArray(data)\">\n <div class=\"pl-3 model-parallel\">\n <ng-container *ngTemplateOutlet=\"modelList;context:{$implicit:data}\"></ng-container>\n </div>\n\n <hr>\n </ng-container>\n <ng-container *ngIf=\"!isArray(data)\">\n <div class=\"card mb-2 model-serie is-size-6\">\n <div class=\"card-content p-3\">\n <span class=\"is-capitalized\">{{data.key | keyToLabel}}</span>:\n <ng-template #defaultView>\n <span class=\"default-value\">{{data.value}}</span>\n\n <p>\n <span class=\"pr-1\">Model:</span>\n <span>{{data.model | keyToLabel}}</span>\n </p>\n </ng-template>\n\n <ng-template #modelFromPathLink>\n <ng-container *ngIf=\"modelPathLink$(data) | async as link; else defaultView\">\n <ng-container *ngTemplateOutlet=\"modelPathLink;context:{model:data.model, value: data.value, link}\"></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf=\"modelLink$(data) | async as link; else modelFromPathLink\">\n <ng-container *ngTemplateOutlet=\"modelLink;context:{model:data.model, value: data.value, link}\"></ng-container>\n </ng-container>\n\n <div *ngIf=\"data.runStrategy\">\n <span class=\"pr-1\">Run strategy:</span>\n <ng-container *ngTemplateOutlet=\"strategiesLink;context:{strategy:data.runStrategy,type:'run'}\"></ng-container>\n\n <div class=\"pl-3 is-size-7\" *ngIf=\"data.runArgs\">\n <p><b>Run arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs;context:{$implicit:data.runArgs}\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"data.mergeStrategy\">\n <span class=\"pr-1\">Merge strategy:</span>\n <ng-container *ngTemplateOutlet=\"strategiesLink;context:{strategy:data.mergeStrategy,type:'merge'}\"></ng-container>\n\n <div class=\"pl-3 is-size-7\" *ngIf=\"data.mergeArgs\">\n <p><b>Merge arguments:</b></p>\n <ng-container *ngTemplateOutlet=\"strategiesArgs;context:{$implicit:data.mergeArgs}\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #modelLinkKey let-model=\"model\" let-link=\"link\">\n <a [href]=\"modelKeyUrl(link, model)\" target=\"_blank\">{{modelKeyName(link.modelKey)}}</a>\n</ng-template>\n\n<ng-template #modelLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n <he-node-link *ngIf=\"link.term\" [node]=\"{'@type':'Term','@id':link.term}\" [showExternalLink]=\"true\">\n <span>{{link.term | keyToLabel}}</span>\n </he-node-link>\n\n <span *ngIf=\"!link.term && !link?.modelKey\" class=\"default-value\">{{value}}</span>\n\n <ng-container *ngIf=\"!link.term && link?.modelKey\">\n <ng-container *ngTemplateOutlet=\"modelLinkKey;context:{link, model}\"></ng-container>\n </ng-container>\n\n <p class=\"model-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">{{model | keyToLabel}}</span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n </p>\n</ng-template>\n\n<ng-template #modelPathLink let-model=\"model\" let-link=\"link\" let-value=\"value\">\n <span *ngIf=\"!link?.modelKey\" class=\"default-value\">{{value}}</span>\n\n <ng-container *ngIf=\"link?.modelKey\">\n <ng-container *ngTemplateOutlet=\"modelLinkKey;context:{link, model}\"></ng-container>\n </ng-container>\n\n <p class=\"model-path-link\">\n <span class=\"pr-1\">Model:</span>\n <span class=\"pr-2\">{{model | keyToLabel}}</span>\n\n <a class=\"is-size-7\" [href]=\"link.docPath\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n </p>\n</ng-template>\n\n<ng-template #strategiesLink let-strategy=\"strategy\" let-type=\"type\">\n <span class=\"pr-2 is-inline-block\"><code>{{strategy}}</code></span>\n\n <a class=\"is-size-7\" [href]=\"strategiesDocs + '/' + type + '/' + (type === 'merge' ? 'merge_' : '') + strategy + '.md'\" target=\"_blank\">\n <span class=\"pr-1\">(View Docs)</span>\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n </a>\n</ng-template>\n\n<ng-template #strategiesArgs let-args>\n <div class=\"pl-2\">\n <p *ngFor=\"let arg of args | keys\">\n <span class=\"has-text-underline\">{{arg.key}}</span>: <code>{{arg.value | json}}</code>\n </p>\n </div>\n</ng-template>\n", styles: [":host{display:block}.model-parallel{border-left:3px solid #7a7a7a}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i3.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }], directives: [{ type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "keys": i8.KeysPipe, "keyToLabel": i9.KeyToLabelPipe, "async": i7.AsyncPipe, "json": i7.JsonPipe } });
|
|
110
111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EngineOrchestratorEditComponent, decorators: [{
|
|
111
112
|
type: Component,
|
|
112
113
|
args: [{
|
|
@@ -119,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
119
120
|
}], nodeType: [{
|
|
120
121
|
type: Input
|
|
121
122
|
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbmdpbmUvZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0L2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZW5naW5lL2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC9lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQWtFLFlBQVksRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7OztBQUVqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLE9BQU8sc0NBQXNDLFNBQVMsRUFBRSxFQUFFLENBQUM7QUFDN0UsTUFBTSxjQUFjLEdBQUcsR0FBRyxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxD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QUdNLFlBQVk7UUFDakIsVUFBVSxDQUFDLEdBQVMsRUFBRTs7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDBDQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDTCxDQUFDOzs2SEE3RVUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNElDbEU1Qyw2OFFBMk5BOzRGRHpKYSwrQkFBK0I7a0JBTDNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsV0FBVyxFQUFFLDJDQUEyQztvQkFDeEQsU0FBUyxFQUFFLENBQUMsMkNBQTJDLENBQUM7aUJBQ3pEO3NHQUtTLE1BQU07c0JBRGIsS0FBSztnQkFHRSxRQUFRO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZ3JvdXBCeSwgbWVyZ2VNYXAsIHJlZHVjZSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5vZGVUeXBlLCBTY2hlbWFUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0ICogYXMgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5cbmltcG9ydCB7IEhlRW5naW5lU2VydmljZSwgSU9yY2hlc3RyYXRvckNvbmZpZywgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLCBlbmdpbmVHaXRVcmwsIElNb2RlbCB9IGZyb20gJy4uL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwsIGdpdEJyYW5jaCwgZ2l0SG9tZSB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IGdpdFVybCA9IGAke2dpdEhvbWV9L2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yLy0vYmxvYi8ke2dpdEJyYW5jaCgpfWA7XG5jb25zdCBnZW5lcmFsRG9jc1VybCA9IGAke2dpdFVybH0vaGVzdGlhX2VhcnRoL29yY2hlc3RyYXRvci9jb25maWcvUkVBRE1FLm1kYDtcbmNvbnN0IHN0cmF0ZWdpZXNEb2NzID0gYCR7Z2l0VXJsfS9oZXN0aWFfZWFydGgvb3JjaGVzdHJhdG9yL3N0cmF0ZWdpZXNgO1xuXG5jb25zdCBzY2hlbWFUeXBlS2V5cyA9IE9iamVjdC5rZXlzKFNjaGVtYVR5cGUpO1xuXG5jb25zdCB0b1NjaGVtYVR5cGUgPSAodmFsdWU6IHN0cmluZykgPT4ga2V5VG9MYWJlbCh2YWx1ZSkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuY29uc3QgaXNTY2hlbWFUeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+IFtcbiAgc2NoZW1hVHlwZUtleXMuaW5jbHVkZXModmFsdWUpLFxuICBzY2hlbWFUeXBlS2V5cy5pbmNsdWRlcyhwbHVyYWxpemUodmFsdWUsIDEpKSxcbiAgc2NoZW1hVHlwZUtleXMuaW5jbHVkZXMocGx1cmFsaXplKHRvU2NoZW1hVHlwZSh2YWx1ZSksIDEpKVxuXS5zb21lKEJvb2xlYW4pO1xuXG5jb25zdCBpc0dhcEZpbGxlZCA9ICh7IHJ1blN0cmF0ZWd5LCBtZXJnZVN0cmF0ZWd5LCBtZXJnZUFyZ3MgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbXG4gICAgJ2FkZF9ibGFua19ub2RlX2lmX21pc3NpbmcnLFxuICAgICdhZGRfa2V5X2lmX21pc3NpbmcnXG4gIF0uaW5jbHVkZXMocnVuU3RyYXRlZ3kpICYmIChcbiAgICBtZXJnZVN0cmF0ZWd5ICE9PSAnbGlzdCcgfHwgIW1lcmdlQXJncz8ucmVwbGFjZVRocmVzaG9sZFxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh7IHJ1blN0cmF0ZWd5LCBtZXJnZVN0cmF0ZWd5LCBtZXJnZUFyZ3MgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbXG4gICAgJ2FkZF9ibGFua19ub2RlX2lmX21pc3NpbmcnLFxuICAgICdhZGRfa2V5X2lmX21pc3NpbmcnXG4gIF0uaW5jbHVkZXMocnVuU3RyYXRlZ3kpICYmIChcbiAgICBtZXJnZVN0cmF0ZWd5ID09PSAnbGlzdCcgJiYgbWVyZ2VBcmdzPy5yZXBsYWNlVGhyZXNob2xkXG4gICk7XG5cbmNvbnN0IGZpbHRlckdhcEZpbGxlZCA9IChjb25maWdzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW10sIG9ubHlHYXBGaWxsZWQ6IGJvb2xlYW4pID0+XG4gIGNvbmZpZ3MubWFwKG1vZGVsID0+IEFycmF5LmlzQXJyYXkobW9kZWwpID8gbW9kZWwuZmlsdGVyKGlzR2FwRmlsbGVkKSA6IG1vZGVsKVxuICAuZmlsdGVyKG1vZGVsID0+ICFvbmx5R2FwRmlsbGVkIHx8IChcbiAgICBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsLmxlbmd0aCA+IDAgOiBpc0dhcEZpbGxlZChtb2RlbClcbiAgKSk7XG5cbmNvbnN0IG1vZGVsS2V5TmFtZSA9IChtb2RlbEtleTogc3RyaW5nKSA9PiBtb2RlbEtleS5pbmNsdWRlcygnLicpID8gbW9kZWxLZXkuc3BsaXQoJy4nKVsxXSA6IG1vZGVsS2V5O1xuXG5jb25zdCBncm91cENvbmZpZyA9IChjb25maWdzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW10pID0+XG4gIGZyb20oY29uZmlncy5mbGF0KCkpLnBpcGUoXG4gICAgZmlsdGVyKCh7IGtleSB9KSA9PiBpc1NjaGVtYVR5cGUoa2V5KSksXG4gICAgZ3JvdXBCeSgoeyBrZXkgfSkgPT4ga2V5KSxcbiAgICBtZXJnZU1hcChncm91cCA9PiBncm91cC5waXBlKHRvQXJyYXkoKSkpLFxuICAgIHJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gY3VyclswXS5rZXk7XG4gICAgICBwcmV2W3RvU2NoZW1hVHlwZShrZXkpXSA9IGN1cnI7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKVxuICAudG9Qcm9taXNlKCk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWVuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFbmdpbmVPcmNoZXN0cmF0b3JFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBhbGxNb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIGNvbmZpZz86IElPcmNoZXN0cmF0b3JDb25maWc7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZVR5cGU/OiBOb2RlVHlwZTtcblxuICBwdWJsaWMgbW9kZWxLZXlOYW1lID0gbW9kZWxLZXlOYW1lO1xuICBwdWJsaWMgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4gIHB1YmxpYyBnZW5lcmFsRG9jc1VybCA9IGdlbmVyYWxEb2NzVXJsO1xuICBwdWJsaWMgc3RyYXRlZ2llc0RvY3MgPSBzdHJhdGVnaWVzRG9jcztcbiAgcHVibGljIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdO1xuICBwdWJsaWMgZ3JvdXBlZE1vZGVsczoge1xuICAgIFtrZXk6IHN0cmluZ106IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdO1xuICB9O1xuICBwdWJsaWMgc2VsZWN0ZWRHcm91cGVkS2V5OiBzdHJpbmc7XG4gIHB1YmxpYyBvbmx5R2FwRmlsbGVkID0gZmFsc2U7XG4gIHB1YmxpYyBkaXNwbGF5Qnk6ICdsaXN0JyB8ICd0eXBlJyA9ICdsaXN0JztcbiAgcHVibGljIHNob3dEaXNwbGF5QnkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhlc3RpYUVuZ2luZVNlcnZpY2U6IEhlRW5naW5lU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb25maWc/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hbGxNb2RlbHMgPSB0aGlzLmNvbmZpZy5tb2RlbHM7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RlbHMoKTtcbiAgICB9XG4gICAgaWYgKCdub2RlVHlwZScgaW4gY2hhbmdlcykge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZERlZmF1bHRDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREZWZhdWx0Q29uZmlnKCkge1xuICAgIGNvbnN0IHsgbW9kZWxzIH0gPSBhd2FpdCB0aGlzLmhlc3RpYUVuZ2luZVNlcnZpY2Uub2NoZXN0cmF0b3JDb25maWcodGhpcy5ub2RlVHlwZSk7XG4gICAgdGhpcy5hbGxNb2RlbHMgPSBtb2RlbHM7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kZWxzKCk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUtleShfaW5kZXg6IG51bWJlciwgeyBrZXkgfSkge1xuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwdWJsaWMgbW9kZWxMaW5rJCh7IG1vZGVsLCB2YWx1ZSB9OiBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5oZXN0aWFFbmdpbmVTZXJ2aWNlLm1vZGVsJCh7IG1vZGVsLCB0ZXJtOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbFBhdGhMaW5rJCh7IG1vZGVsLCB2YWx1ZSB9OiBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5oZXN0aWFFbmdpbmVTZXJ2aWNlLm1vZGVsJCh7XG4gICAgICBwYXRoOiBgJHtlbmdpbmVHaXRVcmwoKX0vaGVzdGlhX2VhcnRoL21vZGVscy8ke21vZGVsfS8keyh2YWx1ZSB8fCAnJykucmVwbGFjZSgnLicsICcvJyl9LnB5YFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWdVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5vcmNoZXN0cmF0b3JDb25maWdVcmwodGhpcy5ub2RlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZWxLZXlVcmwoeyBtb2RlbEtleSB9OiBJTW9kZWwsIG1vZGVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJ0cyA9IG1vZGVsS2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IHBhcnRzLmxlbmd0aCA9PT0gMiA/IHBhcnRzWzBdIDogbW9kZWw7XG4gICAgY29uc3QgdXJsID0gW1xuICAgICAgYmFzZVVybCgpLFxuICAgICAgJ3NjaGVtYScsXG4gICAgICB0b1NjaGVtYVR5cGUoc2NoZW1hVHlwZSlcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG4gICAgcmV0dXJuIGlzU2NoZW1hVHlwZShzY2hlbWFUeXBlKSA/IGAke3VybH0jJHtwYXJ0cy5wb3AoKX1gIDogbnVsbDtcbiAgfVxuXG5cbiAgcHVibGljIGZpbHRlck1vZGVscygpIHtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMubW9kZWxzID0gZmlsdGVyR2FwRmlsbGVkKHRoaXMuYWxsTW9kZWxzLCB0aGlzLm9ubHlHYXBGaWxsZWQpO1xuICAgICAgdGhpcy5ncm91cGVkTW9kZWxzID0gYXdhaXQgZ3JvdXBDb25maWcodGhpcy5tb2RlbHMpO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwZWRLZXkgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRNb2RlbHMpPy5bMF07XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwPlxuICA8aT5UaGUgY29uZmlndXJhdGlvbiBiZWxvdyBpcyBhIHByZXZpZXcgb2YgdGhlIDxhIFtocmVmXT1cImNvbmZpZ1VybFwiIHRhcmdldD1cIl9ibGFua1wiPkpTT04gY29uZmlndXJhdGlvbiBmaWxlPC9hPiB1c2VkIGZvciB0aGUgb3JjaGVzdHJhdGlvbiBvZiB0aGUgSGVzdGlhJ3MgY2FsY3VsYXRpb25zLjwvaT5cbjwvcD5cbjxwPlxuICA8aT5Ob3RlOiBub3QgYWxsIG1vZGVscyBtaWdodCBiZSByZXByZXNlbnRlZCBhY2N1cmF0ZWx5LjwvaT5cbjwvcD5cblxuPGRpdiBjbGFzcz1cImlzLXNpemUtNyBpcy1pdGFsaWNcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmNlbnRlcmVkIGlzLXZhcmlhYmxlIGlzLTEgbXktMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1vZGVsLXBhcmFsbGVsIG15LTNcIj5cbiAgICAgICAgPHNwYW4+TW9kZWxzIHJ1bm5pbmcgaW4gcGFyYWxsZWw8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJvbmx5R2FwRmlsbGVkXCIgaWQ9XCJvbmx5R2FwRmlsbGVkXCJcbiAgICAgICAgICAoY2hhbmdlKT1cImZpbHRlck1vZGVscygpXCJcbiAgICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpcy1zaXplLTdcIiBmb3I9XCJvbmx5R2FwRmlsbGVkXCI+XG4gICAgICAgICAgPHNwYW4+U2hvdyBvbmx5IGdhcC1maWxsZWQgZGF0YTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93IGhhcy10ZXh0LXJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gaXMtcmlnaHQgaGFzLXRleHQtbGVmdFwiXG4gICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwic2hvd0Rpc3BsYXlCeVwiXG4gICAgICAgIChjbGlja091dHNpZGUpPVwic2hvd0Rpc3BsYXlCeSA9IGZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLXRyaWdnZXJcIiAoY2xpY2spPVwic2hvd0Rpc3BsYXlCeSA9ICFzaG93RGlzcGxheUJ5XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1saWdodFwiXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtY29udHJvbHM9XCJkaXNwbGF5LW1lbnVcIlxuICAgICAgICAgICAgbmdiVG9vbHRpcD1cIkRpc3BsYXkgb3B0aW9uc1wiIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRhaW5lcj1cImJvZHlcIiBbZGlzYWJsZVRvb2x0aXBdPVwic2hvd0Rpc3BsYXlCeVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGlzcGxheUJ5XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkRpc3BsYXkgYnkgUHJvcml0eTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0eXBlJ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRhYmxlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5EaXNwbGF5IGJ5IFR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGlkPVwiZGlzcGxheS1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGVudFwiIChjbGljayk9XCJzaG93RGlzcGxheUJ5ID0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiZGlzcGxheUJ5ID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUJ5ID0gJ2xpc3QnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkRpc3BsYXkgYnkgUHJvcml0eTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiZGlzcGxheUJ5ID09PSAndHlwZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUJ5ID0gJ3R5cGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRhYmxlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5EaXNwbGF5IGJ5IFR5cGU8L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5QnkgPT09ICdsaXN0JyAmJiBtb2RlbHNcIj5cbiAgPGRpdiBjbGFzcz1cInBsLTNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaXN0O2NvbnRleHQ6eyRpbXBsaWNpdDptb2RlbHN9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5QnkgPT09ICd0eXBlJyAmJiBncm91cGVkTW9kZWxzXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgPHVsPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cGVkTW9kZWxzIHwga2V5czsgdHJhY2tCeTogdHJhY2tCeUtleVwiXG4gICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRHcm91cGVkS2V5ID09PSBncm91cC5rZXlcIlxuICAgICAgPlxuICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0ZWRHcm91cGVkS2V5ID0gZ3JvdXAua2V5XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+e3tncm91cC5rZXl9fSAoe3tncm91cC52YWx1ZS5sZW5ndGh9fSk8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBsLTNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaXN0O2NvbnRleHQ6eyRpbXBsaWNpdDpncm91cGVkTW9kZWxzW3NlbGVjdGVkR3JvdXBlZEtleV19XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kZWxMaXN0IGxldC1kYXRhPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCB2IG9mIGRhdGFcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWw7Y29udGV4dDp7JGltcGxpY2l0OnZ9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RlbCBsZXQtZGF0YT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXkoZGF0YSlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicGwtMyBtb2RlbC1wYXJhbGxlbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGVsTGlzdDtjb250ZXh0OnskaW1wbGljaXQ6ZGF0YX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxocj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBcnJheShkYXRhKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTIgbW9kZWwtc2VyaWUgaXMtc2l6ZS02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50IHAtM1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWNhcGl0YWxpemVkXCI+e3tkYXRhLmtleSB8IGtleVRvTGFiZWx9fTwvc3Bhbj46XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZpZXc+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWZhdWx0LXZhbHVlXCI+e3tkYXRhLnZhbHVlfX08L3NwYW4+XG5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPk1vZGVsOjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7ZGF0YS5tb2RlbCB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNtb2RlbEZyb21QYXRoTGluaz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWxQYXRoTGluayQoZGF0YSkgfCBhc3luYyBhcyBsaW5rOyBlbHNlIGRlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxQYXRoTGluaztjb250ZXh0Onttb2RlbDpkYXRhLm1vZGVsLCB2YWx1ZTogZGF0YS52YWx1ZSwgbGlua31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWxMaW5rJChkYXRhKSB8IGFzeW5jIGFzIGxpbms7IGVsc2UgbW9kZWxGcm9tUGF0aExpbmtcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaW5rO2NvbnRleHQ6e21vZGVsOmRhdGEubW9kZWwsIHZhbHVlOiBkYXRhLnZhbHVlLCBsaW5rfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5ydW5TdHJhdGVneVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPlJ1biBzdHJhdGVneTo8L3NwYW4+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0cmF0ZWdpZXNMaW5rO2NvbnRleHQ6e3N0cmF0ZWd5OmRhdGEucnVuU3RyYXRlZ3ksdHlwZToncnVuJ31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIGlzLXNpemUtN1wiICpuZ0lmPVwiZGF0YS5ydW5BcmdzXCI+XG4gICAgICAgICAgICA8cD48Yj5SdW4gYXJndW1lbnRzOjwvYj48L3A+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RyYXRlZ2llc0FyZ3M7Y29udGV4dDp7JGltcGxpY2l0OmRhdGEucnVuQXJnc31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLm1lcmdlU3RyYXRlZ3lcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTFcIj5NZXJnZSBzdHJhdGVneTo8L3NwYW4+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0cmF0ZWdpZXNMaW5rO2NvbnRleHQ6e3N0cmF0ZWd5OmRhdGEubWVyZ2VTdHJhdGVneSx0eXBlOidtZXJnZSd9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGwtMyBpcy1zaXplLTdcIiAqbmdJZj1cImRhdGEubWVyZ2VBcmdzXCI+XG4gICAgICAgICAgICA8cD48Yj5NZXJnZSBhcmd1bWVudHM6PC9iPjwvcD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdHJhdGVnaWVzQXJncztjb250ZXh0OnskaW1wbGljaXQ6ZGF0YS5tZXJnZUFyZ3N9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RlbExpbmtLZXkgbGV0LW1vZGVsPVwibW9kZWxcIiBsZXQtbGluaz1cImxpbmtcIj5cbiAgPGEgW2hyZWZdPVwibW9kZWxLZXlVcmwobGluaywgbW9kZWwpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3ttb2RlbEtleU5hbWUobGluay5tb2RlbEtleSl9fTwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kZWxMaW5rIGxldC1tb2RlbD1cIm1vZGVsXCIgbGV0LWxpbms9XCJsaW5rXCIgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAgPGhlLW5vZGUtbGluayAqbmdJZj1cImxpbmsudGVybVwiIFtub2RlXT1cInsnQHR5cGUnOidUZXJtJywnQGlkJzpsaW5rLnRlcm19XCIgW3Nob3dFeHRlcm5hbExpbmtdPVwidHJ1ZVwiPlxuICAgIDxzcGFuPnt7bGluay50ZXJtIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICA8L2hlLW5vZGUtbGluaz5cblxuICA8c3BhbiAqbmdJZj1cIiFsaW5rLnRlcm0gJiYgIWxpbms/Lm1vZGVsS2V5XCIgY2xhc3M9XCJkZWZhdWx0LXZhbHVlXCI+e3t2YWx1ZX19PC9zcGFuPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGluay50ZXJtICYmIGxpbms/Lm1vZGVsS2V5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGVsTGlua0tleTtjb250ZXh0OntsaW5rLCBtb2RlbH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHAgY2xhc3M9XCJtb2RlbC1saW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+TW9kZWw6PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMlwiPnt7bW9kZWwgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG5cbiAgICA8YSBjbGFzcz1cImlzLXNpemUtN1wiIFtocmVmXT1cImxpbmsuZG9jUGF0aFwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+KFZpZXcgRG9jcyk8L3NwYW4+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgPC9hPlxuICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGVsUGF0aExpbmsgbGV0LW1vZGVsPVwibW9kZWxcIiBsZXQtbGluaz1cImxpbmtcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8c3BhbiAqbmdJZj1cIiFsaW5rPy5tb2RlbEtleVwiIGNsYXNzPVwiZGVmYXVsdC12YWx1ZVwiPnt7dmFsdWV9fTwvc3Bhbj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGluaz8ubW9kZWxLZXlcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaW5rS2V5O2NvbnRleHQ6e2xpbmssIG1vZGVsfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8cCBjbGFzcz1cIm1vZGVsLXBhdGgtbGlua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPk1vZGVsOjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTJcIj57e21vZGVsIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuXG4gICAgPGEgY2xhc3M9XCJpcy1zaXplLTdcIiBbaHJlZl09XCJsaW5rLmRvY1BhdGhcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPihWaWV3IERvY3MpPC9zcGFuPlxuICAgICAgPGZhLWljb24gaWNvbj1cImV4dGVybmFsLWxpbmstYWx0XCI+PC9mYS1pY29uPlxuICAgIDwvYT5cbiAgPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdHJhdGVnaWVzTGluayBsZXQtc3RyYXRlZ3k9XCJzdHJhdGVneVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8c3BhbiBjbGFzcz1cInByLTJcIj48Y29kZT57e3N0cmF0ZWd5fX08L2NvZGU+PC9zcGFuPlxuXG4gIDxhIGNsYXNzPVwiaXMtc2l6ZS03XCIgW2hyZWZdPVwic3RyYXRlZ2llc0RvY3MgKyAnLycgKyB0eXBlICsgJy8nICsgKHR5cGUgPT09ICdtZXJnZScgPyAnbWVyZ2VfJyA6ICcnKSArIHN0cmF0ZWd5ICsgJy5tZCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4oVmlldyBEb2NzKTwvc3Bhbj5cbiAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3RyYXRlZ2llc0FyZ3MgbGV0LWFyZ3M+XG4gIDxkaXYgY2xhc3M9XCJwbC0yXCI+XG4gICAgPHAgKm5nRm9yPVwibGV0IGFyZyBvZiBhcmdzIHwga2V5c1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC11bmRlcmxpbmVcIj57e2FyZy5rZXl9fTwvc3Bhbj46IDxjb2RlPnt7YXJnLnZhbHVlIHwganNvbn19PC9jb2RlPlxuICAgIDwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbmdpbmUvZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0L2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZW5naW5lL2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC9lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQWtFLFlBQVksRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7OztBQUVqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLE9BQU8sc0NBQXNDLFNBQVMsRUFBRSxFQUFFLENBQUM7QUFDN0UsTUFBTSxjQUFjLEdBQUcsR0FBRyxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxD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LE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDBDQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDTCxDQUFDOzs2SEE3RVUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNElDakU1Qyx3Z1JBMk5BOzRGRDFKYSwrQkFBK0I7a0JBTDNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsV0FBVyxFQUFFLDJDQUEyQztvQkFDeEQsU0FBUyxFQUFFLENBQUMsMkNBQTJDLENBQUM7aUJBQ3pEO3NHQUtTLE1BQU07c0JBRGIsS0FBSztnQkFHRSxRQUFRO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZ3JvdXBCeSwgbWVyZ2VNYXAsIHJlZHVjZSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5vZGVUeXBlLCBTY2hlbWFUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0ICogYXMgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5cbmltcG9ydCB7IEhlRW5naW5lU2VydmljZSwgSU9yY2hlc3RyYXRvckNvbmZpZywgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLCBlbmdpbmVHaXRVcmwsIElNb2RlbCB9IGZyb20gJy4uL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwsIGdpdEJyYW5jaCwgZ2l0SG9tZSB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IGdpdFVybCA9IGAke2dpdEhvbWV9L2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yLy0vYmxvYi8ke2dpdEJyYW5jaCgpfWA7XG5jb25zdCBnZW5lcmFsRG9jc1VybCA9IGAke2dpdFVybH0vaGVzdGlhX2VhcnRoL29yY2hlc3RyYXRvci9jb25maWcvUkVBRE1FLm1kYDtcbmNvbnN0IHN0cmF0ZWdpZXNEb2NzID0gYCR7Z2l0VXJsfS9oZXN0aWFfZWFydGgvb3JjaGVzdHJhdG9yL3N0cmF0ZWdpZXNgO1xuXG5jb25zdCBzY2hlbWFUeXBlS2V5cyA9IE9iamVjdC5rZXlzKFNjaGVtYVR5cGUpO1xuXG5jb25zdCB0b1NjaGVtYVR5cGUgPSAodmFsdWU6IHN0cmluZykgPT4ga2V5VG9MYWJlbCh2YWx1ZSkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuY29uc3QgaXNTY2hlbWFUeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+IFtcbiAgc2NoZW1hVHlwZUtleXMuaW5jbHVkZXModmFsdWUpLFxuICBzY2hlbWFUeXBlS2V5cy5pbmNsdWRlcyhwbHVyYWxpemUodmFsdWUsIDEpKSxcbiAgc2NoZW1hVHlwZUtleXMuaW5jbHVkZXMocGx1cmFsaXplKHRvU2NoZW1hVHlwZSh2YWx1ZSksIDEpKVxuXS5zb21lKEJvb2xlYW4pO1xuXG5jb25zdCBpc0dhcEZpbGxlZCA9ICh7IHJ1blN0cmF0ZWd5LCBtZXJnZVN0cmF0ZWd5LCBtZXJnZUFyZ3MgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbXG4gICAgJ2FkZF9ibGFua19ub2RlX2lmX21pc3NpbmcnLFxuICAgICdhZGRfa2V5X2lmX21pc3NpbmcnXG4gIF0uaW5jbHVkZXMocnVuU3RyYXRlZ3kpICYmIChcbiAgICBtZXJnZVN0cmF0ZWd5ICE9PSAnbGlzdCcgfHwgIW1lcmdlQXJncz8ucmVwbGFjZVRocmVzaG9sZFxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh7IHJ1blN0cmF0ZWd5LCBtZXJnZVN0cmF0ZWd5LCBtZXJnZUFyZ3MgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSA9PlxuICBbXG4gICAgJ2FkZF9ibGFua19ub2RlX2lmX21pc3NpbmcnLFxuICAgICdhZGRfa2V5X2lmX21pc3NpbmcnXG4gIF0uaW5jbHVkZXMocnVuU3RyYXRlZ3kpICYmIChcbiAgICBtZXJnZVN0cmF0ZWd5ID09PSAnbGlzdCcgJiYgbWVyZ2VBcmdzPy5yZXBsYWNlVGhyZXNob2xkXG4gICk7XG5cbmNvbnN0IGZpbHRlckdhcEZpbGxlZCA9IChjb25maWdzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW10sIG9ubHlHYXBGaWxsZWQ6IGJvb2xlYW4pID0+XG4gIGNvbmZpZ3NcbiAgICAubWFwKG1vZGVsID0+IEFycmF5LmlzQXJyYXkobW9kZWwpICYmIG9ubHlHYXBGaWxsZWQgPyBtb2RlbC5maWx0ZXIoaXNHYXBGaWxsZWQpIDogbW9kZWwpXG4gICAgLmZpbHRlcihtb2RlbCA9PiAhb25seUdhcEZpbGxlZCB8fCBBcnJheS5pc0FycmF5KG1vZGVsKSB8fCBpc0dhcEZpbGxlZChtb2RlbCkpO1xuXG5jb25zdCBtb2RlbEtleU5hbWUgPSAobW9kZWxLZXk6IHN0cmluZykgPT4gbW9kZWxLZXkuaW5jbHVkZXMoJy4nKSA/IG1vZGVsS2V5LnNwbGl0KCcuJylbMV0gOiBtb2RlbEtleTtcblxuY29uc3QgZ3JvdXBDb25maWcgPSAoY29uZmlnczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdKSA9PlxuICBmcm9tKGNvbmZpZ3MuZmxhdCgpKS5waXBlKFxuICAgIGZpbHRlcigoeyBrZXkgfSkgPT4gaXNTY2hlbWFUeXBlKGtleSkpLFxuICAgIGdyb3VwQnkoKHsga2V5IH0pID0+IGtleSksXG4gICAgbWVyZ2VNYXAoZ3JvdXAgPT4gZ3JvdXAucGlwZSh0b0FycmF5KCkpKSxcbiAgICByZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGN1cnJbMF0ua2V5O1xuICAgICAgcHJldlt0b1NjaGVtYVR5cGUoa2V5KV0gPSBjdXJyO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pXG4gIClcbiAgLnRvUHJvbWlzZSgpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRW5naW5lT3JjaGVzdHJhdG9yRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgYWxsTW9kZWxzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjb25maWc/OiBJT3JjaGVzdHJhdG9yQ29uZmlnO1xuICBASW5wdXQoKVxuICBwcml2YXRlIG5vZGVUeXBlPzogTm9kZVR5cGU7XG5cbiAgcHVibGljIG1vZGVsS2V5TmFtZSA9IG1vZGVsS2V5TmFtZTtcbiAgcHVibGljIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICBwdWJsaWMgZ2VuZXJhbERvY3NVcmwgPSBnZW5lcmFsRG9jc1VybDtcbiAgcHVibGljIHN0cmF0ZWdpZXNEb2NzID0gc3RyYXRlZ2llc0RvY3M7XG4gIHB1YmxpYyBtb2RlbHM6IChJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcgfCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXSlbXTtcbiAgcHVibGljIGdyb3VwZWRNb2RlbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWdbXTtcbiAgfTtcbiAgcHVibGljIHNlbGVjdGVkR3JvdXBlZEtleTogc3RyaW5nO1xuICBwdWJsaWMgb25seUdhcEZpbGxlZCA9IGZhbHNlO1xuICBwdWJsaWMgZGlzcGxheUJ5OiAnbGlzdCcgfCAndHlwZScgPSAnbGlzdCc7XG4gIHB1YmxpYyBzaG93RGlzcGxheUJ5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBoZXN0aWFFbmdpbmVTZXJ2aWNlOiBIZUVuZ2luZVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuY29uZmlnPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuYWxsTW9kZWxzID0gdGhpcy5jb25maWcubW9kZWxzO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kZWxzKCk7XG4gICAgfVxuICAgIGlmICgnbm9kZVR5cGUnIGluIGNoYW5nZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWREZWZhdWx0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRGVmYXVsdENvbmZpZygpIHtcbiAgICBjb25zdCB7IG1vZGVscyB9ID0gYXdhaXQgdGhpcy5oZXN0aWFFbmdpbmVTZXJ2aWNlLm9jaGVzdHJhdG9yQ29uZmlnKHRoaXMubm9kZVR5cGUpO1xuICAgIHRoaXMuYWxsTW9kZWxzID0gbW9kZWxzO1xuICAgIHJldHVybiB0aGlzLmZpbHRlck1vZGVscygpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlLZXkoX2luZGV4OiBudW1iZXIsIHsga2V5IH0pIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcHVibGljIG1vZGVsTGluayQoeyBtb2RlbCwgdmFsdWUgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5tb2RlbCQoeyBtb2RlbCwgdGVybTogdmFsdWUgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZWxQYXRoTGluayQoeyBtb2RlbCwgdmFsdWUgfTogSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVzdGlhRW5naW5lU2VydmljZS5tb2RlbCQoe1xuICAgICAgcGF0aDogYCR7ZW5naW5lR2l0VXJsKCl9L2hlc3RpYV9lYXJ0aC9tb2RlbHMvJHttb2RlbH0vJHsodmFsdWUgfHwgJycpLnJlcGxhY2UoJy4nLCAnLycpfS5weWBcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmhlc3RpYUVuZ2luZVNlcnZpY2Uub3JjaGVzdHJhdG9yQ29uZmlnVXJsKHRoaXMubm9kZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIG1vZGVsS2V5VXJsKHsgbW9kZWxLZXkgfTogSU1vZGVsLCBtb2RlbDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFydHMgPSBtb2RlbEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBwYXJ0cy5sZW5ndGggPT09IDIgPyBwYXJ0c1swXSA6IG1vZGVsO1xuICAgIGNvbnN0IHVybCA9IFtcbiAgICAgIGJhc2VVcmwoKSxcbiAgICAgICdzY2hlbWEnLFxuICAgICAgdG9TY2hlbWFUeXBlKHNjaGVtYVR5cGUpXG4gICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLycpO1xuICAgIHJldHVybiBpc1NjaGVtYVR5cGUoc2NoZW1hVHlwZSkgPyBgJHt1cmx9IyR7cGFydHMucG9wKCl9YCA6IG51bGw7XG4gIH1cblxuXG4gIHB1YmxpYyBmaWx0ZXJNb2RlbHMoKSB7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm1vZGVscyA9IGZpbHRlckdhcEZpbGxlZCh0aGlzLmFsbE1vZGVscywgdGhpcy5vbmx5R2FwRmlsbGVkKTtcbiAgICAgIHRoaXMuZ3JvdXBlZE1vZGVscyA9IGF3YWl0IGdyb3VwQ29uZmlnKHRoaXMubW9kZWxzKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cGVkS2V5ID0gT2JqZWN0LmtleXModGhpcy5ncm91cGVkTW9kZWxzKT8uWzBdO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cD5cbiAgPGk+VGhlIGNvbmZpZ3VyYXRpb24gYmVsb3cgaXMgYSBwcmV2aWV3IG9mIHRoZSA8YSBbaHJlZl09XCJjb25maWdVcmxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5KU09OIGNvbmZpZ3VyYXRpb24gZmlsZTwvYT4gdXNlZCBmb3IgdGhlIG9yY2hlc3RyYXRpb24gb2YgdGhlIEhlc3RpYSdzIGNhbGN1bGF0aW9ucy48L2k+XG48L3A+XG48cD5cbiAgPGk+Tm90ZTogbm90IGFsbCBtb2RlbHMgbWlnaHQgYmUgcmVwcmVzZW50ZWQgYWNjdXJhdGVseS48L2k+XG48L3A+XG5cbjxkaXYgY2xhc3M9XCJpcy1zaXplLTcgaXMtaXRhbGljXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW1vYmlsZSBpcy1tdWx0aWxpbmUgaXMtdmNlbnRlcmVkIGlzLXZhcmlhYmxlIGlzLTEgbXktMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1vZGVsLXBhcmFsbGVsIG15LTNcIj5cbiAgICAgICAgPHNwYW4+TW9kZWxzIHJ1bm5pbmcgaW4gcGFyYWxsZWw8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInN3aXRjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJvbmx5R2FwRmlsbGVkXCIgaWQ9XCJvbmx5R2FwRmlsbGVkXCJcbiAgICAgICAgICAoY2hhbmdlKT1cImZpbHRlck1vZGVscygpXCJcbiAgICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpcy1zaXplLTdcIiBmb3I9XCJvbmx5R2FwRmlsbGVkXCI+XG4gICAgICAgICAgPHNwYW4+U2hvdyBvbmx5IGdhcC1maWxsZWQgZGF0YTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtMTItbW9iaWxlIGlzLW5hcnJvdy10YWJsZXQgaGFzLXRleHQtcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBpcy1yaWdodCBoYXMtdGV4dC1sZWZ0XCJcbiAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJzaG93RGlzcGxheUJ5XCJcbiAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJzaG93RGlzcGxheUJ5ID0gZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdHJpZ2dlclwiIChjbGljayk9XCJzaG93RGlzcGxheUJ5ID0gIXNob3dEaXNwbGF5QnlcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWxpZ2h0XCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1jb250cm9scz1cImRpc3BsYXktbWVudVwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwPVwiRGlzcGxheSBvcHRpb25zXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGFpbmVyPVwiYm9keVwiIFtkaXNhYmxlVG9vbHRpcF09XCJzaG93RGlzcGxheUJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkaXNwbGF5QnlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3QnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwibGlzdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RGlzcGxheSBieSBQcm9yaXR5PC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3R5cGUnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGFibGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkRpc3BsYXkgYnkgVHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgaWQ9XCJkaXNwbGF5LW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCIgKGNsaWNrKT1cInNob3dEaXNwbGF5QnkgPSBmYWxzZVwiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJkaXNwbGF5QnkgPT09ICdsaXN0J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5QnkgPSAnbGlzdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwibGlzdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RGlzcGxheSBieSBQcm9yaXR5PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJkaXNwbGF5QnkgPT09ICd0eXBlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5QnkgPSAndHlwZSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGFibGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkRpc3BsYXkgYnkgVHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlCeSA9PT0gJ2xpc3QnICYmIG1vZGVsc1wiPlxuICA8ZGl2IGNsYXNzPVwicGwtM1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbExpc3Q7Y29udGV4dDp7JGltcGxpY2l0Om1vZGVsc31cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlCeSA9PT0gJ3R5cGUnICYmIGdyb3VwZWRNb2RlbHNcIj5cbiAgPGRpdiBjbGFzcz1cInRhYnNcIj5cbiAgICA8dWw+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwZWRNb2RlbHMgfCBrZXlzOyB0cmFja0J5OiB0cmFja0J5S2V5XCJcbiAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZEdyb3VwZWRLZXkgPT09IGdyb3VwLmtleVwiXG4gICAgICA+XG4gICAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZEdyb3VwZWRLZXkgPSBncm91cC5rZXlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj57e2dyb3VwLmtleX19ICh7e2dyb3VwLnZhbHVlLmxlbmd0aH19KTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicGwtM1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbExpc3Q7Y29udGV4dDp7JGltcGxpY2l0Omdyb3VwZWRNb2RlbHNbc2VsZWN0ZWRHcm91cGVkS2V5XX1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNtb2RlbExpc3QgbGV0LWRhdGE+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHYgb2YgZGF0YVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbDtjb250ZXh0OnskaW1wbGljaXQ6dn1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGVsIGxldC1kYXRhPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBcnJheShkYXRhKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1vZGVsLXBhcmFsbGVsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaXN0O2NvbnRleHQ6eyRpbXBsaWNpdDpkYXRhfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGhyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FycmF5KGRhdGEpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMiBtb2RlbC1zZXJpZSBpcy1zaXplLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgcC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWRcIj57e2RhdGEua2V5IHwga2V5VG9MYWJlbH19PC9zcGFuPjpcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Vmlldz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlZmF1bHQtdmFsdWVcIj57e2RhdGEudmFsdWV9fTwvc3Bhbj5cblxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+TW9kZWw6PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tkYXRhLm1vZGVsIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI21vZGVsRnJvbVBhdGhMaW5rPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbFBhdGhMaW5rJChkYXRhKSB8IGFzeW5jIGFzIGxpbms7IGVsc2UgZGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbFBhdGhMaW5rO2NvbnRleHQ6e21vZGVsOmRhdGEubW9kZWwsIHZhbHVlOiBkYXRhLnZhbHVlLCBsaW5rfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbExpbmskKGRhdGEpIHwgYXN5bmMgYXMgbGluazsgZWxzZSBtb2RlbEZyb21QYXRoTGlua1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbExpbms7Y29udGV4dDp7bW9kZWw6ZGF0YS5tb2RlbCwgdmFsdWU6IGRhdGEudmFsdWUsIGxpbmt9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLnJ1blN0cmF0ZWd5XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+UnVuIHN0cmF0ZWd5Ojwvc3Bhbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RyYXRlZ2llc0xpbms7Y29udGV4dDp7c3RyYXRlZ3k6ZGF0YS5ydW5TdHJhdGVneSx0eXBlOidydW4nfVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBsLTMgaXMtc2l6ZS03XCIgKm5nSWY9XCJkYXRhLnJ1bkFyZ3NcIj5cbiAgICAgICAgICAgIDxwPjxiPlJ1biBhcmd1bWVudHM6PC9iPjwvcD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdHJhdGVnaWVzQXJncztjb250ZXh0OnskaW1wbGljaXQ6ZGF0YS5ydW5BcmdzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEubWVyZ2VTdHJhdGVneVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPk1lcmdlIHN0cmF0ZWd5Ojwvc3Bhbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RyYXRlZ2llc0xpbms7Y29udGV4dDp7c3RyYXRlZ3k6ZGF0YS5tZXJnZVN0cmF0ZWd5LHR5cGU6J21lcmdlJ31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIGlzLXNpemUtN1wiICpuZ0lmPVwiZGF0YS5tZXJnZUFyZ3NcIj5cbiAgICAgICAgICAgIDxwPjxiPk1lcmdlIGFyZ3VtZW50czo8L2I+PC9wPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0cmF0ZWdpZXNBcmdzO2NvbnRleHQ6eyRpbXBsaWNpdDpkYXRhLm1lcmdlQXJnc31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGVsTGlua0tleSBsZXQtbW9kZWw9XCJtb2RlbFwiIGxldC1saW5rPVwibGlua1wiPlxuICA8YSBbaHJlZl09XCJtb2RlbEtleVVybChsaW5rLCBtb2RlbClcIiB0YXJnZXQ9XCJfYmxhbmtcIj57e21vZGVsS2V5TmFtZShsaW5rLm1vZGVsS2V5KX19PC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RlbExpbmsgbGV0LW1vZGVsPVwibW9kZWxcIiBsZXQtbGluaz1cImxpbmtcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8aGUtbm9kZS1saW5rICpuZ0lmPVwibGluay50ZXJtXCIgW25vZGVdPVwieydAdHlwZSc6J1Rlcm0nLCdAaWQnOmxpbmsudGVybX1cIiBbc2hvd0V4dGVybmFsTGlua109XCJ0cnVlXCI+XG4gICAgPHNwYW4+e3tsaW5rLnRlcm0gfCBrZXlUb0xhYmVsfX08L3NwYW4+XG4gIDwvaGUtbm9kZS1saW5rPlxuXG4gIDxzcGFuICpuZ0lmPVwiIWxpbmsudGVybSAmJiAhbGluaz8ubW9kZWxLZXlcIiBjbGFzcz1cImRlZmF1bHQtdmFsdWVcIj57e3ZhbHVlfX08L3NwYW4+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsaW5rLnRlcm0gJiYgbGluaz8ubW9kZWxLZXlcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kZWxMaW5rS2V5O2NvbnRleHQ6e2xpbmssIG1vZGVsfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8cCBjbGFzcz1cIm1vZGVsLWxpbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj5Nb2RlbDo8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0yXCI+e3ttb2RlbCB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cblxuICAgIDxhIGNsYXNzPVwiaXMtc2l6ZS03XCIgW2hyZWZdPVwibGluay5kb2NQYXRoXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4oVmlldyBEb2NzKTwvc3Bhbj5cbiAgICAgIDxmYS1pY29uIGljb249XCJleHRlcm5hbC1saW5rLWFsdFwiPjwvZmEtaWNvbj5cbiAgICA8L2E+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kZWxQYXRoTGluayBsZXQtbW9kZWw9XCJtb2RlbFwiIGxldC1saW5rPVwibGlua1wiIGxldC12YWx1ZT1cInZhbHVlXCI+XG4gIDxzcGFuICpuZ0lmPVwiIWxpbms/Lm1vZGVsS2V5XCIgY2xhc3M9XCJkZWZhdWx0LXZhbHVlXCI+e3t2YWx1ZX19PC9zcGFuPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW5rPy5tb2RlbEtleVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RlbExpbmtLZXk7Y29udGV4dDp7bGluaywgbW9kZWx9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxwIGNsYXNzPVwibW9kZWwtcGF0aC1saW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+TW9kZWw6PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMlwiPnt7bW9kZWwgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG5cbiAgICA8YSBjbGFzcz1cImlzLXNpemUtN1wiIFtocmVmXT1cImxpbmsuZG9jUGF0aFwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+KFZpZXcgRG9jcyk8L3NwYW4+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgPC9hPlxuICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0cmF0ZWdpZXNMaW5rIGxldC1zdHJhdGVneT1cInN0cmF0ZWd5XCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gIDxzcGFuIGNsYXNzPVwicHItMiBpcy1pbmxpbmUtYmxvY2tcIj48Y29kZT57e3N0cmF0ZWd5fX08L2NvZGU+PC9zcGFuPlxuXG4gIDxhIGNsYXNzPVwiaXMtc2l6ZS03XCIgW2hyZWZdPVwic3RyYXRlZ2llc0RvY3MgKyAnLycgKyB0eXBlICsgJy8nICsgKHR5cGUgPT09ICdtZXJnZScgPyAnbWVyZ2VfJyA6ICcnKSArIHN0cmF0ZWd5ICsgJy5tZCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4oVmlldyBEb2NzKTwvc3Bhbj5cbiAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3RyYXRlZ2llc0FyZ3MgbGV0LWFyZ3M+XG4gIDxkaXYgY2xhc3M9XCJwbC0yXCI+XG4gICAgPHAgKm5nRm9yPVwibGV0IGFyZyBvZiBhcmdzIHwga2V5c1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC11bmRlcmxpbmVcIj57e2FyZy5rZXl9fTwvc3Bhbj46IDxjb2RlPnt7YXJnLnZhbHVlIHwganNvbn19PC9jb2RlPlxuICAgIDwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -42,21 +42,24 @@ export class ImpactAssessmentsIndicatorsChartComponent {
|
|
|
42
42
|
}
|
|
43
43
|
initChart() {
|
|
44
44
|
var _a, _b;
|
|
45
|
-
const
|
|
45
|
+
const termName = (_a = this.selectedTerm) === null || _a === void 0 ? void 0 : _a.name;
|
|
46
|
+
const { values } = this.indicatorPerImpactAssessment[termName] || { values: {} };
|
|
47
|
+
const labels = this.impactAssessments.map(impactName);
|
|
46
48
|
const colors = this.impactAssessments.map((impact, index) => itemColor(index));
|
|
49
|
+
const datasets = [{
|
|
50
|
+
label: termName || '',
|
|
51
|
+
data: this.impactAssessments.map(impact => impactValue(impact, values)),
|
|
52
|
+
backgroundColor: colors,
|
|
53
|
+
borderColor: colors
|
|
54
|
+
}];
|
|
47
55
|
if (this.chart) {
|
|
48
56
|
this.chart.destroy();
|
|
49
57
|
}
|
|
50
|
-
this.chart = new Chart((
|
|
58
|
+
this.chart = new Chart((_b = this.chartRef) === null || _b === void 0 ? void 0 : _b.nativeElement, {
|
|
51
59
|
type: 'bar',
|
|
52
60
|
data: {
|
|
53
|
-
labels
|
|
54
|
-
datasets
|
|
55
|
-
label: ((_b = this.selectedTerm) === null || _b === void 0 ? void 0 : _b.name) || '',
|
|
56
|
-
data: this.impactAssessments.map(impact => impactValue(impact, values)),
|
|
57
|
-
backgroundColor: colors,
|
|
58
|
-
borderColor: colors
|
|
59
|
-
}]
|
|
61
|
+
labels,
|
|
62
|
+
datasets
|
|
60
63
|
},
|
|
61
64
|
plugins: [ChartDataLabels],
|
|
62
65
|
options: {
|
|
@@ -95,7 +98,7 @@ export class ImpactAssessmentsIndicatorsChartComponent {
|
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
ImpactAssessmentsIndicatorsChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsIndicatorsChartComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
-
ImpactAssessmentsIndicatorsChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: { impactAssessments: "impactAssessments", key: "key", filterTermTypes: "filterTermTypes" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-3\" [class.is-hidden]=\"!terms?.length\">\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"selectedTerm\">\n <span>Select
|
|
101
|
+
ImpactAssessmentsIndicatorsChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: { impactAssessments: "impactAssessments", key: "key", filterTermTypes: "filterTermTypes" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-3\" [class.is-hidden]=\"!terms?.length\">\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"selectedTerm\">\n <span>Select an Indicator</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"control\">\n <div class=\"select is-small\">\n <select (change)=\"updateChart()\" [(ngModel)]=\"selectedTerm\" id=\"selectedTerm\">\n <option *ngFor=\"let term of terms\" [ngValue]=\"term\">{{term.name}} ({{term.units}})</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-1\">\n <div class=\"chart-container\">\n <canvas #chart></canvas>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;overflow:visible}.chart-container{height:400px;position:relative}\n"], directives: [{ type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
|
|
99
102
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsIndicatorsChartComponent, decorators: [{
|
|
100
103
|
type: Component,
|
|
101
104
|
args: [{
|
|
@@ -113,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
113
116
|
}], filterTermTypes: [{
|
|
114
117
|
type: Input
|
|
115
118
|
}] } });
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGFjdC1hc3Nlc3NtZW50cy9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0L2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsS0FBSyxFQUE0QixTQUFTLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sZUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELE9BQU8sRUFBRSxnQkFBZ0IsRUFBc0MsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBRTdELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBK0IsRUFBRSxNQUFzQyxFQUFFLEVBQUUsV0FDOUYsT0FBQSxDQUFDLENBQUEsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLDBDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQSxFQUFBLENBQUM7QUFFMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUErQixFQUFFLEtBQWEsRUFBRSxFQUFF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RSxNQUFNOzRCQUNoQixLQUFLLEVBQUU7Z0NBQ0wsR0FBRyxFQUFFLENBQUM7NkJBQ1A7eUJBQ0YsQ0FBQztpQkFDSDthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDOzt1SUF2R1UseUNBQXlDOzJIQUF6Qyx5Q0FBeUMsMFNDdEJ0RCwrdkJBd0JBOzRGREZhLHlDQUF5QztrQkFMckQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0NBQXdDO29CQUNsRCxXQUFXLEVBQUUsc0RBQXNEO29CQUNuRSxTQUFTLEVBQUUsQ0FBQyxzREFBc0QsQ0FBQztpQkFDcEU7NkZBR1MsUUFBUTtzQkFEZixTQUFTO3VCQUFDLE9BQU87Z0JBS1YsaUJBQWlCO3NCQUR4QixLQUFLO2dCQUdFLEdBQUc7c0JBRFYsS0FBSztnQkFHQyxlQUFlO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIEVsZW1lbnRSZWYsIE5nWm9uZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3IsIFRlcm0sIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCBDaGFydERhdGFMYWJlbHMgZnJvbSAnY2hhcnRqcy1wbHVnaW4tZGF0YWxhYmVscyc7XG5cbmltcG9ydCB7IGdyb3VwTm9kZXNCeVRlcm0sIElHcm91cGVkTm9kZXMsIElHcm91cGVkTm9kZXNWYWx1ZXMgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBpdGVtQ29sb3IsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IGltcGFjdFZhbHVlID0gKGltcGFjdDogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIHZhbHVlczogSUdyb3VwZWROb2Rlc1ZhbHVlczxJbmRpY2F0b3I+KSA9PlxuICAodmFsdWVzW2ltcGFjdFsnQGlkJ11dPy5ub2Rlc1swXSB8fCB7IHZhbHVlOiAwIH0pLnZhbHVlO1xuXG5jb25zdCBpbXBhY3ROYW1lID0gKGltcGFjdDogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIGluZGV4OiBudW1iZXIpID0+XG4gIGAke2luZGV4ICsgMX0uICR7ZGVmYXVsdExhYmVsKGltcGFjdCl9ICgke2ltcGFjdC5wcm9kdWN0LnVuaXRzfSlgO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1wYWN0QXNzZXNzbWVudHNJbmRpY2F0b3JzQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjaGFydCcpXG4gIHByaXZhdGUgY2hhcnRSZWY/OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNoYXJ0OiBhbnk7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBpbXBhY3RBc3Nlc3NtZW50czogSUltcGFjdEFzc2Vzc21lbnRKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGtleTogJ2ltcGFjdHMnIHwgJ2VtaXNzaW9uc1Jlc291cmNlVXNlJyA9ICdpbXBhY3RzJztcbiAgQElucHV0KClcbiAgcHVibGljIGZpbHRlclRlcm1UeXBlcz86IFRlcm1UZXJtVHlwZVtdO1xuXG4gIHB1YmxpYyBpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50OiBJR3JvdXBlZE5vZGVzPEluZGljYXRvcj4gPSB7fTtcbiAgcHVibGljIHRlcm1zOiBUZXJtW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVGVybT86IFRlcm07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdpbXBhY3RBc3Nlc3NtZW50cycgaW4gY2hhbmdlcyAmJiAhY2hhbmdlcy5pbXBhY3RBc3Nlc3NtZW50cy5maXJzdENoYW5nZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoJ3NlbGVjdGVkJyBpbiBjaGFuZ2VzICYmICFjaGFuZ2VzLnNlbGVjdGVkLmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0ZXJtQWxsb3dlZCh0ZXJtPzogVGVybSkge1xuICAgIHJldHVybiAhdGhpcy5maWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCAodGhpcy5maWx0ZXJUZXJtVHlwZXMgfHwgW10pLmluY2x1ZGVzKHRlcm0/LnRlcm1UeXBlISk7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG4gICAgdGhpcy5pbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50ID0gZ3JvdXBOb2Rlc0J5VGVybTxJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSW5kaWNhdG9yPihcbiAgICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMsIHRoaXMua2V5XG4gICAgKTtcbiAgICB0aGlzLnRlcm1zID0gT2JqZWN0LnZhbHVlcyh0aGlzLmluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQpXG4gICAgICAuZmlsdGVyKCh7IHRlcm0sIHZhbHVlcyB9OiBhbnkpID0+XG4gICAgICAgIHRoaXMudGVybUFsbG93ZWQodGVybSkgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZXMpLnNvbWUoKHsgbm9kZXM6IFt7IHZhbHVlIH1dIH06IGFueSkgPT4gdmFsdWUgPj0gMClcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgdGVybSB9OiBhbnkpID0+IHRlcm0pO1xuICAgIHRoaXMuc2VsZWN0ZWRUZXJtID0gdGhpcy50ZXJtcy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGVybSEpID8gdGhpcy5zZWxlY3RlZFRlcm0gOiB0aGlzLnRlcm1zWzBdO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGVybSA/IHRoaXMudXBkYXRlQ2hhcnQoKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGluaXRDaGFydCgpIHtcbiAgICBjb25zdCB7IHZhbHVlcyB9ID0gdGhpcy5pbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50W3RoaXMuc2VsZWN0ZWRUZXJtIVsnQGlkJ11dIHx8IHsgdmFsdWVzOiB7fSB9O1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMubWFwKChpbXBhY3QsIGluZGV4KSA9PiBpdGVtQ29sb3IoaW5kZXgpKTtcblxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0UmVmPy5uYXRpdmVFbGVtZW50LCB7XG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGFiZWxzOiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzLm1hcChpbXBhY3ROYW1lKSxcbiAgICAgICAgZGF0YXNldHM6IFt7XG4gICAgICAgICAgbGFiZWw6IHRoaXMuc2VsZWN0ZWRUZXJtPy5uYW1lIHx8ICcnLFxuICAgICAgICAgIGRhdGE6IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMubWFwKGltcGFjdCA9PiBpbXBhY3RWYWx1ZShpbXBhY3QsIHZhbHVlcykpLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLFxuICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnNcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiBbQ2hhcnREYXRhTGFiZWxzXSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgIGRhdGFsYWJlbHM6IHtcbiAgICAgICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgICAgICAgZm9ybWF0dGVyOiAodmFsdWUpID0+IHRvUHJlY2lzaW9uKHZhbHVlLCAzKSxcbiAgICAgICAgICAgIGFuY2hvcjogJ2NlbnRlcicsXG4gICAgICAgICAgICBjbGFtcDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgbWluOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoYXJ0KCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuaW5pdENoYXJ0KCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhdGVybXM/Lmxlbmd0aFwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaXMtaG9yaXpvbnRhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbCBpcy1ub3JtYWxcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCIgZm9yPVwic2VsZWN0ZWRUZXJtXCI+XG4gICAgICAgIDxzcGFuPlNlbGVjdCBhIGNvbHVtbjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGxcIj5cbiAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwidXBkYXRlQ2hhcnQoKVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUZXJtXCIgaWQ9XCJzZWxlY3RlZFRlcm1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHRlcm0gb2YgdGVybXNcIiBbbmdWYWx1ZV09XCJ0ZXJtXCI+e3t0ZXJtLm5hbWV9fSAoe3t0ZXJtLnVuaXRzfX0pPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtdC0xXCI+XG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiPlxuICAgICAgPGNhbnZhcyAjY2hhcnQ+PC9jYW52YXM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGFjdC1hc3Nlc3NtZW50cy9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0L2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsS0FBSyxFQUE0QixTQUFTLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sZUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELE9BQU8sRUFBRSxnQkFBZ0IsRUFBc0MsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBRTdELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBK0IsRUFBRSxNQUFzQyxFQUFFLEVBQUUsV0FDOUYsT0FBQSxDQUFDLENBQUEsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLDBDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQSxFQUFBLENBQUM7QUFFMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUErQixFQUFFLEtBQWEsRUFBRSxFQUFF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LENBQUM7b0JBQ0YsS0FBSyxFQUFFLENBQUM7NEJBQ04sUUFBUSxFQUFFLE1BQU07NEJBQ2hCLEtBQUssRUFBRTtnQ0FDTCxHQUFHLEVBQUUsQ0FBQzs2QkFDUDt5QkFDRixDQUFDO2lCQUNIO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O3VJQTFHVSx5Q0FBeUM7MkhBQXpDLHlDQUF5QywwU0N0QnRELG13QkF3QkE7NEZERmEseUNBQXlDO2tCQUxyRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3Q0FBd0M7b0JBQ2xELFdBQVcsRUFBRSxzREFBc0Q7b0JBQ25FLFNBQVMsRUFBRSxDQUFDLHNEQUFzRCxDQUFDO2lCQUNwRTs2RkFHUyxRQUFRO3NCQURmLFNBQVM7dUJBQUMsT0FBTztnQkFLVixpQkFBaUI7c0JBRHhCLEtBQUs7Z0JBR0UsR0FBRztzQkFEVixLQUFLO2dCQUdDLGVBQWU7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgU2ltcGxlQ2hhbmdlcywgRWxlbWVudFJlZiwgTmdab25lXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEluZGljYXRvciwgVGVybSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9QcmVjaXNpb24gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IENoYXJ0RGF0YUxhYmVscyBmcm9tICdjaGFydGpzLXBsdWdpbi1kYXRhbGFiZWxzJztcblxuaW1wb3J0IHsgZ3JvdXBOb2Rlc0J5VGVybSwgSUdyb3VwZWROb2RlcywgSUdyb3VwZWROb2Rlc1ZhbHVlcyB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGl0ZW1Db2xvciwgZGVmYXVsdExhYmVsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgaW1wYWN0VmFsdWUgPSAoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgdmFsdWVzOiBJR3JvdXBlZE5vZGVzVmFsdWVzPEluZGljYXRvcj4pID0+XG4gICh2YWx1ZXNbaW1wYWN0WydAaWQnXV0/Lm5vZGVzWzBdIHx8IHsgdmFsdWU6IDAgfSkudmFsdWU7XG5cbmNvbnN0IGltcGFjdE5hbWUgPSAoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgaW5kZXg6IG51bWJlcikgPT5cbiAgYCR7aW5kZXggKyAxfS4gJHtkZWZhdWx0TGFiZWwoaW1wYWN0KX0gKCR7aW1wYWN0LnByb2R1Y3QudW5pdHN9KWA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBhY3RBc3Nlc3NtZW50c0luZGljYXRvcnNDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXJ0JylcbiAgcHJpdmF0ZSBjaGFydFJlZj86IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2hhcnQ6IGFueTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIGltcGFjdEFzc2Vzc21lbnRzOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUga2V5OiAnaW1wYWN0cycgfCAnZW1pc3Npb25zUmVzb3VyY2VVc2UnID0gJ2ltcGFjdHMnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG5cbiAgcHVibGljIGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQ6IElHcm91cGVkTm9kZXM8SW5kaWNhdG9yPiA9IHt9O1xuICBwdWJsaWMgdGVybXM6IFRlcm1bXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRUZXJtPzogVGVybTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHJldHVybiB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoJ2ltcGFjdEFzc2Vzc21lbnRzJyBpbiBjaGFuZ2VzICYmICFjaGFuZ2VzLmltcGFjdEFzc2Vzc21lbnRzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmICgnc2VsZWN0ZWQnIGluIGNoYW5nZXMgJiYgIWNoYW5nZXMuc2VsZWN0ZWQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRlcm1BbGxvd2VkKHRlcm0/OiBUZXJtKSB7XG4gICAgcmV0dXJuICF0aGlzLmZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8ICh0aGlzLmZpbHRlclRlcm1UeXBlcyB8fCBbXSkuaW5jbHVkZXModGVybT8udGVybVR5cGUhKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICB0aGlzLmluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQgPSBncm91cE5vZGVzQnlUZXJtPElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3I+KFxuICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cywgdGhpcy5rZXlcbiAgICApO1xuICAgIHRoaXMudGVybXMgPSBPYmplY3QudmFsdWVzKHRoaXMuaW5kaWNhdG9yUGVySW1wYWN0QXNzZXNzbWVudClcbiAgICAgIC5maWx0ZXIoKHsgdGVybSwgdmFsdWVzIH06IGFueSkgPT5cbiAgICAgICAgdGhpcy50ZXJtQWxsb3dlZCh0ZXJtKSAmJiBPYmplY3QudmFsdWVzKHZhbHVlcykuc29tZSgoeyBub2RlczogW3sgdmFsdWUgfV0gfTogYW55KSA9PiB2YWx1ZSA+PSAwKVxuICAgICAgKVxuICAgICAgLm1hcCgoeyB0ZXJtIH06IGFueSkgPT4gdGVybSk7XG4gICAgdGhpcy5zZWxlY3RlZFRlcm0gPSB0aGlzLnRlcm1zLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRUZXJtISkgPyB0aGlzLnNlbGVjdGVkVGVybSA6IHRoaXMudGVybXNbMF07XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZXJtID8gdGhpcy51cGRhdGVDaGFydCgpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENoYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1OYW1lID0gdGhpcy5zZWxlY3RlZFRlcm0/Lm5hbWU7XG4gICAgY29uc3QgeyB2YWx1ZXMgfSA9IHRoaXMuaW5kaWNhdG9yUGVySW1wYWN0QXNzZXNzbWVudFt0ZXJtTmFtZV0gfHwgeyB2YWx1ZXM6IHt9IH07XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5tYXAoaW1wYWN0TmFtZSk7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5tYXAoKGltcGFjdCwgaW5kZXgpID0+IGl0ZW1Db2xvcihpbmRleCkpO1xuICAgIGNvbnN0IGRhdGFzZXRzID0gW3tcbiAgICAgIGxhYmVsOiB0ZXJtTmFtZSB8fCAnJyxcbiAgICAgIGRhdGE6IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMubWFwKGltcGFjdCA9PiBpbXBhY3RWYWx1ZShpbXBhY3QsIHZhbHVlcykpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMsXG4gICAgICBib3JkZXJDb2xvcjogY29sb3JzXG4gICAgfV07XG5cbiAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgdGhpcy5jaGFydC5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQodGhpcy5jaGFydFJlZj8ubmF0aXZlRWxlbWVudCwge1xuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgZGF0YXNldHNcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiBbQ2hhcnREYXRhTGFiZWxzXSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgIGRhdGFsYWJlbHM6IHtcbiAgICAgICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgICAgICAgZm9ybWF0dGVyOiAodmFsdWUpID0+IHRvUHJlY2lzaW9uKHZhbHVlLCAzKSxcbiAgICAgICAgICAgIGFuY2hvcjogJ2NlbnRlcicsXG4gICAgICAgICAgICBjbGFtcDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgbWluOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoYXJ0KCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuaW5pdENoYXJ0KCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhdGVybXM/Lmxlbmd0aFwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaXMtaG9yaXpvbnRhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1sYWJlbCBpcy1ub3JtYWxcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCIgZm9yPVwic2VsZWN0ZWRUZXJtXCI+XG4gICAgICAgIDxzcGFuPlNlbGVjdCBhbiBJbmRpY2F0b3I8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCI+XG4gICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInVwZGF0ZUNoYXJ0KClcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVGVybVwiIGlkPVwic2VsZWN0ZWRUZXJtXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0ZXJtIG9mIHRlcm1zXCIgW25nVmFsdWVdPVwidGVybVwiPnt7dGVybS5uYW1lfX0gKHt7dGVybS51bml0c319KTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jb250YWluZXJcIj5cbiAgICAgIDxjYW52YXMgI2NoYXJ0PjwvY2FudmFzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|