@hestia-earth/ui-components 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hestia-earth-ui-components.umd.js +10 -9
- 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-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-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 +10 -9
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/package.json +1 -1
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbmdpbmUvZW5naW5lLW9yY2hlc3RyYXRvci1lZGl0L2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZW5naW5lL2VuZ2luZS1vcmNoZXN0cmF0b3ItZWRpdC9lbmdpbmUtb3JjaGVzdHJhdG9yLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQWtFLFlBQVksRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7OztBQUVqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLE9BQU8sc0NBQXNDLFNBQVMsRUFBRSxFQUFFLENBQUM7QUFDN0UsTUFBTSxjQUFjLEdBQUcsR0FBRyxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUU3RSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUM7SUFDdEMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDOUIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMzRCxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoQixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQTRCLEVBQUUsRUFBRSxDQUMxRjtJQUNFLDJCQUEyQjtJQUMzQixvQkFBb0I7Q0FDckIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDekIsYUFBYSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGdCQUFnQixDQUFBLENBQ3pELENBQUM7QUFFSixNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQTRCLEVBQUUsRUFBRSxDQUM3RjtJQUNFLDJCQUEyQjtJQUMzQixvQkFBb0I7Q0FDckIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDekIsYUFBYSxLQUFLLE1BQU0sS0FBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsZ0JBQWdCLENBQUEsQ0FDeEQsQ0FBQztBQUVKLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBa0UsRUFBRSxhQUFzQixFQUFFLEVBQUUsQ0FDckgsT0FBTztLQUNKLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDdkYsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUVuRixNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUV0RyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQWtFLEVBQUUsRUFBRSxDQUN6RixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN2QixNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDdEMsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ3pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUN4QyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQO0tBQ0EsU0FBUyxFQUFFLENBQUM7QUFPZixNQUFNLE9BQU8sK0JBQStCO0lBcUIxQyxZQUNVLG1CQUFvQztRQUFwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQWlCO1FBZHZDLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBTWhDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGNBQVMsR0FBb0IsTUFBTSxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBSXpCLENBQUM7SUFFTCxXQUFXLENBQUMsT0FBc0I7O1FBQ2hDLElBQUksTUFBQSxPQUFPLENBQUMsTUFBTSwwQ0FBRSxZQUFZLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksVUFBVSxJQUFJLE9BQU8sRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVhLGlCQUFpQjs7WUFDN0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQUE7SUFFTSxVQUFVLENBQUMsTUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQTRCO1FBQzFELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBNEI7UUFDOUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksRUFBRSxHQUFHLFlBQVksRUFBRSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUs7U0FDN0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBVSxFQUFFLEtBQWE7UUFDcEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUc7WUFDVixPQUFPLEVBQUU7WUFDVCxRQUFRO1lBQ1IsWUFBWSxDQUFDLFVBQVUsQ0FBQztTQUN6QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkUsQ0FBQztJQUdNLFlBQVk7UUFDakIsVUFBVSxDQUFDLEdBQVMsRUFBRTs7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDBDQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDTCxDQUFDOzs2SEE3RVUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNElDakU1Qyx3Z1JBMk5BOzRGRDFKYSwrQkFBK0I7a0JBTDNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsV0FBVyxFQUFFLDJDQUEyQztvQkFDeEQsU0FBUyxFQUFFLENBQUMsMkNBQTJDLENBQUM7aUJBQ3pEO3NHQUtTLE1BQU07c0JBRGIsS0FBSztnQkFHRSxRQUFRO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZ3JvdXBCeSwgbWVyZ2VNYXAsIHJlZHVjZSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5vZGVUeXBlLCBTY2hlbWFUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0ICogYXMgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5cbmltcG9ydCB7IEhlRW5naW5lU2VydmljZSwgSU9yY2hlc3RyYXRvckNvbmZpZywgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLCBlbmdpbmVHaXRVcmwsIElNb2RlbCB9IGZyb20gJy4uL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwsIGdpdEJyYW5jaCwgZ2l0SG9tZSB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IGdpdFVybCA9IGAke2dpdEhvbWV9L2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yLy0vYmxvYi8ke2dpdEJyYW5jaCgpfWA7XG5jb25zdCBnZW5lcmFsRG9jc1VybCA9IGAke2dpdFVybH0vaGVzdGlhX2VhcnRoL29yY2hlc3RyYXRvci9jb25maWcvUkVBRE1FLm1kYDtcbmNvbnN0IHN0cmF0ZWdpZXNEb2NzID0gYCR7Z2l0VXJsfS9oZXN0aWFfZWFydGgvb3JjaGVzdHJhdG9yL3N0cmF0ZWdpZXNgO1xuXG5jb25zdCBzY2hlbWFUeXBlS2V5cyA9IE9iamVjdC5rZXlzKFNjaGVtYVR5cGUpO1xuXG5jb25zdCB0b1NjaGVtYVR5cGUgPSAodmFsdWU6IHN0cmluZykgPT4ga2V5VG9MYWJlbCh2YWx1ZSkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuY29uc3QgaXNTY2hlbWFUeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+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
|
|
@@ -136,7 +136,7 @@ export class ImpactAssessmentsProductsComponent {
|
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
ImpactAssessmentsProductsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsComponent, deps: [{ token: i1.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
ImpactAssessmentsProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsComponent, selector: "he-impact-assessments-products", inputs: { cycles: "cycles", impactAssessments: "impactAssessments", key: "key", dataState: "dataState", filterTermTypes: "filterTermTypes", enableFilterMethodModel: "enableFilterMethodModel" }, 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 && indicators.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=\"impactAssessments.length > 1 || enableBreakdown || !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=\"impactAssessments.length > 1\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.chart\" (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.breakdown\" (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"showRecalculationLogs()\">\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=\"indicators.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"impactAssessments.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select name=\"selectedMethodModel\"\n (change)=\"updateImpacts()\" [(ngModel)]=\"selectedMethodModel\"\n >\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels\" [ngValue]=\"term\">{{term.name}}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.name\"\n >\n <he-node-link [node]=\"indicator.value.term\">\n <span>{{indicator.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/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.units\"\n >{{indicator.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{impactName(impactAssessment)}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.units\">\n <span class=\"is-nowrap has-text-ellipsis\">1 {{impactAssessment.product?.units}}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.name\">\n <he-node-link *ngIf=\"impactAssessment.product\" [node]=\"impactAssessment.product\">\n <span>{{impactAssessment.product.name | ellipsis:30}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators\">\n <span *ngIf=\"indicator.value.values[impactAssessment['@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: indicator.value.values[impactAssessment['@id']], impactAssessment: impactAssessment, key: key })\"\n >\n <span pointer>{{propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"\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<he-impact-assessments-indicator-breakdown-chart *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments[0]\"\n [indicators]=\"impactAssessments[0][key]\"\n></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart *ngIf=\"selectedView === View.chart && impactAssessments.length > 1\"\n [key]=\"key\"\n [impactAssessments]=\"impactAssessments\"\n [filterTermTypes]=\"filterTermTypes\"\n></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Impact Assessment</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 impactAssessments; let i = index\" [value]=\"i\">{{i + 1}}. {{impactName(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-impact-assessments-products-logs *ngIf=\"selectedIndex >= 0\"\n [key]=\"key\"\n [impactAssessment]=\"impactAssessments[selectedIndex]\"\n [filterTermTypes]=\"filterTermTypes\"\n [originalValues]=\"originalValues[selectedIndex]?.[key]\"\n [recalculatedValues]=\"impactAssessments[selectedIndex]?.[key]\"\n ></he-impact-assessments-products-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments\" [filename]=\"'impact-' + key + '.csv'\" [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + key + '.']\"\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=\"impactAssessment\" let-data=\"data\" let-key=\"key\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{cycleLabel(node.cycle)}}</span>\n <span *ngIf=\"!data.cycle\">{{data.name}}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.product.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\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: 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.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: i4.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { 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.ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { type: i8.ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["impactAssessments", "key", "filterTermTypes"] }, { type: i9.ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: ["impactAssessment", "key", "filterTermTypes", "originalValues", "recalculatedValues"] }, { type: i10.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i11.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }, { type: i12.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i14.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i14.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i13.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: i15.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }], pipes: { "ellipsis": i16.EllipsisPipe, "default": i17.DefaultPipe, "precision": i18.PrecisionPipe } });
|
|
139
|
+
ImpactAssessmentsProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsComponent, selector: "he-impact-assessments-products", inputs: { cycles: "cycles", impactAssessments: "impactAssessments", key: "key", dataState: "dataState", filterTermTypes: "filterTermTypes", enableFilterMethodModel: "enableFilterMethodModel" }, 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 && indicators.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=\"impactAssessments.length > 1 || enableBreakdown || !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=\"impactAssessments.length > 1\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.chart\" (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.breakdown\" (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"showRecalculationLogs()\">\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=\"indicators.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"impactAssessments.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select name=\"selectedMethodModel\"\n (change)=\"updateImpacts()\" [(ngModel)]=\"selectedMethodModel\"\n >\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels\" [ngValue]=\"term\">{{term.name}}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.name\"\n >\n <he-node-link [node]=\"indicator.value.term\">\n <span>{{indicator.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/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.units\"\n >{{indicator.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{impactName(impactAssessment)}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.units\">\n <span class=\"is-nowrap has-text-ellipsis\">1 {{impactAssessment.product?.units}}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.name\">\n <he-node-link *ngIf=\"impactAssessment.product\" [node]=\"impactAssessment.product\">\n <span>{{impactAssessment.product.name | ellipsis:30}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators\">\n <span *ngIf=\"indicator.value.values[impactAssessment['@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: indicator.value.values[impactAssessment['@id']], impactAssessment: impactAssessment, key: key })\"\n >\n <span pointer>{{propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"\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<he-impact-assessments-indicator-breakdown-chart *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments[0]\"\n [indicators]=\"impactAssessments[0][key]\"\n></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart *ngIf=\"selectedView === View.chart && impactAssessments.length > 1\"\n [key]=\"key\"\n [impactAssessments]=\"impactAssessments\"\n [filterTermTypes]=\"filterTermTypes\"\n></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Impact Assessment</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 impactAssessments; let i = index\" [value]=\"i\">{{i + 1}}. {{impactName(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-impact-assessments-products-logs *ngIf=\"selectedIndex >= 0\"\n [key]=\"key\"\n [impactAssessment]=\"impactAssessments[selectedIndex]\"\n [filterTermTypes]=\"filterTermTypes\"\n [originalValues]=\"originalValues[selectedIndex]?.[key]\"\n [recalculatedValues]=\"impactAssessments[selectedIndex]?.[key]\"\n ></he-impact-assessments-products-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments\" [filename]=\"'impact-' + key + '.csv'\" [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + key + '.']\"\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=\"impactAssessment\" let-data=\"data\" let-key=\"key\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{cycleLabel(node.cycle)}}</span>\n <span *ngIf=\"!data.cycle\">{{data.name}}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.product.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\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: 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.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: i4.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { 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.ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { type: i8.ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["impactAssessments", "key", "filterTermTypes"] }, { type: i9.ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: ["impactAssessment", "key", "filterTermTypes", "originalValues", "recalculatedValues"] }, { type: i10.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i11.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }, { type: i12.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i14.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i14.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i13.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: i15.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }], pipes: { "ellipsis": i16.EllipsisPipe, "default": i17.DefaultPipe, "precision": i18.PrecisionPipe } });
|
|
140
140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsComponent, decorators: [{
|
|
141
141
|
type: Component,
|
|
142
142
|
args: [{
|
|
@@ -157,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
157
157
|
}], enableFilterMethodModel: [{
|
|
158
158
|
type: Input
|
|
159
159
|
}] } });
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUk5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFKN0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFNMUMsSUFBSyxJQUtKO0FBTEQsV0FBSyxJQUFJO0lBQ1AsdUJBQWUsQ0FBQTtJQUNmLHVCQUFlLENBQUE7SUFDZiwrQkFBdUIsQ0FBQTtJQUN2QixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLElBQUksS0FBSixJQUFJLFFBS1I7QUFPRCxNQUFNLE9BQU8sa0NBQWtDO0lBK0I3QyxZQUNVLFdBQTBCO1FBQTFCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBL0I1QixvQkFBZSxH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QUFFLEVBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVkscUJBQXFCOztZQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQix5Q0FBeUM7WUFDekMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEMsQ0FBQztLQUFBOztnSUEzSVUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsNlJDdkIvQyxndFRBa05BOzRGRDNMYSxrQ0FBa0M7a0JBTDlDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7aUJBQzVEO29HQU1TLE1BQU07c0JBRGIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBR0MsR0FBRztzQkFEVCxLQUFLO2dCQUdDLFNBQVM7c0JBRGYsS0FBSztnQkFHQyxlQUFlO3NCQURyQixLQUFLO2dCQUdDLHVCQUF1QjtzQkFEN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSW5kaWNhdG9yLCBUZXJtVGVybVR5cGUsIFRlcm0gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5jb25zdCBvcmRlckJ5ID0gcmVxdWlyZSgnbG9kYXNoLm9yZGVyYnknKTtcblxuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwTm9kZXNCeVRlcm0sIElHcm91cGVkS2V5cywgZ3JvdXBwZWRLZXlzLCBpc01ldGhvZE1vZGVsQWxsb3dlZCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgYnJlYWtkb3duID0gJ2JyZWFrZG93bicsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwcml2YXRlIGRhdGFTdGF0ZVZhbHVlczoge1xuICAgIFtkYXRhU3RhdGUgaW4gRGF0YVN0YXRlXT86IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW107XG4gIH0gPSB7fTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjeWNsZXM/OiBJQ3ljbGVKU09OTERbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGtleTogJ2VuZHBvaW50cycgfCAnaW1wYWN0cycgfCAnZW1pc3Npb25zUmVzb3VyY2VVc2UnID0gJ2ltcGFjdHMnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVGaWx0ZXJNZXRob2RNb2RlbCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcblxuICBwdWJsaWMgbWV0aG9kTW9kZWxzOiBUZXJtW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkTWV0aG9kTW9kZWw/OiBUZXJtO1xuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XG5cbiAgcHVibGljIGluZGljYXRvcnM6IElHcm91cGVkS2V5czxJbmRpY2F0b3I+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdpbXBhY3RBc3Nlc3NtZW50cycgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5kYXRhU3RhdGVWYWx1ZXNbdGhpcy5kYXRhU3RhdGUhXSA9IGNoYW5nZXMuaW1wYWN0QXNzZXNzbWVudHMuY3VycmVudFZhbHVlLnNsaWNlKCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW5kZXgodGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoJ2RhdGFTdGF0ZScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9yaWdpbmFsVmFsdWVzKCkge1xuICAgIHJldHVybiAodGhpcy5pc09yaWdpbmFsID8gbnVsbCA6IHRoaXMuZGF0YVN0YXRlVmFsdWVzW0RhdGFTdGF0ZS5vcmlnaW5hbF0pIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZXJtQWxsb3dlZCh0ZXJtPzogVGVybSkge1xuICAgIHJldHVybiAhdGhpcy5maWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCAodGhpcy5maWx0ZXJUZXJtVHlwZXMgfHwgW10pLmluY2x1ZGVzKHRlcm0/LnRlcm1UeXBlISk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUltcGFjdHMoKTtcbiAgICB0aGlzLmVuYWJsZUZpbHRlck1ldGhvZE1vZGVsICYmIHRoaXMudXBkYXRlTWV0aG9kTW9kZWxzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1ldGhvZE1vZGVscygpIHtcbiAgICBjb25zdCBtZXRob2RNb2RlbHMgPSB0aGlzLmltcGFjdEFzc2Vzc21lbnRzXG4gICAgICAuZmxhdE1hcChpbXBhY3QgPT4gKGltcGFjdFt0aGlzLmtleV0gfHwgW10pLm1hcCh2ID0+IHYubWV0aG9kTW9kZWwpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLm1ldGhvZE1vZGVscyA9IHVuaXF1ZShtZXRob2RNb2RlbHMgYXMgVGVybVtdKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJbXBhY3RzKCkge1xuICAgIGNvbnN0IGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQgPSBncm91cE5vZGVzQnlUZXJtPElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3I+KFxuICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cyxcbiAgICAgIHRoaXMua2V5LFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlcyxcbiAgICAgIHRoaXMuZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWwgPyBpc01ldGhvZE1vZGVsQWxsb3dlZCh0aGlzLnNlbGVjdGVkTWV0aG9kTW9kZWwpIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgICB0aGlzLmluZGljYXRvcnMgPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50KSwgWyd2YWx1ZS5tZXRob2RUaWVyT3JkZXInLCAna2V5J10sIFsnYXNjJywgJ2FzYyddKVxuICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0aGlzLnRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhU3RhdGUoZGF0YVN0YXRlOiBEYXRhU3RhdGUpIHtcbiAgICB0aGlzLmRhdGFTdGF0ZVZhbHVlc1tkYXRhU3RhdGVdID0gdGhpcy5kYXRhU3RhdGVWYWx1ZXNbZGF0YVN0YXRlXT8ubGVuZ3RoID09PSB0aGlzLmltcGFjdEFzc2Vzc21lbnRzPy5sZW5ndGggP1xuICAgICAgdGhpcy5kYXRhU3RhdGVWYWx1ZXNbZGF0YVN0YXRlXSA6XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5tYXAobm9kZSA9PlxuICAgICAgICAgIHRoaXMubm9kZVNlcnZpY2UuZ2V0PElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEPih7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZGF0YVN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlRGF0YVN0YXRlKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGFTdGF0ZSh0aGlzLmRhdGFTdGF0ZSEpO1xuICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMgPSB0aGlzLmRhdGFTdGF0ZVZhbHVlc1t0aGlzLmRhdGFTdGF0ZSFdIS5zbGljZSgpO1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlciwgY29udGV4dCkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIGltcGFjdE5hbWUoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpbXBhY3QubmFtZSB8fCAoaW1wYWN0LmN5Y2xlID8gdGhpcy5jeWNsZUxhYmVsKGltcGFjdC5jeWNsZSkgOiBpbXBhY3RbJ0BpZCddKSB8fCAoaW1wYWN0IGFzIGFueSkuaWQ7XG4gIH1cblxuICBwdWJsaWMgY3ljbGVMYWJlbCh7ICdAaWQnOiBpZCwgbmFtZSB9OiBhbnkpIHtcbiAgICByZXR1cm4gbmFtZSB8fCAodGhpcy5jeWNsZXMgfHwgW10pLmZpbmQodiA9PiB2WydAaWQnXSA9PT0gaWQpPy5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBlbmFibGVCcmVha2Rvd24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3JpZ2luYWwgJiYgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPT09IDEgJiYgdGhpcy5rZXkgIT09ICdlbWlzc2lvbnNSZXNvdXJjZVVzZSc7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1JlY2FsY3VsYXRpb25Mb2dzKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgLy8gbWFrZSBzdXJlIG9yaWdpbmFsIGRhdGEgaXMgYWxzbyBsb2FkZWRcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhU3RhdGUoRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcubG9ncztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtYWxpZ24taXRlbXMtY2VudGVyIGlzLTIgbS0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtaGlkZGVuLW1vYmlsZVwiPjwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlICYmIGluZGljYXRvcnMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwXCI+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMSB8fCBlbmFibGVCcmVha2Rvd24gfHwgIWlzT3JpZ2luYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmNoYXJ0XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcuY2hhcnRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjaGFydC1iYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPkNoYXJ0IHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiZW5hYmxlQnJlYWtkb3duXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5icmVha2Rvd25cIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy5icmVha2Rvd25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjaGFydC1iYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPkJyZWFrZG93biB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cIiFpc09yaWdpbmFsXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzXCIgKGNsaWNrKT1cInNob3dSZWNhbGN1bGF0aW9uTG9ncygpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2FsY3VsYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+UmVjYWxjdWxhdGlvbnMgbG9nczwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2VsZWN0ZWRWaWV3ICE9PSBWaWV3LnRhYmxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRpY2F0b3JzLmxlbmd0aDsgZWxzZSBlbXB0eVRhYmxlXCI+XG4gICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBbbmJSb3dzXT1cImltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aFwiIG1heEhlaWdodD1cIjMyMFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gcHktMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCIgKm5nSWY9XCJlbmFibGVGaWx0ZXJNZXRob2RNb2RlbFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInNlbGVjdGVkTWV0aG9kTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVJbXBhY3RzKClcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWV0aG9kTW9kZWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwidW5kZWZpbmVkXCI+RmlsdGVyIE1vZGVsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0ZXJtIG9mIG1ldGhvZE1vZGVsc1wiIFtuZ1ZhbHVlXT1cInRlcm1cIj57e3Rlcm0ubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm0ubmFtZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2luZGljYXRvci52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczozMH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0ltcGFjdEFzc2Vzc21lbnQjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0ltcGFjdEFzc2Vzc21lbnQjcHJvZHVjdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Qcm9kdWN0PC9hPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaW5kaWNhdG9yIG9mIGluZGljYXRvcnNcIlxuICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpbmRpY2F0b3IudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICA+e3tpbmRpY2F0b3IudmFsdWUudGVybS51bml0c319PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1wYWN0QXNzZXNzbWVudCBvZiBpbXBhY3RBc3Nlc3NtZW50czsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG9cIiBbYXR0ci50aXRsZV09XCJpbXBhY3ROYW1lKGltcGFjdEFzc2Vzc21lbnQpXCI+XG4gICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJpbXBhY3RBc3Nlc3NtZW50XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7aSArIDF9fS4ge3tpbXBhY3ROYW1lKGltcGFjdEFzc2Vzc21lbnQpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnVuaXRzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj4xIHt7aW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py51bml0c319PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py5uYW1lXCI+XG4gICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdFwiIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QubmFtZSB8IGVsbGlwc2lzOjMwfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBpbmRpY2F0b3Igb2YgaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV07IGVsc2UgZW1wdHlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRyaWdnZXItcG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJkZXRhaWxzXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjcD1cIm5nYlBvcG92ZXJcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUG9wb3ZlcihwLCB7IGRhdGE6IGluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLCBpbXBhY3RBc3Nlc3NtZW50OiBpbXBhY3RBc3Nlc3NtZW50LCBrZXk6IGtleSB9KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj57e3Byb3BlcnR5VmFsdWUoaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0udmFsdWUsIGluZGljYXRvci52YWx1ZS50ZXJtWydAaWQnXSkgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZSBjbGFzcz1cIm1sLTFcIiBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2RlXT1cImluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpbXBhY3RBc3Nlc3NtZW50LmFnZ3JlZ2F0ZWQgPyAnYWdncmVnYXRlZCcgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuYnJlYWtkb3duXCJcbiAgW2ltcGFjdEFzc2Vzc21lbnRdPVwiaW1wYWN0QXNzZXNzbWVudHNbMF1cIlxuICBbaW5kaWNhdG9yc109XCJpbXBhY3RBc3Nlc3NtZW50c1swXVtrZXldXCJcbj48L2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3ItYnJlYWtkb3duLWNoYXJ0PlxuXG48aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuY2hhcnQgJiYgaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiXG4gIFtrZXldPVwia2V5XCJcbiAgW2ltcGFjdEFzc2Vzc21lbnRzXT1cImltcGFjdEFzc2Vzc21lbnRzXCJcbiAgW2ZpbHRlclRlcm1UeXBlc109XCJmaWx0ZXJUZXJtVHlwZXNcIlxuPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQ+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9ncyAmJiAhaXNPcmlnaW5hbFwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTNcIiAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljXCI+U2VsZWN0IGFuIEltcGFjdCBBc3Nlc3NtZW50PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aFwiPlxuICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwic2VsZWN0SW5kZXgoJGV2ZW50KVwiPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGltcGFjdEFzc2Vzc21lbnRzOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj57e2kgKyAxfX0uIHt7aW1wYWN0TmFtZSh2YWx1ZSl9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8aGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3MgKm5nSWY9XCJzZWxlY3RlZEluZGV4ID49IDBcIlxuICAgIFtrZXldPVwia2V5XCJcbiAgICBbaW1wYWN0QXNzZXNzbWVudF09XCJpbXBhY3RBc3Nlc3NtZW50c1tzZWxlY3RlZEluZGV4XVwiXG4gICAgW2ZpbHRlclRlcm1UeXBlc109XCJmaWx0ZXJUZXJtVHlwZXNcIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJvcmlnaW5hbFZhbHVlc1tzZWxlY3RlZEluZGV4XT8uW2tleV1cIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwiaW1wYWN0QXNzZXNzbWVudHNbc2VsZWN0ZWRJbmRleF0/LltrZXldXCJcbiAgPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3M+XG48L25nLWNvbnRhaW5lcj5cblxuPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtICpuZ0lmPVwic2hvd0Rvd25sb2FkXCJcbiAgW25vZGVzXT1cImltcGFjdEFzc2Vzc21lbnRzXCIgW2ZpbGVuYW1lXT1cIidpbXBhY3QtJyArIGtleSArICcuY3N2J1wiIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cIlsnaW1wYWN0QXNzZXNzbWVudC5pZCcsICdpbXBhY3RBc3Nlc3NtZW50LkBpZCcsICdpbXBhY3RBc3Nlc3NtZW50LicgKyBrZXkgKyAnLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiXG4+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICA8c3Bhbj5ObyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImltcGFjdEFzc2Vzc21lbnRcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwICpiaW5kT25jZT1cIm5vZGVcIj5cbiAgICA8Yj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5jeWNsZVwiPnt7Y3ljbGVMYWJlbChub2RlLmN5Y2xlKX19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0YS5jeWNsZVwiPnt7ZGF0YS5uYW1lfX08L3NwYW4+XG4gICAgPC9iPlxuICA8L3A+XG4gIDxoZS1ub2RlLXZhbHVlLWRldGFpbHNcbiAgICBbZGF0YV09XCJkYXRhXCIgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIiBbZGF0YUtleV09XCJrZXlcIlxuICA+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb24gbGV0LWltcGFjdD1cInJlc3VsdFwiIGxldC10PVwidGVybVwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtYmxvY2tcIj5cbiAgICA8bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5uYW1lIHx8IGltcGFjdC5jeWNsZS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJpbXBhY3QuY291bnRyeVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkNvdW50cnk6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LmNvdW50cnkubmFtZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5wcm9kdWN0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+UHJvZHVjdDo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QucHJvZHVjdC5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiaW1wYWN0LmVuZERhdGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBoYXMtdGV4dC11bmRlcmxpbmVcIj5EYXRlOjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWZsZXhcIj48bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5lbmREYXRlXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUk5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFKN0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFNMUMsSUFBSyxJQUtKO0FBTEQsV0FBSyxJQUFJO0lBQ1AsdUJBQWUsQ0FBQTtJQUNmLHVCQUFlLENBQUE7SUFDZiwrQkFBdUIsQ0FBQTtJQUN2QixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLElBQUksS0FBSixJQUFJLFFBS1I7QUFPRCxNQUFNLE9BQU8sa0NBQWtDO0lBK0I3QyxZQUNVLFdBQTBCO1FBQTFCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBL0I1QixvQkFBZSxH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QUFFLEVBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVkscUJBQXFCOztZQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQix5Q0FBeUM7WUFDekMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEMsQ0FBQztLQUFBOztnSUEzSVUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsNlJDdkIvQyxpdVRBa05BOzRGRDNMYSxrQ0FBa0M7a0JBTDlDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLDhDQUE4QztvQkFDM0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7aUJBQzVEO29HQU1TLE1BQU07c0JBRGIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBR0MsR0FBRztzQkFEVCxLQUFLO2dCQUdDLFNBQVM7c0JBRGYsS0FBSztnQkFHQyxlQUFlO3NCQURyQixLQUFLO2dCQUdDLHVCQUF1QjtzQkFEN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSW5kaWNhdG9yLCBUZXJtVGVybVR5cGUsIFRlcm0gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5jb25zdCBvcmRlckJ5ID0gcmVxdWlyZSgnbG9kYXNoLm9yZGVyYnknKTtcblxuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwTm9kZXNCeVRlcm0sIElHcm91cGVkS2V5cywgZ3JvdXBwZWRLZXlzLCBpc01ldGhvZE1vZGVsQWxsb3dlZCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgYnJlYWtkb3duID0gJ2JyZWFrZG93bicsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwcml2YXRlIGRhdGFTdGF0ZVZhbHVlczoge1xuICAgIFtkYXRhU3RhdGUgaW4gRGF0YVN0YXRlXT86IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW107XG4gIH0gPSB7fTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjeWNsZXM/OiBJQ3ljbGVKU09OTERbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGtleTogJ2VuZHBvaW50cycgfCAnaW1wYWN0cycgfCAnZW1pc3Npb25zUmVzb3VyY2VVc2UnID0gJ2ltcGFjdHMnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVGaWx0ZXJNZXRob2RNb2RlbCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcblxuICBwdWJsaWMgbWV0aG9kTW9kZWxzOiBUZXJtW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkTWV0aG9kTW9kZWw/OiBUZXJtO1xuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XG5cbiAgcHVibGljIGluZGljYXRvcnM6IElHcm91cGVkS2V5czxJbmRpY2F0b3I+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdpbXBhY3RBc3Nlc3NtZW50cycgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5kYXRhU3RhdGVWYWx1ZXNbdGhpcy5kYXRhU3RhdGUhXSA9IGNoYW5nZXMuaW1wYWN0QXNzZXNzbWVudHMuY3VycmVudFZhbHVlLnNsaWNlKCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW5kZXgodGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoJ2RhdGFTdGF0ZScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRGF0YVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9yaWdpbmFsVmFsdWVzKCkge1xuICAgIHJldHVybiAodGhpcy5pc09yaWdpbmFsID8gbnVsbCA6IHRoaXMuZGF0YVN0YXRlVmFsdWVzW0RhdGFTdGF0ZS5vcmlnaW5hbF0pIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZXJtQWxsb3dlZCh0ZXJtPzogVGVybSkge1xuICAgIHJldHVybiAhdGhpcy5maWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCAodGhpcy5maWx0ZXJUZXJtVHlwZXMgfHwgW10pLmluY2x1ZGVzKHRlcm0/LnRlcm1UeXBlISk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUltcGFjdHMoKTtcbiAgICB0aGlzLmVuYWJsZUZpbHRlck1ldGhvZE1vZGVsICYmIHRoaXMudXBkYXRlTWV0aG9kTW9kZWxzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1ldGhvZE1vZGVscygpIHtcbiAgICBjb25zdCBtZXRob2RNb2RlbHMgPSB0aGlzLmltcGFjdEFzc2Vzc21lbnRzXG4gICAgICAuZmxhdE1hcChpbXBhY3QgPT4gKGltcGFjdFt0aGlzLmtleV0gfHwgW10pLm1hcCh2ID0+IHYubWV0aG9kTW9kZWwpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLm1ldGhvZE1vZGVscyA9IHVuaXF1ZShtZXRob2RNb2RlbHMgYXMgVGVybVtdKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJbXBhY3RzKCkge1xuICAgIGNvbnN0IGluZGljYXRvclBlckltcGFjdEFzc2Vzc21lbnQgPSBncm91cE5vZGVzQnlUZXJtPElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3I+KFxuICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cyxcbiAgICAgIHRoaXMua2V5LFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlcyxcbiAgICAgIHRoaXMuZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWwgPyBpc01ldGhvZE1vZGVsQWxsb3dlZCh0aGlzLnNlbGVjdGVkTWV0aG9kTW9kZWwpIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgICB0aGlzLmluZGljYXRvcnMgPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50KSwgWyd2YWx1ZS5tZXRob2RUaWVyT3JkZXInLCAna2V5J10sIFsnYXNjJywgJ2FzYyddKVxuICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0aGlzLnRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhU3RhdGUoZGF0YVN0YXRlOiBEYXRhU3RhdGUpIHtcbiAgICB0aGlzLmRhdGFTdGF0ZVZhbHVlc1tkYXRhU3RhdGVdID0gdGhpcy5kYXRhU3RhdGVWYWx1ZXNbZGF0YVN0YXRlXT8ubGVuZ3RoID09PSB0aGlzLmltcGFjdEFzc2Vzc21lbnRzPy5sZW5ndGggP1xuICAgICAgdGhpcy5kYXRhU3RhdGVWYWx1ZXNbZGF0YVN0YXRlXSA6XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5tYXAobm9kZSA9PlxuICAgICAgICAgIHRoaXMubm9kZVNlcnZpY2UuZ2V0PElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEPih7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZGF0YVN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlRGF0YVN0YXRlKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGFTdGF0ZSh0aGlzLmRhdGFTdGF0ZSEpO1xuICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMgPSB0aGlzLmRhdGFTdGF0ZVZhbHVlc1t0aGlzLmRhdGFTdGF0ZSFdIS5zbGljZSgpO1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlciwgY29udGV4dCkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIGltcGFjdE5hbWUoaW1wYWN0OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpbXBhY3QubmFtZSB8fCAoaW1wYWN0LmN5Y2xlID8gdGhpcy5jeWNsZUxhYmVsKGltcGFjdC5jeWNsZSkgOiBpbXBhY3RbJ0BpZCddKSB8fCAoaW1wYWN0IGFzIGFueSkuaWQ7XG4gIH1cblxuICBwdWJsaWMgY3ljbGVMYWJlbCh7ICdAaWQnOiBpZCwgbmFtZSB9OiBhbnkpIHtcbiAgICByZXR1cm4gbmFtZSB8fCAodGhpcy5jeWNsZXMgfHwgW10pLmZpbmQodiA9PiB2WydAaWQnXSA9PT0gaWQpPy5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBlbmFibGVCcmVha2Rvd24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3JpZ2luYWwgJiYgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPT09IDEgJiYgdGhpcy5rZXkgIT09ICdlbWlzc2lvbnNSZXNvdXJjZVVzZSc7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1JlY2FsY3VsYXRpb25Mb2dzKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgLy8gbWFrZSBzdXJlIG9yaWdpbmFsIGRhdGEgaXMgYWxzbyBsb2FkZWRcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhU3RhdGUoRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcubG9ncztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtYWxpZ24taXRlbXMtY2VudGVyIGlzLTIgbS0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtaGlkZGVuLW1vYmlsZVwiPjwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlICYmIGluZGljYXRvcnMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCJpbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPiAxIHx8IGVuYWJsZUJyZWFrZG93biB8fCAhaXNPcmlnaW5hbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGVcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuY2hhcnRcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy5jaGFydFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNoYXJ0LWJhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+Q2hhcnQgdmlldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCJlbmFibGVCcmVha2Rvd25cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmJyZWFrZG93blwiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmJyZWFrZG93blwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNoYXJ0LWJhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+QnJlYWtkb3duIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiIWlzT3JpZ2luYWxcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3NcIiAoY2xpY2spPVwic2hvd1JlY2FsY3VsYXRpb25Mb2dzKClcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjYWxjdWxhdG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5SZWNhbGN1bGF0aW9ucyBsb2dzPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzZWxlY3RlZFZpZXcgIT09IFZpZXcudGFibGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGljYXRvcnMubGVuZ3RoOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIFtuYlJvd3NdPVwiaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBweS0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGxcIiAqbmdJZj1cImVuYWJsZUZpbHRlck1ldGhvZE1vZGVsXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0ZWRNZXRob2RNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUltcGFjdHMoKVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXRob2RNb2RlbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJ1bmRlZmluZWRcIj5GaWx0ZXIgTW9kZWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHRlcm0gb2YgbWV0aG9kTW9kZWxzXCIgW25nVmFsdWVdPVwidGVybVwiPnt7dGVybS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaW5kaWNhdG9yIG9mIGluZGljYXRvcnNcIlxuICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpbmRpY2F0b3IudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJpbmRpY2F0b3IudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7aW5kaWNhdG9yLnZhbHVlLnRlcm0ubmFtZSB8IGVsbGlwc2lzOjMwfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvSW1wYWN0QXNzZXNzbWVudCNmdW5jdGlvbmFsVW5pdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5GdW5jdGlvbmFsIHVuaXQ8L2E+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvSW1wYWN0QXNzZXNzbWVudCNwcm9kdWN0J1wiIHRhcmdldD1cIl9ibGFua1wiPlByb2R1Y3Q8L2E+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBpbmRpY2F0b3Igb2YgaW5kaWNhdG9yc1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImluZGljYXRvci52YWx1ZS50ZXJtLnVuaXRzXCJcbiAgICAgICAgICAgID57e2luZGljYXRvci52YWx1ZS50ZXJtLnVuaXRzfX08L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbXBhY3RBc3Nlc3NtZW50IG9mIGltcGFjdEFzc2Vzc21lbnRzOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0b1wiIFthdHRyLnRpdGxlXT1cImltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudClcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2ltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudCl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udW5pdHNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPjEge3tpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnVuaXRzfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0XCIgW25vZGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0XCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2ltcGFjdEFzc2Vzc21lbnQucHJvZHVjdC5uYW1lIHwgZWxsaXBzaXM6MzB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaXMtbm93cmFwXCIgKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmRpY2F0b3IudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXTsgZWxzZSBlbXB0eVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0sIGltcGFjdEFzc2Vzc21lbnQ6IGltcGFjdEFzc2Vzc21lbnQsIGtleToga2V5IH0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBwb2ludGVyPnt7cHJvcGVydHlWYWx1ZShpbmRpY2F0b3IudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXS52YWx1ZSwgaW5kaWNhdG9yLnZhbHVlLnRlcm1bJ0BpZCddKSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlIGNsYXNzPVwibWwtMVwiIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwiaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImltcGFjdEFzc2Vzc21lbnQuYWdncmVnYXRlZCA/ICdhZ2dyZWdhdGVkJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvaGUtZGF0YS10YWJsZT5cblxuICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxoZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9yLWJyZWFrZG93bi1jaGFydCAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5icmVha2Rvd25cIlxuICBbaW1wYWN0QXNzZXNzbWVudF09XCJpbXBhY3RBc3Nlc3NtZW50c1swXVwiXG4gIFtpbmRpY2F0b3JzXT1cImltcGFjdEFzc2Vzc21lbnRzWzBdW2tleV1cIlxuPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQ+XG5cbjxoZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydCAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5jaGFydCAmJiBpbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPiAxXCJcbiAgW2tleV09XCJrZXlcIlxuICBbaW1wYWN0QXNzZXNzbWVudHNdPVwiaW1wYWN0QXNzZXNzbWVudHNcIlxuICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlc1wiXG4+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsXCI+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWNcIj5TZWxlY3QgYW4gSW1wYWN0IEFzc2Vzc21lbnQ8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoXCI+XG4gICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgaW1wYWN0QXNzZXNzbWVudHM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPnt7aSArIDF9fS4ge3tpbXBhY3ROYW1lKHZhbHVlKX19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxoZS1pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncyAqbmdJZj1cInNlbGVjdGVkSW5kZXggPj0gMFwiXG4gICAgW2tleV09XCJrZXlcIlxuICAgIFtpbXBhY3RBc3Nlc3NtZW50XT1cImltcGFjdEFzc2Vzc21lbnRzW3NlbGVjdGVkSW5kZXhdXCJcbiAgICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlc1wiXG4gICAgW29yaWdpbmFsVmFsdWVzXT1cIm9yaWdpbmFsVmFsdWVzW3NlbGVjdGVkSW5kZXhdPy5ba2V5XVwiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJpbXBhY3RBc3Nlc3NtZW50c1tzZWxlY3RlZEluZGV4XT8uW2tleV1cIlxuICA+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncz5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0gKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiaW1wYWN0QXNzZXNzbWVudHNcIiBbZmlsZW5hbWVdPVwiJ2ltcGFjdC0nICsga2V5ICsgJy5jc3YnXCIgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydpbXBhY3RBc3Nlc3NtZW50LmlkJywgJ2ltcGFjdEFzc2Vzc21lbnQuQGlkJywgJ2ltcGFjdEFzc2Vzc21lbnQuJyArIGtleSArICcuJ11cIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCJcbj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgIDxzcGFuPk5vIGRhdGE8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVZhbHVlPlxuICA8c3Bhbj4tPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwiaW1wYWN0QXNzZXNzbWVudFwiIGxldC1kYXRhPVwiZGF0YVwiIGxldC1rZXk9XCJrZXlcIj5cbiAgPHAgKmJpbmRPbmNlPVwibm9kZVwiPlxuICAgIDxiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmN5Y2xlXCI+e3tjeWNsZUxhYmVsKG5vZGUuY3ljbGUpfX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFkYXRhLmN5Y2xlXCI+e3tkYXRhLm5hbWV9fTwvc3Bhbj5cbiAgICA8L2I+XG4gIDwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIiBbbm9kZVR5cGVdPVwibm9kZVsnQHR5cGUnXVwiIFtkYXRhS2V5XT1cImtleVwiXG4gID48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3VnZ2VzdGlvbiBsZXQtaW1wYWN0PVwicmVzdWx0XCIgbGV0LXQ9XCJ0ZXJtXCI+XG4gIDxkaXYgY2xhc3M9XCJpcy1ibG9ja1wiPlxuICAgIDxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0Lm5hbWUgfHwgaW1wYWN0LmN5Y2xlLm5hbWVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtZmxleFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5jb3VudHJ5XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+Q291bnRyeTo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QuY291bnRyeS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiaW1wYWN0LnByb2R1Y3RcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBoYXMtdGV4dC11bmRlcmxpbmVcIj5Qcm9kdWN0Ojwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWZsZXhcIj48bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5wcm9kdWN0Lm5hbWVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0Pjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJpbXBhY3QuZW5kRGF0ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkRhdGU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LmVuZERhdGVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0Pjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -74,7 +74,7 @@ export class SitesMeasurementsComponent {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
SitesMeasurementsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SitesMeasurementsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
-
SitesMeasurementsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SitesMeasurementsComponent, selector: "he-sites-measurements", inputs: { originalValues: "originalValues", sites: "sites", 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 && measurements.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=\"!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\">\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=\"measurements.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"sites.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th *ngFor=\"let measurement of measurements\"\n [attr.title]=\"measurement.value.term.name\"\n >\n <he-node-link [node]=\"measurement.value.term\">\n <span>{{measurement.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\"></th>\n <th *ngFor=\"let measurement of measurements\"\n [attr.title]=\"measurement.value.term.units\"\n >{{measurement.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(site)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements\">\n <span *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\"\n >\n <span pointer>{{measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"\n ></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\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\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig\">\n (1) This region is >{{maxAreaSize}}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a Site</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 sites; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-sites-measurements-logs *ngIf=\"selectedIndex >= 0\"\n [site]=\"sites[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.measurements\"\n [recalculatedValues]=\"sites[selectedIndex]?.measurements\"\n ></he-sites-measurements-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"sites\" filename=\"site-measurements.csv\" [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\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=\"site\" let-data=\"data\" let-key=\"key\">\n <p><b>{{node.name}}</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}\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.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state"] }, { type: i5.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { type: i6.SitesMeasurementsLogsComponent, selector: "he-sites-measurements-logs", inputs: ["site", "originalValues", "recalculatedValues"] }, { type: i7.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i8.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: i11.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i11.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "ellipsis": i12.EllipsisPipe, "default": i13.DefaultPipe, "precision": i14.PrecisionPipe } });
|
|
77
|
+
SitesMeasurementsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SitesMeasurementsComponent, selector: "he-sites-measurements", inputs: { originalValues: "originalValues", sites: "sites", 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 && measurements.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=\"!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\">\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=\"measurements.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"sites.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th *ngFor=\"let measurement of measurements\"\n [attr.title]=\"measurement.value.term.name\"\n >\n <he-node-link [node]=\"measurement.value.term\">\n <span>{{measurement.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\"></th>\n <th *ngFor=\"let measurement of measurements\"\n [attr.title]=\"measurement.value.term.units\"\n >{{measurement.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(site)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements\">\n <span *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\"\n >\n <span pointer>{{measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id']) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"\n ></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\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\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig\">\n (1) This region is >{{maxAreaSize}}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select a Site</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 sites; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-sites-measurements-logs *ngIf=\"selectedIndex >= 0\"\n [site]=\"sites[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.measurements\"\n [recalculatedValues]=\"sites[selectedIndex]?.measurements\"\n ></he-sites-measurements-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"sites\" filename=\"site-measurements.csv\" [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\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=\"site\" let-data=\"data\" let-key=\"key\">\n <p><b>{{node.name}}</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}\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.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state"] }, { type: i5.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { type: i6.SitesMeasurementsLogsComponent, selector: "he-sites-measurements-logs", inputs: ["site", "originalValues", "recalculatedValues"] }, { type: i7.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i8.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: i11.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i11.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "ellipsis": i12.EllipsisPipe, "default": i13.DefaultPipe, "precision": i14.PrecisionPipe } });
|
|
78
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SitesMeasurementsComponent, decorators: [{
|
|
79
79
|
type: Component,
|
|
80
80
|
args: [{
|
|
@@ -89,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
89
89
|
}], dataState: [{
|
|
90
90
|
type: Input
|
|
91
91
|
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUpsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQU0xQyxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCx1QkFBZSxDQUFBO0lBQ2YscUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFISSxJQUFJLEtBQUosSUFBSSxRQUdSO0FBT0QsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQU9TLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUVuQyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUkxQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osaUJBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzFCLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFDeEIsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsaUJBQVksR0FBZ0MsRUFBRSxDQUFDO0tBOEN2RDtJQTVDQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLFdBQVcsSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRU8sTUFBTTtRQUNaLE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCLENBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ25DLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxxQkFBcUI7SUFFYixtQkFBbUIsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsOEJBQThCO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOzt3SEE5RFUsMEJBQTBCOzRHQUExQiwwQkFBMEIsd0tDbkJ2Qyxzd0xBMElBOzRGRHZIYSwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLHFDQUFxQztvQkFDbEQsU0FBUyxFQUFFLENBQUMscUNBQXFDLENBQUM7aUJBQ25EOzhCQUdRLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUdDLFNBQVM7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSVNpdGVKU09OTEQsIE1lYXN1cmVtZW50IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7IG1lYXN1cmVtZW50VmFsdWUsIG1heEFyZWFTaXplLCBzaXRlVG9vQmlnIH0gZnJvbSAnLi4vc2l0ZXMubW9kZWwnO1xuaW1wb3J0IHsgZ3JvdXBOb2Rlc0J5VGVybSwgSUdyb3VwZWRLZXlzLCBncm91cHBlZEtleXMgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc2l0ZXMtbWVhc3VyZW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpdGVzLW1lYXN1cmVtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpdGVzLW1lYXN1cmVtZW50cy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpdGVzTWVhc3VyZW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KClcbiAgcHVibGljIG9yaWdpbmFsVmFsdWVzOiBJU2l0ZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXRlczogSVNpdGVKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuXG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xuICBwdWJsaWMgbWF4QXJlYVNpemUgPSBtYXhBcmVhU2l6ZTtcbiAgcHVibGljIHNpdGVUb29CaWcgPSBzaXRlVG9vQmlnO1xuICBwdWJsaWMgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwdWJsaWMgbWVhc3VyZW1lbnRWYWx1ZSA9IG1lYXN1cmVtZW50VmFsdWU7XG5cbiAgcHVibGljIG1lYXN1cmVtZW50czogSUdyb3VwZWRLZXlzPE1lYXN1cmVtZW50PltdID0gW107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICgnc2l0ZXMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbmRleCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmICgnZGF0YVN0YXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSVNpdGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBtZWFzdXJlbWVudHNQZXJTaXRlID0gZ3JvdXBOb2Rlc0J5VGVybTxJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQ+KFxuICAgICAgdGhpcy5zaXRlcywgJ21lYXN1cmVtZW50cycsIHRoaXMub3JpZ2luYWxWYWx1ZXNcbiAgICApO1xuICAgIHRoaXMubWVhc3VyZW1lbnRzID0gb3JkZXJCeShncm91cHBlZEtleXMobWVhc3VyZW1lbnRzUGVyU2l0ZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlciwgY29udGV4dCkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93QXJlYVRvb0JpZygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RhdGUgPT09IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWQgJiYgKHRoaXMuc2l0ZXMgfHwgW10pLnNvbWUoc2l0ZVRvb0JpZyk7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZSAmJiBtZWFzdXJlbWVudHMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwXCI+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiICpuZ0lmPVwiIWlzT3JpZ2luYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3NcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy5sb2dzXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2FsY3VsYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+UmVjYWxjdWxhdGlvbnMgbG9nczwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2VsZWN0ZWRWaWV3ICE9PSBWaWV3LnRhYmxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZWFzdXJlbWVudHMubGVuZ3RoOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIFtuYlJvd3NdPVwic2l0ZXMubGVuZ3RoXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0b1wiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50c1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm1lYXN1cmVtZW50LnZhbHVlLnRlcm0ubmFtZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7bWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lIHwgZWxsaXBzaXM6MzB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0b1wiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50c1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm1lYXN1cmVtZW50LnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgPnt7bWVhc3VyZW1lbnQudmFsdWUudGVybS51bml0c319PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2l0ZSBvZiBzaXRlczsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG9cIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoc2l0ZSlcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cInNpdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2RlZmF1bHRMYWJlbChzaXRlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgbWVhc3VyZW1lbnQgb2YgbWVhc3VyZW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiICNwPVwibmdiUG9wb3ZlclwiIHBsYWNlbWVudD1cImxlZnRcIiBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogbWVhc3VyZW1lbnQudmFsdWUudmFsdWVzW3NpdGVbJ0BpZCddXSwgc2l0ZTogc2l0ZSwga2V5OiAnbWVhc3VyZW1lbnRzJyB9KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj57e21lYXN1cmVtZW50VmFsdWUobWVhc3VyZW1lbnQudmFsdWUudmFsdWVzW3NpdGVbJ0BpZCddXSwgbWVhc3VyZW1lbnQudmFsdWUudGVybVsnQGlkJ10pIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUgY2xhc3M9XCJtbC0xXCIgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4tPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cInBsLTFcIiAqbmdJZj1cInNpdGVUb29CaWcoc2l0ZSlcIj4oMSk8L3N1cD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuXG4gICAgPHAgY2xhc3M9XCJpcy1zaXplLTcgaXMtaXRhbGljXCIgKm5nSWY9XCJzaG93QXJlYVRvb0JpZ1wiPlxuICAgICAgKDEpIFRoaXMgcmVnaW9uIGlzID57e21heEFyZWFTaXplfX1rbTIgYW5kIGlzIHRvbyBsYXJnZSB0byByZWxpYWJseSBnYXAgZmlsbCBNZWFzdXJlbWVudHMuXG4gICAgPC9wPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3MgJiYgIWlzT3JpZ2luYWxcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zXCIgKm5nSWY9XCJzaXRlcy5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpY1wiPlNlbGVjdCBhIFNpdGU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoXCI+XG4gICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygc2l0ZXM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPnt7aSArIDF9fS4ge3tkZWZhdWx0TGFiZWwodmFsdWUpfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGhlLXNpdGVzLW1lYXN1cmVtZW50cy1sb2dzICpuZ0lmPVwic2VsZWN0ZWRJbmRleCA+PSAwXCJcbiAgICBbc2l0ZV09XCJzaXRlc1tzZWxlY3RlZEluZGV4XVwiXG4gICAgW29yaWdpbmFsVmFsdWVzXT1cIm9yaWdpbmFsVmFsdWVzW3NlbGVjdGVkSW5kZXhdPy5tZWFzdXJlbWVudHNcIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2l0ZXNbc2VsZWN0ZWRJbmRleF0/Lm1lYXN1cmVtZW50c1wiXG4gID48L2hlLXNpdGVzLW1lYXN1cmVtZW50cy1sb2dzPlxuPC9uZy1jb250YWluZXI+XG5cbjxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybSAqbmdJZj1cInNob3dEb3dubG9hZFwiXG4gIFtub2Rlc109XCJzaXRlc1wiIGZpbGVuYW1lPVwic2l0ZS1tZWFzdXJlbWVudHMuY3N2XCIgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydzaXRlLmlkJywgJ3NpdGUuQGlkJywgJ3NpdGUubWVhc3VyZW1lbnRzLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiXG4+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICA8c3Bhbj5ObyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cInNpdGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwPjxiPnt7bm9kZS5uYW1lfX08L2I+PC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiIFtub2RlVHlwZV09XCJub2RlWydAdHlwZSddXCIgW2RhdGFLZXldPVwia2V5XCJcbiAgPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUpsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQU0xQyxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCx1QkFBZSxDQUFBO0lBQ2YscUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFISSxJQUFJLEtBQUosSUFBSSxRQUdSO0FBT0QsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQU9TLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUVuQyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUkxQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osaUJBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzFCLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFDeEIsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsaUJBQVksR0FBZ0MsRUFBRSxDQUFDO0tBOEN2RDtJQTVDQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLFdBQVcsSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBRU8sTUFBTTtRQUNaLE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCLENBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ25DLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxxQkFBcUI7SUFFYixtQkFBbUIsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsOEJBQThCO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOzt3SEE5RFUsMEJBQTBCOzRHQUExQiwwQkFBMEIsd0tDbkJ2Qyx1eExBMElBOzRGRHZIYSwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLHFDQUFxQztvQkFDbEQsU0FBUyxFQUFFLENBQUMscUNBQXFDLENBQUM7aUJBQ25EOzhCQUdRLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUdDLFNBQVM7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSVNpdGVKU09OTEQsIE1lYXN1cmVtZW50IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuY29uc3Qgb3JkZXJCeSA9IHJlcXVpcmUoJ2xvZGFzaC5vcmRlcmJ5Jyk7XG5cbmltcG9ydCB7IG1lYXN1cmVtZW50VmFsdWUsIG1heEFyZWFTaXplLCBzaXRlVG9vQmlnIH0gZnJvbSAnLi4vc2l0ZXMubW9kZWwnO1xuaW1wb3J0IHsgZ3JvdXBOb2Rlc0J5VGVybSwgSUdyb3VwZWRLZXlzLCBncm91cHBlZEtleXMgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc2l0ZXMtbWVhc3VyZW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpdGVzLW1lYXN1cmVtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpdGVzLW1lYXN1cmVtZW50cy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpdGVzTWVhc3VyZW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KClcbiAgcHVibGljIG9yaWdpbmFsVmFsdWVzOiBJU2l0ZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXRlczogSVNpdGVKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuXG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xuICBwdWJsaWMgbWF4QXJlYVNpemUgPSBtYXhBcmVhU2l6ZTtcbiAgcHVibGljIHNpdGVUb29CaWcgPSBzaXRlVG9vQmlnO1xuICBwdWJsaWMgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwdWJsaWMgbWVhc3VyZW1lbnRWYWx1ZSA9IG1lYXN1cmVtZW50VmFsdWU7XG5cbiAgcHVibGljIG1lYXN1cmVtZW50czogSUdyb3VwZWRLZXlzPE1lYXN1cmVtZW50PltdID0gW107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICgnc2l0ZXMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbmRleCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmICgnZGF0YVN0YXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSVNpdGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBtZWFzdXJlbWVudHNQZXJTaXRlID0gZ3JvdXBOb2Rlc0J5VGVybTxJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQ+KFxuICAgICAgdGhpcy5zaXRlcywgJ21lYXN1cmVtZW50cycsIHRoaXMub3JpZ2luYWxWYWx1ZXNcbiAgICApO1xuICAgIHRoaXMubWVhc3VyZW1lbnRzID0gb3JkZXJCeShncm91cHBlZEtleXMobWVhc3VyZW1lbnRzUGVyU2l0ZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlciwgY29udGV4dCkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93QXJlYVRvb0JpZygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RhdGUgPT09IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWQgJiYgKHRoaXMuc2l0ZXMgfHwgW10pLnNvbWUoc2l0ZVRvb0JpZyk7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZSAmJiBtZWFzdXJlbWVudHMubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBjb2wtc2VwIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCIhaXNPcmlnaW5hbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGVcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmxvZ3NcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjYWxjdWxhdG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5SZWNhbGN1bGF0aW9ucyBsb2dzPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzZWxlY3RlZFZpZXcgIT09IFZpZXcudGFibGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lYXN1cmVtZW50cy5sZW5ndGg7IGVsc2UgZW1wdHlUYWJsZVwiPlxuICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgW25iUm93c109XCJzaXRlcy5sZW5ndGhcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgbWVhc3VyZW1lbnQgb2YgbWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJtZWFzdXJlbWVudC52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3ttZWFzdXJlbWVudC52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczozMH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgbWVhc3VyZW1lbnQgb2YgbWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICA+e3ttZWFzdXJlbWVudC52YWx1ZS50ZXJtLnVuaXRzfX08L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaXRlIG9mIHNpdGVzOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0b1wiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChzaXRlKVwiPlxuICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwic2l0ZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2kgKyAxfX0uIHt7ZGVmYXVsdExhYmVsKHNpdGUpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBtZWFzdXJlbWVudCBvZiBtZWFzdXJlbWVudHNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1lYXN1cmVtZW50LnZhbHVlLnZhbHVlc1tzaXRlWydAaWQnXV1cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCIgI3A9XCJuZ2JQb3BvdmVyXCIgcGxhY2VtZW50PVwibGVmdFwiIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBzaXRlOiBzaXRlLCBrZXk6ICdtZWFzdXJlbWVudHMnIH0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBwb2ludGVyPnt7bWVhc3VyZW1lbnRWYWx1ZShtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBtZWFzdXJlbWVudC52YWx1ZS50ZXJtWydAaWQnXSkgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZSBjbGFzcz1cIm1sLTFcIiBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm1lYXN1cmVtZW50LnZhbHVlLnZhbHVlc1tzaXRlWydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW1lYXN1cmVtZW50LnZhbHVlLnZhbHVlc1tzaXRlWydAaWQnXV1cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPi08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3VwIGNsYXNzPVwicGwtMVwiICpuZ0lmPVwic2l0ZVRvb0JpZyhzaXRlKVwiPigxKTwvc3VwPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvaGUtZGF0YS10YWJsZT5cblxuICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG5cbiAgICA8cCBjbGFzcz1cImlzLXNpemUtNyBpcy1pdGFsaWNcIiAqbmdJZj1cInNob3dBcmVhVG9vQmlnXCI+XG4gICAgICAoMSkgVGhpcyByZWdpb24gaXMgPnt7bWF4QXJlYVNpemV9fWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9ncyAmJiAhaXNPcmlnaW5hbFwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTNcIiAqbmdJZj1cInNpdGVzLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljXCI+U2VsZWN0IGEgU2l0ZTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGhcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBzaXRlczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpXCI+e3tpICsgMX19LiB7e2RlZmF1bHRMYWJlbCh2YWx1ZSl9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8aGUtc2l0ZXMtbWVhc3VyZW1lbnRzLWxvZ3MgKm5nSWY9XCJzZWxlY3RlZEluZGV4ID49IDBcIlxuICAgIFtzaXRlXT1cInNpdGVzW3NlbGVjdGVkSW5kZXhdXCJcbiAgICBbb3JpZ2luYWxWYWx1ZXNdPVwib3JpZ2luYWxWYWx1ZXNbc2VsZWN0ZWRJbmRleF0/Lm1lYXN1cmVtZW50c1wiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzaXRlc1tzZWxlY3RlZEluZGV4XT8ubWVhc3VyZW1lbnRzXCJcbiAgPjwvaGUtc2l0ZXMtbWVhc3VyZW1lbnRzLWxvZ3M+XG48L25nLWNvbnRhaW5lcj5cblxuPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtICpuZ0lmPVwic2hvd0Rvd25sb2FkXCJcbiAgW25vZGVzXT1cInNpdGVzXCIgZmlsZW5hbWU9XCJzaXRlLW1lYXN1cmVtZW50cy5jc3ZcIiBbaXNVcGxvYWRdPVwiZmFsc2VcIlxuICBbaGVhZGVyS2V5c109XCJbJ3NpdGUuaWQnLCAnc2l0ZS5AaWQnLCAnc2l0ZS5tZWFzdXJlbWVudHMuJ11cIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCJcbj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgIDxzcGFuPk5vIGRhdGE8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVZhbHVlPlxuICA8c3Bhbj4tPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwic2l0ZVwiIGxldC1kYXRhPVwiZGF0YVwiIGxldC1rZXk9XCJrZXlcIj5cbiAgPHA+PGI+e3tub2RlLm5hbWV9fTwvYj48L3A+XG4gIDxoZS1ub2RlLXZhbHVlLWRldGFpbHNcbiAgICBbZGF0YV09XCJkYXRhXCIgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIiBbZGF0YUtleV09XCJrZXlcIlxuICA+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuIl19
|