@c8y/ngx-components 1018.0.28 → 1018.0.30
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/datapoint-library/details/datapoint-library-details.component.d.ts +6 -3
- package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts +3 -0
- package/datapoint-selector/datapoint-selector.component.d.ts +2 -1
- package/esm2020/datapoint-library/details/datapoint-library-details.component.mjs +38 -10
- package/esm2020/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.mjs +14 -5
- package/esm2020/datapoint-selector/datapoint-selector.component.mjs +8 -5
- package/esm2020/sub-assets/asset-properties-item.component.mjs +3 -3
- package/esm2020/sub-assets/asset-properties.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-datapoint-library-details.mjs +39 -9
- package/fesm2015/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-datapoint-selector.mjs +17 -6
- package/fesm2015/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +4 -4
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-datapoint-library-details.mjs +37 -9
- package/fesm2020/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-datapoint-selector.mjs +17 -6
- package/fesm2020/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +4 -4
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/locales/locales.pot +3 -0
- package/package.json +1 -1
package/esm2020/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.mjs
CHANGED
|
@@ -5,8 +5,9 @@ import { BsModalRef } from 'ngx-bootstrap/modal';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "ngx-bootstrap/modal";
|
|
7
7
|
import * as i2 from "@c8y/ngx-components";
|
|
8
|
-
import * as i3 from "@angular/
|
|
9
|
-
import * as i4 from "
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@angular/forms";
|
|
10
|
+
import * as i5 from "../datapoint-selector.component";
|
|
10
11
|
export class DatapointSelectorModalComponent {
|
|
11
12
|
constructor(bsModal, elementRef) {
|
|
12
13
|
this.bsModal = bsModal;
|
|
@@ -19,6 +20,8 @@ export class DatapointSelectorModalComponent {
|
|
|
19
20
|
this.saveButtonLabel = gettext('Add data points');
|
|
20
21
|
this.guessDatapointUnit = true;
|
|
21
22
|
this.defaultActiveState = true;
|
|
23
|
+
this.finishWithFirstSelection = false;
|
|
24
|
+
this.ignoreDatapointTemplates = false;
|
|
22
25
|
this.assetSelectorConfig = {};
|
|
23
26
|
this.result = new Promise((resolve, reject) => {
|
|
24
27
|
this.save = resolve;
|
|
@@ -36,6 +39,12 @@ export class DatapointSelectorModalComponent {
|
|
|
36
39
|
this.bsModal.hide();
|
|
37
40
|
this.cancel();
|
|
38
41
|
}
|
|
42
|
+
selectionChange(selection) {
|
|
43
|
+
this.selectedDatapoints = selection;
|
|
44
|
+
if (this.finishWithFirstSelection) {
|
|
45
|
+
this.saveChanges();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
39
48
|
/**
|
|
40
49
|
* changes the z-index of the modal, to make sure this modal is on top.
|
|
41
50
|
* required as angularJS modals are placing them selves on top via adjusting z-index.
|
|
@@ -47,9 +56,9 @@ export class DatapointSelectorModalComponent {
|
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
58
|
DatapointSelectorModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatapointSelectorModalComponent, deps: [{ token: i1.BsModalRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
DatapointSelectorModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DatapointSelectorModalComponent, selector: "c8y-datapoint-selector-modal", ngImport: i0, template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [
|
|
59
|
+
DatapointSelectorModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DatapointSelectorModalComponent, selector: "c8y-datapoint-selector-modal", ngImport: i0, template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [hideSelection]=\"finishWithFirstSelection\"\n [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n [ngModel]=\"selectedDatapoints\"\n (ngModelChange)=\"selectionChange($event)\"\n ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n <button\n type=\"button\"\n [title]=\"'Cancel' | translate\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n <button\n [title]=\"saveButtonLabel | translate\"\n class=\"btn btn-primary\"\n [disabled]=\"!this.selectedDatapoints?.length\"\n (click)=\"saveChanges()\"\n *ngIf=\"!finishWithFirstSelection\"\n >\n {{ saveButtonLabel | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.DatapointSelectorComponent, selector: "c8y-datapoint-selector", inputs: ["contextAsset", "allowChangingContext", "allowDatapointsFromMultipleAssets", "defaultActiveState", "ignoreDatapointTemplates", "guessDatapointUnit", "allowSearch", "hideSelection"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
|
|
51
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatapointSelectorModalComponent, decorators: [{
|
|
52
61
|
type: Component,
|
|
53
|
-
args: [{ selector: 'c8y-datapoint-selector-modal', template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [
|
|
62
|
+
args: [{ selector: 'c8y-datapoint-selector-modal', template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [hideSelection]=\"finishWithFirstSelection\"\n [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n [ngModel]=\"selectedDatapoints\"\n (ngModelChange)=\"selectionChange($event)\"\n ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n <button\n type=\"button\"\n [title]=\"'Cancel' | translate\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n <button\n [title]=\"saveButtonLabel | translate\"\n class=\"btn btn-primary\"\n [disabled]=\"!this.selectedDatapoints?.length\"\n (click)=\"saveChanges()\"\n *ngIf=\"!finishWithFirstSelection\"\n >\n {{ saveButtonLabel | translate }}\n </button>\n</div>\n" }]
|
|
54
63
|
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i0.ElementRef }]; } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50LXNlbGVjdG9yLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50LXNlbGVjdG9yLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQVVqRCxNQUFNLE9BQU8sK0JBQStCO0lBcUIxQyxZQUFvQixPQUFtQixFQUFVLFVBQXNCO1FBQW5ELFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbkJ2RSx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsc0NBQWlDLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7UUFDN0MsVUFBSyxHQUFXLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLG9CQUFlLEdBQVcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQiw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDakMsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLHdCQUFtQixHQUF3RCxFQUFFLENBQUM7UUFDckUsV0FBTSxHQUEwQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUt1RSxDQUFDO0lBRTNFLFFBQVE7UUFDTixJQUFJLENBQUMsNERBQTRELEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBNEI7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDREQUE0RDtRQUNsRSxNQUFNLGNBQWMsR0FBZ0IsR0FBRyxDQUNyQyxJQUFJLENBQUMsVUFBVSxFQUNmLHlEQUF5RCxDQUMxRCxDQUFDO1FBQ0YsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7OzRIQXZEVSwrQkFBK0I7Z0hBQS9CLCtCQUErQixvRUNkNUMsa3VDQXFDQTsyRkR2QmEsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQge1xuICBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsQXNzZXRTZWxlY3Rvck9wdGlvbnMsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnLi4vZGF0YXBvaW50LXNlbGVjdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtc2VsZWN0b3ItbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXBvaW50LXNlbGVjdG9yLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29udGV4dEFzc2V0OiBJSWRlbnRpZmllZDtcbiAgYWxsb3dDaGFuZ2luZ0NvbnRleHQgPSB0cnVlO1xuICBhbGxvd1NlYXJjaCA9IHRydWU7XG4gIGFsbG93RGF0YXBvaW50c0Zyb21NdWx0aXBsZUFzc2V0cyA9IHRydWU7XG4gIHNlbGVjdGVkRGF0YXBvaW50cyA9IG5ldyBBcnJheTxLUElEZXRhaWxzPigpO1xuICB0aXRsZTogc3RyaW5nID0gZ2V0dGV4dCgnRGF0YSBwb2ludCBzZWxlY3RvcicpO1xuICBzYXZlQnV0dG9uTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0FkZCBkYXRhIHBvaW50cycpO1xuICBndWVzc0RhdGFwb2ludFVuaXQgPSB0cnVlO1xuICBkZWZhdWx0QWN0aXZlU3RhdGUgPSB0cnVlO1xuICBmaW5pc2hXaXRoRmlyc3RTZWxlY3Rpb24gPSBmYWxzZTtcbiAgaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzID0gZmFsc2U7XG4gIGFzc2V0U2VsZWN0b3JDb25maWc6IFBhcnRpYWw8RGF0YXBvaW50U2VsZWN0b3JNb2RhbEFzc2V0U2VsZWN0b3JPcHRpb25zPiA9IHt9O1xuICByZWFkb25seSByZXN1bHQ6IFByb21pc2U8S1BJRGV0YWlsc1tdPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLnNhdmUgPSByZXNvbHZlO1xuICAgIHRoaXMuY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIHNhdmU6ICh2YWx1ZTogS1BJRGV0YWlsc1tdKSA9PiB2b2lkO1xuICBwcml2YXRlIGNhbmNlbDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJzTW9kYWw6IEJzTW9kYWxSZWYsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5V29ya2Fyb3VuZEZvckFuZ3VsYXJKU01vZGFsc1RoYXRNaWdodEJlT3BlbmVkSW5QYXJhbGxlbCgpO1xuICB9XG5cbiAgc2F2ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5ic01vZGFsLmhpZGUoKTtcbiAgICB0aGlzLnNhdmUodGhpcy5zZWxlY3RlZERhdGFwb2ludHMpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5ic01vZGFsLmhpZGUoKTtcbiAgICB0aGlzLmNhbmNlbCgpO1xuICB9XG5cbiAgc2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbjogQXJyYXk8S1BJRGV0YWlscz4pIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YXBvaW50cyA9IHNlbGVjdGlvbjtcbiAgICBpZiAodGhpcy5maW5pc2hXaXRoRmlyc3RTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2F2ZUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2hhbmdlcyB0aGUgei1pbmRleCBvZiB0aGUgbW9kYWwsIHRvIG1ha2Ugc3VyZSB0aGlzIG1vZGFsIGlzIG9uIHRvcC5cbiAgICogcmVxdWlyZWQgYXMgYW5ndWxhckpTIG1vZGFscyBhcmUgcGxhY2luZyB0aGVtIHNlbHZlcyBvbiB0b3AgdmlhIGFkanVzdGluZyB6LWluZGV4LlxuICAgKiB3aGlsZSBhbmd1bGFyIG1vZGFscyB1c2UgdGhlIG9yZGVyIHdpdGhpbiB0aGUgZG9tIGZvciB0aGlzLi5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlXb3JrYXJvdW5kRm9yQW5ndWxhckpTTW9kYWxzVGhhdE1pZ2h0QmVPcGVuZWRJblBhcmFsbGVsKCkge1xuICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGdldChcbiAgICAgIHRoaXMuZWxlbWVudFJlZixcbiAgICAgICduYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50J1xuICAgICk7XG4gICAgbW9kYWxDb250YWluZXIuc3R5bGUuekluZGV4ID0gJzEwNjAnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHNlcGFyYXRvclwiPlxuICA8aDQgaWQ9XCJtb2RhbC10aXRsZVwiIGNsYXNzPVwidGV4dC1tZWRpdW1cIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGwgbW9kYWwtaW5uZXItc2Nyb2xsLS1maXhlZFwiIGlkPVwibW9kYWwtYm9keVwiPlxuICA8Yzh5LWRhdGFwb2ludC1zZWxlY3RvclxuICAgIFtjb250ZXh0QXNzZXRdPVwiY29udGV4dEFzc2V0XCJcbiAgICBbZ3Vlc3NEYXRhcG9pbnRVbml0XT1cImd1ZXNzRGF0YXBvaW50VW5pdFwiXG4gICAgW2FsbG93RGF0YXBvaW50c0Zyb21NdWx0aXBsZUFzc2V0c109XCJhbGxvd0RhdGFwb2ludHNGcm9tTXVsdGlwbGVBc3NldHNcIlxuICAgIFthbGxvd0NoYW5naW5nQ29udGV4dF09XCJhbGxvd0NoYW5naW5nQ29udGV4dFwiXG4gICAgW2RlZmF1bHRBY3RpdmVTdGF0ZV09XCJkZWZhdWx0QWN0aXZlU3RhdGVcIlxuICAgIFthbGxvd1NlYXJjaF09XCJhbGxvd1NlYXJjaFwiXG4gICAgW2hpZGVTZWxlY3Rpb25dPVwiZmluaXNoV2l0aEZpcnN0U2VsZWN0aW9uXCJcbiAgICBbaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzXT1cImlnbm9yZURhdGFwb2ludFRlbXBsYXRlc1wiXG4gICAgW25nTW9kZWxdPVwic2VsZWN0ZWREYXRhcG9pbnRzXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0b3I+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFt0aXRsZV09XCInQ2FuY2VsJyB8IHRyYW5zbGF0ZVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIFt0aXRsZV09XCJzYXZlQnV0dG9uTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwiIXRoaXMuc2VsZWN0ZWREYXRhcG9pbnRzPy5sZW5ndGhcIlxuICAgIChjbGljayk9XCJzYXZlQ2hhbmdlcygpXCJcbiAgICAqbmdJZj1cIiFmaW5pc2hXaXRoRmlyc3RTZWxlY3Rpb25cIlxuICA+XG4gICAge3sgc2F2ZUJ1dHRvbkxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -23,6 +23,7 @@ export class DatapointSelectorComponent {
|
|
|
23
23
|
this.ignoreDatapointTemplates = false;
|
|
24
24
|
this.guessDatapointUnit = true;
|
|
25
25
|
this.allowSearch = true;
|
|
26
|
+
this.hideSelection = false;
|
|
26
27
|
this.searchString = '';
|
|
27
28
|
this.maxNumberOfDatapoints = 50;
|
|
28
29
|
this.loadingDatapoints = false;
|
|
@@ -31,9 +32,9 @@ export class DatapointSelectorComponent {
|
|
|
31
32
|
this.emptyStateSubtitleWhenNoDataPointsInAsset = gettext('Select an asset with data points from the list.');
|
|
32
33
|
this.searchString$ = new BehaviorSubject('');
|
|
33
34
|
this.touched = false;
|
|
34
|
-
this.setupObservables();
|
|
35
35
|
}
|
|
36
36
|
ngOnInit() {
|
|
37
|
+
this.setupObservables();
|
|
37
38
|
if (!this.ignoreDatapointTemplates) {
|
|
38
39
|
this.datapointLibraryEntries = from(this.datapointService.getFirstDatapointLibraryPage());
|
|
39
40
|
}
|
|
@@ -140,13 +141,13 @@ export class DatapointSelectorComponent {
|
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
DatapointSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatapointSelectorComponent, deps: [{ token: i1.DatapointLibraryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
-
DatapointSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DatapointSelectorComponent, selector: "c8y-datapoint-selector", inputs: { contextAsset: "contextAsset", allowChangingContext: "allowChangingContext", allowDatapointsFromMultipleAssets: "allowDatapointsFromMultipleAssets", defaultActiveState: "defaultActiveState", ignoreDatapointTemplates: "ignoreDatapointTemplates", guessDatapointUnit: "guessDatapointUnit", allowSearch: "allowSearch" }, providers: [
|
|
144
|
+
DatapointSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DatapointSelectorComponent, selector: "c8y-datapoint-selector", inputs: { contextAsset: "contextAsset", allowChangingContext: "allowChangingContext", allowDatapointsFromMultipleAssets: "allowDatapointsFromMultipleAssets", defaultActiveState: "defaultActiveState", ignoreDatapointTemplates: "ignoreDatapointTemplates", guessDatapointUnit: "guessDatapointUnit", allowSearch: "allowSearch", hideSelection: "hideSelection" }, providers: [
|
|
144
145
|
{
|
|
145
146
|
provide: NG_VALUE_ACCESSOR,
|
|
146
147
|
multi: true,
|
|
147
148
|
useExisting: forwardRef(() => DatapointSelectorComponent)
|
|
148
149
|
}
|
|
149
|
-
], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"
|
|
150
|
+
], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext && !hideSelection,\n 'grid__col--8-4--md': !allowChangingContext && !hideSelection,\n 'grid__col--4-8--md': allowChangingContext && hideSelection\n }\"\n>\n <div class=\"d-flex d-col p-relative bg-level-1\" *ngIf=\"allowChangingContext\">\n <c8y-asset-selector-miller\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"selectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: true,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch\n }\"\n class=\"d-contents\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Select an asset from the list.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <div *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\" class=\"bg-inherit\">\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p class=\"text-medium text-truncate\" [title]=\"'Available data points' | translate\">\n {{ 'Available data points' | translate }}\n </p>\n <div *ngIf=\"!loadingDatapoints\" id=\"search\" class=\"input-group input-group-search m-t-4\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"Search\u2026\"\n [ngModel]=\"searchString\"\n (ngModelChange)=\"searchStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"!searchString; else clearSearchString\"></i>\n <ng-template #clearSearchString>\n <i c8yIcon=\"times\" class=\"text-muted\" (click)=\"searchStringChanged()\"></i>\n </ng-template>\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"filteredDatapoints$ | async as filteredDatapoints; else loadingData\">\n <ng-container *ngIf=\"!loadingDatapoints; else loadingData\">\n <ng-container *ngIf=\"datapoints$ | async as datapoints\">\n <div class=\"p-16\" *ngIf=\"!filteredDatapoints.length\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"\n datapoints.length\n ? (emptyStateSubtitleWhenNoMatchingDataPoints | translate)\n : (emptyStateSubtitleWhenNoDataPointsInAsset | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n *ngIf=\"\n datapoints.length > maxNumberOfDatapoints &&\n filteredDatapoints.length >= maxNumberOfDatapoints\n \"\n class=\"sticky-top\"\n style=\"top: 72px\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{\n 'Due to the large number, only a subset of data points is displayed. Use search to narrow down the number of results.'\n | translate\n }}\n </div>\n </c8y-list-item>\n <c8y-datapoint-selector-list-item\n [ngModel]=\"dp\"\n [isSelected]=\"selectedDatapoints | includesDatapoint: dp\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [disableTypeaheadIfSelected]=\"true\"\n (added)=\"datapointAdded($event)\"\n (removed)=\"datapointRemoved($event)\"\n [highlightText]=\"searchStringChanges$ | async\"\n class=\"d-contents\"\n *ngFor=\"let dp of filteredDatapoints; trackBy: trackByFn\"\n ></c8y-datapoint-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\" *ngIf=\"!hideSelection\">\n <p\n class=\"text-medium p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"'Selected data points' | translate\"\n translate\n >\n Selected data points\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-t-8 p-b-16\">\n <div class=\"c8y-datapoint-pill\" *ngFor=\"let selectedDp of selectedDatapoints\">\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n class=\"c8y-datapoint-pill__btn\"\n (click)=\"datapointRemoved(selectedDp)\"\n >\n <i c8yIcon=\"remove\" class=\"icon-14\"></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedDp | datapointLabel: { doNotUseLabel: true, includeDevice: true }\"\n >\n <i c8yIcon=\"circle\" class=\"m-r-4 icon-14\" [style.color]=\"selectedDp.color\"></i>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedDp | datapointLabel }}</span>\n <small class=\"text-muted text-10\" *ngIf=\"selectedDp?.__target?.name\">\n {{ selectedDp?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n <div class=\"p-16\" *ngIf=\"!selectedDatapoints || !selectedDatapoints.length\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points selected.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i6.DatapointSelectorListItemComponent, selector: "c8y-datapoint-selector-list-item", inputs: ["defaultFormOptions", "isSelected", "isCollapsed", "showAddRemoveButton", "editable", "showActiveToggle", "activeToggleDisabled", "showOptions", "datapointLibraryEntries", "actions", "optionToRemove", "hasUnlinkTemplateOption", "colorPickerDisabled", "disableTypeaheadIfSelected", "highlightText"], outputs: ["added", "removed"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.IncludesDatapointPipe, name: "includesDatapoint" }, { kind: "pipe", type: i8.DatapointLabelPipe, name: "datapointLabel" }] });
|
|
150
151
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatapointSelectorComponent, decorators: [{
|
|
151
152
|
type: Component,
|
|
152
153
|
args: [{ selector: 'c8y-datapoint-selector', providers: [
|
|
@@ -155,7 +156,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
155
156
|
multi: true,
|
|
156
157
|
useExisting: forwardRef(() => DatapointSelectorComponent)
|
|
157
158
|
}
|
|
158
|
-
], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"
|
|
159
|
+
], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext && !hideSelection,\n 'grid__col--8-4--md': !allowChangingContext && !hideSelection,\n 'grid__col--4-8--md': allowChangingContext && hideSelection\n }\"\n>\n <div class=\"d-flex d-col p-relative bg-level-1\" *ngIf=\"allowChangingContext\">\n <c8y-asset-selector-miller\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"selectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: true,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch\n }\"\n class=\"d-contents\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Select an asset from the list.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <div *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\" class=\"bg-inherit\">\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p class=\"text-medium text-truncate\" [title]=\"'Available data points' | translate\">\n {{ 'Available data points' | translate }}\n </p>\n <div *ngIf=\"!loadingDatapoints\" id=\"search\" class=\"input-group input-group-search m-t-4\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"Search\u2026\"\n [ngModel]=\"searchString\"\n (ngModelChange)=\"searchStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"!searchString; else clearSearchString\"></i>\n <ng-template #clearSearchString>\n <i c8yIcon=\"times\" class=\"text-muted\" (click)=\"searchStringChanged()\"></i>\n </ng-template>\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"filteredDatapoints$ | async as filteredDatapoints; else loadingData\">\n <ng-container *ngIf=\"!loadingDatapoints; else loadingData\">\n <ng-container *ngIf=\"datapoints$ | async as datapoints\">\n <div class=\"p-16\" *ngIf=\"!filteredDatapoints.length\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"\n datapoints.length\n ? (emptyStateSubtitleWhenNoMatchingDataPoints | translate)\n : (emptyStateSubtitleWhenNoDataPointsInAsset | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n *ngIf=\"\n datapoints.length > maxNumberOfDatapoints &&\n filteredDatapoints.length >= maxNumberOfDatapoints\n \"\n class=\"sticky-top\"\n style=\"top: 72px\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{\n 'Due to the large number, only a subset of data points is displayed. Use search to narrow down the number of results.'\n | translate\n }}\n </div>\n </c8y-list-item>\n <c8y-datapoint-selector-list-item\n [ngModel]=\"dp\"\n [isSelected]=\"selectedDatapoints | includesDatapoint: dp\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [disableTypeaheadIfSelected]=\"true\"\n (added)=\"datapointAdded($event)\"\n (removed)=\"datapointRemoved($event)\"\n [highlightText]=\"searchStringChanges$ | async\"\n class=\"d-contents\"\n *ngFor=\"let dp of filteredDatapoints; trackBy: trackByFn\"\n ></c8y-datapoint-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\" *ngIf=\"!hideSelection\">\n <p\n class=\"text-medium p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"'Selected data points' | translate\"\n translate\n >\n Selected data points\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-t-8 p-b-16\">\n <div class=\"c8y-datapoint-pill\" *ngFor=\"let selectedDp of selectedDatapoints\">\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n class=\"c8y-datapoint-pill__btn\"\n (click)=\"datapointRemoved(selectedDp)\"\n >\n <i c8yIcon=\"remove\" class=\"icon-14\"></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedDp | datapointLabel: { doNotUseLabel: true, includeDevice: true }\"\n >\n <i c8yIcon=\"circle\" class=\"m-r-4 icon-14\" [style.color]=\"selectedDp.color\"></i>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedDp | datapointLabel }}</span>\n <small class=\"text-muted text-10\" *ngIf=\"selectedDp?.__target?.name\">\n {{ selectedDp?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n <div class=\"p-16\" *ngIf=\"!selectedDatapoints || !selectedDatapoints.length\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points selected.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n" }]
|
|
159
160
|
}], ctorParameters: function () { return [{ type: i1.DatapointLibraryService }]; }, propDecorators: { contextAsset: [{
|
|
160
161
|
type: Input
|
|
161
162
|
}], allowChangingContext: [{
|
|
@@ -170,5 +171,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
170
171
|
type: Input
|
|
171
172
|
}], allowSearch: [{
|
|
172
173
|
type: Input
|
|
174
|
+
}], hideSelection: [{
|
|
175
|
+
type: Input
|
|
173
176
|
}] } });
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGF0YXBvaW50LXNlbGVjdG9yL2RhdGFwb2ludC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7QUFjdEUsTUFBTSxPQUFPLDBCQUEwQjtJQTZCckMsWUFBb0IsZ0JBQXlDO1FBQXpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUEzQnBELHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QixzQ0FBaUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsdUJBQWtCLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztRQUNwQyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFHLEVBQUUsQ0FBQztR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QkFBd0IsYUFFdkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUM7eUJBQzFEO3FCQUNGOzhHQUdRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFwb2ludExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnQtbGlicmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEtQSURldGFpbHMsIE1hbmFnZWRPYmplY3RLUEkgfSBmcm9tICcuL2RhdGFwb2ludC1zZWxlY3Rpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50LXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3RvckNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgY29udGV4dEFzc2V0OiBJSWRlbnRpZmllZDtcbiAgQElucHV0KCkgYWxsb3dDaGFuZ2luZ0NvbnRleHQgPSB0cnVlO1xuICBASW5wdXQoKSBhbGxvd0RhdGFwb2ludHNGcm9tTXVsdGlwbGVBc3NldHMgPSB0cnVlO1xuICBzZWxlY3RlZERhdGFwb2ludHMgPSBuZXcgQXJyYXk8S1BJRGV0YWlscz4oKTtcbiAgQElucHV0KCkgZGVmYXVsdEFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgQElucHV0KCkgaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGd1ZXNzRGF0YXBvaW50VW5pdCA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgc2VhcmNoU3RyaW5nID0gJyc7XG4gIG1heE51bWJlck9mRGF0YXBvaW50cyA9IDUwO1xuXG4gIGxvYWRpbmdEYXRhcG9pbnRzID0gZmFsc2U7XG4gIGFzc2V0U2VsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSWRlbnRpZmllZD4obnVsbCk7XG4gIGRhdGFwb2ludHMkOiBPYnNlcnZhYmxlPEtQSURldGFpbHNbXT47XG4gIGZpbHRlcmVkRGF0YXBvaW50cyQ6IE9ic2VydmFibGU8S1BJRGV0YWlsc1tdPjtcbiAgc2VhcmNoU3RyaW5nQ2hhbmdlcyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZGF0YXBvaW50TGlicmFyeUVudHJpZXM6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8TWFuYWdlZE9iamVjdEtQST4+O1xuXG4gIGVtcHR5U3RhdGVTdWJ0aXRsZVdoZW5Ob01hdGNoaW5nRGF0YVBvaW50cyA9IGdldHRleHQoJ1RyeSBhbm90aGVyIHNlYXJjaCB0ZXJtLicpO1xuICBlbXB0eVN0YXRlU3VidGl0bGVXaGVuTm9EYXRhUG9pbnRzSW5Bc3NldCA9IGdldHRleHQoXG4gICAgJ1NlbGVjdCBhbiBhc3NldCB3aXRoIGRhdGEgcG9pbnRzIGZyb20gdGhlIGxpc3QuJ1xuICApO1xuXG4gIHByaXZhdGUgc2VhcmNoU3RyaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHF1YW50aXR5OiBLUElEZXRhaWxzW10pID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YXBvaW50U2VydmljZTogRGF0YXBvaW50TGlicmFyeVNlcnZpY2UpIHtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pZ25vcmVEYXRhcG9pbnRUZW1wbGF0ZXMpIHtcbiAgICAgIHRoaXMuZGF0YXBvaW50TGlicmFyeUVudHJpZXMgPSBmcm9tKHRoaXMuZGF0YXBvaW50U2VydmljZS5nZXRGaXJzdERhdGFwb2ludExpYnJhcnlQYWdlKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRleHRBc3NldCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKHRoaXMuY29udGV4dEFzc2V0KTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogS1BJRGV0YWlsc1tdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFwb2ludHMgPSBvYmo7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGRhdGFwb2ludEFkZGVkKGRwOiBLUElEZXRhaWxzKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgZHAuX19hY3RpdmUgPSB0aGlzLmRlZmF1bHRBY3RpdmVTdGF0ZTtcbiAgICBpZiAodGhpcy5ndWVzc0RhdGFwb2ludFVuaXQgJiYgIWRwLnVuaXQpIHtcbiAgICAgIHRoaXMuZGF0YXBvaW50U2VydmljZS5ndWVzc1VuaXRPZkRhdGFwb2ludChkcC5mcmFnbWVudCwgZHAuc2VyaWVzLCBkcC5fX3RhcmdldCkudGhlbih1bml0ID0+IHtcbiAgICAgICAgZHAudW5pdCA9IHVuaXQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGFwb2ludHMgPSBbLi4udGhpcy5zZWxlY3RlZERhdGFwb2ludHMsIGRwXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBkYXRhcG9pbnRSZW1vdmVkKGRwOiBLUElEZXRhaWxzKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFwb2ludHMgPSB0aGlzLnNlbGVjdGVkRGF0YXBvaW50cy5maWx0ZXIoXG4gICAgICB0bXAgPT5cbiAgICAgICAgdG1wLmZyYWdtZW50ICE9PSBkcC5mcmFnbWVudCB8fFxuICAgICAgICB0bXAuc2VyaWVzICE9PSBkcC5zZXJpZXMgfHxcbiAgICAgICAgdG1wLl9fdGFyZ2V0Py5pZCAhPT0gZHAuX190YXJnZXQ/LmlkXG4gICAgKTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKGV2dDogSUlkZW50aWZpZWQgfCBJSWRlbnRpZmllZFtdKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZ0KSAmJiBldnQubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RBc3NldChldnRbMF0pO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShldnQpICYmIGV2dC5pdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZChldnQuaXRlbXMpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShldnQpICYmIGV2dC5pZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QXNzZXQoZXZ0KTtcbiAgICB9XG5cbiAgICAvLyByZXNldCBzZWxlY3Rpb25cbiAgICB0aGlzLmFzc2V0U2VsZWN0aW9uLm5leHQobnVsbCk7XG4gIH1cblxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IEtQSURldGFpbHMpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtpdGVtLmZyYWdtZW50fS0ke2l0ZW0uX190YXJnZXQ/LmlkfS0ke2l0ZW0uc2VyaWVzfWA7XG4gIH1cblxuICBzZWFyY2hTdHJpbmdDaGFuZ2VkKG5ld1ZhbHVlID0gJycpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN0cmluZyQubmV4dChuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPYnNlcnZhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFwb2ludHMkID0gdGhpcy5hc3NldFNlbGVjdGlvbi5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGF0YXBvaW50cyA9IHRydWU7XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcChhc3NldCA9PlxuICAgICAgICBhc3NldD8uaWRcbiAgICAgICAgICA/IHRoaXMuZGF0YXBvaW50U2VydmljZS5nZXREYXRhcG9pbnRzT2ZBc3NldChhc3NldCwgdGhpcy5pZ25vcmVEYXRhcG9pbnRUZW1wbGF0ZXMpXG4gICAgICAgICAgOiBbXVxuICAgICAgKSxcbiAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nRGF0YXBvaW50cyA9IGZhbHNlKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICB0aGlzLnNlYXJjaFN0cmluZ0NoYW5nZXMkID0gdGhpcy5zZWFyY2hTdHJpbmckLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcmVkRGF0YXBvaW50cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlYXJjaFN0cmluZ0NoYW5nZXMkLCB0aGlzLmRhdGFwb2ludHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3NlYXJjaFN0cmluZywgZGF0YXBvaW50c10pID0+IHtcbiAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YXBvaW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckNhc2VTZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGRhdGFwb2ludHMuZmlsdGVyKGRhdGFwb2ludCA9PlxuICAgICAgICAgIHRoaXMuaW5jbHVkZXNTZWFyY2hTdHJpbmcoZGF0YXBvaW50LCBsb3dlckNhc2VTZWFyY2hTdHJpbmcpXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIG1hcChmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLm1heE51bWJlck9mRGF0YXBvaW50cykpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QXNzZXQoYXNzZXQ6IElJZGVudGlmaWVkKSB7XG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KGFzc2V0KTtcbiAgICB0aGlzLnNlYXJjaFN0cmluZ0NoYW5nZWQoKTtcbiAgICBpZiAoIXRoaXMuYWxsb3dEYXRhcG9pbnRzRnJvbU11bHRpcGxlQXNzZXRzKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YXBvaW50cyA9IFtdO1xuICAgIHRoaXMuZW1pdEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0YXBvaW50cyk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc1RvdWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZXNTZWFyY2hTdHJpbmcoZGF0YXBvaW50OiBLUElEZXRhaWxzLCBsb3dlckNhc2VTZWFyY2hTdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxhYmVsID0gZGF0YXBvaW50LmxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbC5pbmNsdWRlcyhsb3dlckNhc2VTZWFyY2hTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFnbWVudCA9IGRhdGFwb2ludC5mcmFnbWVudD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZnJhZ21lbnQgJiYgZnJhZ21lbnQuaW5jbHVkZXMobG93ZXJDYXNlU2VhcmNoU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VyaWVzID0gZGF0YXBvaW50LnNlcmllcz8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2VyaWVzICYmIHNlcmllcy5pbmNsdWRlcyhsb3dlckNhc2VTZWFyY2hTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJkLWdyaWQgZ3JpZF9fcm93LS0xIGZpdC1oXCJcbiAgW25nQ2xhc3NdPVwiYWxsb3dDaGFuZ2luZ0NvbnRleHQgPyAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnIDogJ2dyaWRfX2NvbC0tOC00LS1tZCdcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtY29sIHAtcmVsYXRpdmUgYmctbGV2ZWwtMVwiICpuZ0lmPVwiYWxsb3dDaGFuZ2luZ0NvbnRleHRcIj5cbiAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlclxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgW2NvbnRhaW5lcl09XCInJ1wiXG4gICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgdmlldzogJ21pbGxlcicsXG4gICAgICAgIGdyb3Vwc1NlbGVjdGFibGU6IHRydWUsXG4gICAgICAgIGNvbHVtbkhlYWRlcnM6IHRydWUsXG4gICAgICAgIHNob3dDaGlsZERldmljZXM6IHRydWUsXG4gICAgICAgIHNob3dVbmFzc2lnbmVkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2luZ2xlQ29sdW1uOiB0cnVlLFxuICAgICAgICBzZWFyY2g6IGFsbG93U2VhcmNoXG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlcj5cbiAgPC9kaXY+XG4gIDwhLS0gY2VudGVyIGNvbHVtbiAtLT5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbCBiZy1jb21wb25lbnRcIj5cbiAgICA8bmctdGVtcGxhdGUgI25vRGV2aWNlRW1wdHlTdGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2XCI+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICBbaWNvbl09XCInYzh5LWRhdGEtcG9pbnRzJ1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBkYXRhIHBvaW50cyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInU2VsZWN0IGFuIGFzc2V0IGZyb20gdGhlIGxpc3QuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nRGF0YT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiYXNzZXRTZWxlY3Rpb24gfCBhc3luYyBhcyBhc3NldDsgZWxzZSBub0RldmljZUVtcHR5U3RhdGVcIiBjbGFzcz1cImJnLWluaGVyaXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMTYgcC1yLTE2IHAtdC04IHAtYi04IHN0aWNreS10b3AgYmctaW5oZXJpdCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC10cnVuY2F0ZVwiIFt0aXRsZV09XCInQXZhaWxhYmxlIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIHt7ICdBdmFpbGFibGUgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nRGF0YXBvaW50c1wiIGlkPVwic2VhcmNoXCIgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2jigKZcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoU3RyaW5nXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwic2VhcmNoXCIgKm5nSWY9XCIhc2VhcmNoU3RyaW5nOyBlbHNlIGNsZWFyU2VhcmNoU3RyaW5nXCI+PC9pPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbGVhclNlYXJjaFN0cmluZz5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCIgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgKGNsaWNrKT1cInNlYXJjaFN0cmluZ0NoYW5nZWQoKVwiPjwvaT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRGF0YXBvaW50cyQgfCBhc3luYyBhcyBmaWx0ZXJlZERhdGFwb2ludHM7IGVsc2UgbG9hZGluZ0RhdGFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nRGF0YXBvaW50czsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhcG9pbnRzJCB8IGFzeW5jIGFzIGRhdGFwb2ludHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCIhZmlsdGVyZWREYXRhcG9pbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2M4eS1kYXRhLXBvaW50cydcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBkYXRhcG9pbnRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IChlbXB0eVN0YXRlU3VidGl0bGVXaGVuTm9NYXRjaGluZ0RhdGFQb2ludHMgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgIDogKGVtcHR5U3RhdGVTdWJ0aXRsZVdoZW5Ob0RhdGFQb2ludHNJbkFzc2V0IHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGRhdGFwb2ludHMubGVuZ3RoID4gbWF4TnVtYmVyT2ZEYXRhcG9pbnRzICYmXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGFwb2ludHMubGVuZ3RoID49IG1heE51bWJlck9mRGF0YXBvaW50c1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtLWItMFwiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgJ0R1ZSB0byB0aGUgbGFyZ2UgbnVtYmVyLCBvbmx5IGEgc3Vic2V0IG9mIGRhdGEgcG9pbnRzIGlzIGRpc3BsYXllZC4gVXNlIHNlYXJjaCB0byBuYXJyb3cgZG93biB0aGUgbnVtYmVyIG9mIHJlc3VsdHMuJ1xuICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDxjOHktZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRwXCJcbiAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJzZWxlY3RlZERhdGFwb2ludHMgfCBpbmNsdWRlc0RhdGFwb2ludDogZHBcIlxuICAgICAgICAgICAgICAgIFtkYXRhcG9pbnRMaWJyYXJ5RW50cmllc109XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChhZGRlZCk9XCJkYXRhcG9pbnRBZGRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJkYXRhcG9pbnRSZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cInNlYXJjaFN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRwIG9mIGZpbHRlcmVkRGF0YXBvaW50czsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWRhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0+XG4gICAgICAgICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW3RpdGxlXT1cIidTZWxlY3RlZCBkYXRhIHBvaW50cycgfCB0cmFuc2xhdGVcIlxuICAgICAgdHJhbnNsYXRlXG4gICAgPlxuICAgICAgU2VsZWN0ZWQgZGF0YSBwb2ludHNcbiAgICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgZ2FwLTggcC1sLTE2IHAtci0xNiBwLXQtOCBwLWItMTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGxcIiAqbmdGb3I9XCJsZXQgc2VsZWN0ZWREcCBvZiBzZWxlY3RlZERhdGFwb2ludHNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFt0aXRsZV09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGxfX2J0blwiXG4gICAgICAgICAgKGNsaWNrKT1cImRhdGFwb2ludFJlbW92ZWQoc2VsZWN0ZWREcClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cInJlbW92ZVwiIGNsYXNzPVwiaWNvbi0xNFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWxcIlxuICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZERwIHwgZGF0YXBvaW50TGFiZWw6IHsgZG9Ob3RVc2VMYWJlbDogdHJ1ZSwgaW5jbHVkZURldmljZTogdHJ1ZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJjaXJjbGVcIiBjbGFzcz1cIm0tci00IGljb24tMTRcIiBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWREcC5jb2xvclwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7IHNlbGVjdGVkRHAgfCBkYXRhcG9pbnRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC0xMFwiICpuZ0lmPVwic2VsZWN0ZWREcD8uX190YXJnZXQ/Lm5hbWVcIj5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWREcD8uX190YXJnZXQ/Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCIhc2VsZWN0ZWREYXRhcG9pbnRzIHx8ICFzZWxlY3RlZERhdGFwb2ludHMubGVuZ3RoXCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cIidjOHktZGF0YS1wb2ludHMnXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBkYXRhIHBvaW50cyBzZWxlY3RlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGF0YXBvaW50LXNlbGVjdG9yL2RhdGFwb2ludC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7QUFjdEUsTUFBTSxPQUFPLDBCQUEwQjtJQThCckMsWUFBb0IsZ0JBQXlDO1FBQXpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUE1QnBELHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QixzQ0FBaUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsdUJBQWtCLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztRQUNwQyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztR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YSwwQkFBMEI7a0JBWHRDLFNBQVM7K0JBQ0Usd0JBQXdCLGFBRXZCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDO3lCQUMxRDtxQkFDRjs4R0FHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxpQ0FBaUM7c0JBQXpDLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFwb2ludExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnQtbGlicmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEtQSURldGFpbHMsIE1hbmFnZWRPYmplY3RLUEkgfSBmcm9tICcuL2RhdGFwb2ludC1zZWxlY3Rpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50LXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3RvckNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgY29udGV4dEFzc2V0OiBJSWRlbnRpZmllZDtcbiAgQElucHV0KCkgYWxsb3dDaGFuZ2luZ0NvbnRleHQgPSB0cnVlO1xuICBASW5wdXQoKSBhbGxvd0RhdGFwb2ludHNGcm9tTXVsdGlwbGVBc3NldHMgPSB0cnVlO1xuICBzZWxlY3RlZERhdGFwb2ludHMgPSBuZXcgQXJyYXk8S1BJRGV0YWlscz4oKTtcbiAgQElucHV0KCkgZGVmYXVsdEFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgQElucHV0KCkgaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGd1ZXNzRGF0YXBvaW50VW5pdCA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgQElucHV0KCkgaGlkZVNlbGVjdGlvbiA9IGZhbHNlO1xuICBzZWFyY2hTdHJpbmcgPSAnJztcbiAgbWF4TnVtYmVyT2ZEYXRhcG9pbnRzID0gNTA7XG5cbiAgbG9hZGluZ0RhdGFwb2ludHMgPSBmYWxzZTtcbiAgYXNzZXRTZWxlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElJZGVudGlmaWVkPihudWxsKTtcbiAgZGF0YXBvaW50cyQ6IE9ic2VydmFibGU8S1BJRGV0YWlsc1tdPjtcbiAgZmlsdGVyZWREYXRhcG9pbnRzJDogT2JzZXJ2YWJsZTxLUElEZXRhaWxzW10+O1xuICBzZWFyY2hTdHJpbmdDaGFuZ2VzJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBkYXRhcG9pbnRMaWJyYXJ5RW50cmllczogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxNYW5hZ2VkT2JqZWN0S1BJPj47XG5cbiAgZW1wdHlTdGF0ZVN1YnRpdGxlV2hlbk5vTWF0Y2hpbmdEYXRhUG9pbnRzID0gZ2V0dGV4dCgnVHJ5IGFub3RoZXIgc2VhcmNoIHRlcm0uJyk7XG4gIGVtcHR5U3RhdGVTdWJ0aXRsZVdoZW5Ob0RhdGFQb2ludHNJbkFzc2V0ID0gZ2V0dGV4dChcbiAgICAnU2VsZWN0IGFuIGFzc2V0IHdpdGggZGF0YSBwb2ludHMgZnJvbSB0aGUgbGlzdC4nXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdHJpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIHByaXZhdGUgdG91Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9uQ2hhbmdlOiAocXVhbnRpdHk6IEtQSURldGFpbHNbXSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhcG9pbnRTZXJ2aWNlOiBEYXRhcG9pbnRMaWJyYXJ5U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgICBpZiAoIXRoaXMuaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludExpYnJhcnlFbnRyaWVzID0gZnJvbSh0aGlzLmRhdGFwb2ludFNlcnZpY2UuZ2V0Rmlyc3REYXRhcG9pbnRMaWJyYXJ5UGFnZSgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZXh0QXNzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCh0aGlzLmNvbnRleHRBc3NldCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IEtQSURldGFpbHNbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhcG9pbnRzID0gb2JqO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBkYXRhcG9pbnRBZGRlZChkcDogS1BJRGV0YWlscyk6IHZvaWQge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIGRwLl9fYWN0aXZlID0gdGhpcy5kZWZhdWx0QWN0aXZlU3RhdGU7XG4gICAgaWYgKHRoaXMuZ3Vlc3NEYXRhcG9pbnRVbml0ICYmICFkcC51bml0KSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlcnZpY2UuZ3Vlc3NVbml0T2ZEYXRhcG9pbnQoZHAuZnJhZ21lbnQsIGRwLnNlcmllcywgZHAuX190YXJnZXQpLnRoZW4odW5pdCA9PiB7XG4gICAgICAgIGRwLnVuaXQgPSB1bml0O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWREYXRhcG9pbnRzID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhcG9pbnRzLCBkcF07XG4gICAgdGhpcy5lbWl0Q3VycmVudFNlbGVjdGlvbigpO1xuICB9XG5cbiAgZGF0YXBvaW50UmVtb3ZlZChkcDogS1BJRGV0YWlscyk6IHZvaWQge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhcG9pbnRzID0gdGhpcy5zZWxlY3RlZERhdGFwb2ludHMuZmlsdGVyKFxuICAgICAgdG1wID0+XG4gICAgICAgIHRtcC5mcmFnbWVudCAhPT0gZHAuZnJhZ21lbnQgfHxcbiAgICAgICAgdG1wLnNlcmllcyAhPT0gZHAuc2VyaWVzIHx8XG4gICAgICAgIHRtcC5fX3RhcmdldD8uaWQgIT09IGRwLl9fdGFyZ2V0Py5pZFxuICAgICk7XG4gICAgdGhpcy5lbWl0Q3VycmVudFNlbGVjdGlvbigpO1xuICB9XG5cbiAgc2VsZWN0aW9uQ2hhbmdlZChldnQ6IElJZGVudGlmaWVkIHwgSUlkZW50aWZpZWRbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2dCkgJiYgZXZ0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QXNzZXQoZXZ0WzBdKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZ0KSAmJiBldnQuaXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNoYW5nZWQoZXZ0Lml0ZW1zKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZ0KSAmJiBldnQuaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFzc2V0KGV2dCk7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgc2VsZWN0aW9uXG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBLUElEZXRhaWxzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7aXRlbS5mcmFnbWVudH0tJHtpdGVtLl9fdGFyZ2V0Py5pZH0tJHtpdGVtLnNlcmllc31gO1xuICB9XG5cbiAgc2VhcmNoU3RyaW5nQ2hhbmdlZChuZXdWYWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hTdHJpbmckLm5leHQobmV3VmFsdWUpO1xuICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT2JzZXJ2YWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhcG9pbnRzJCA9IHRoaXMuYXNzZXRTZWxlY3Rpb24ucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0RhdGFwb2ludHMgPSB0cnVlO1xuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoYXNzZXQgPT5cbiAgICAgICAgYXNzZXQ/LmlkXG4gICAgICAgICAgPyB0aGlzLmRhdGFwb2ludFNlcnZpY2UuZ2V0RGF0YXBvaW50c09mQXNzZXQoYXNzZXQsIHRoaXMuaWdub3JlRGF0YXBvaW50VGVtcGxhdGVzKVxuICAgICAgICAgIDogW11cbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZ0RhdGFwb2ludHMgPSBmYWxzZSkpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgdGhpcy5zZWFyY2hTdHJpbmdDaGFuZ2VzJCA9IHRoaXMuc2VhcmNoU3RyaW5nJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgdGhpcy5maWx0ZXJlZERhdGFwb2ludHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWFyY2hTdHJpbmdDaGFuZ2VzJCwgdGhpcy5kYXRhcG9pbnRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzZWFyY2hTdHJpbmcsIGRhdGFwb2ludHNdKSA9PiB7XG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFwb2ludHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG93ZXJDYXNlU2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBkYXRhcG9pbnRzLmZpbHRlcihkYXRhcG9pbnQgPT5cbiAgICAgICAgICB0aGlzLmluY2x1ZGVzU2VhcmNoU3RyaW5nKGRhdGFwb2ludCwgbG93ZXJDYXNlU2VhcmNoU3RyaW5nKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoZmlsdGVyZWQgPT4gZmlsdGVyZWQuc2xpY2UoMCwgdGhpcy5tYXhOdW1iZXJPZkRhdGFwb2ludHMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFzc2V0KGFzc2V0OiBJSWRlbnRpZmllZCkge1xuICAgIHRoaXMuYXNzZXRTZWxlY3Rpb24ubmV4dChhc3NldCk7XG4gICAgdGhpcy5zZWFyY2hTdHJpbmdDaGFuZ2VkKCk7XG4gICAgaWYgKCF0aGlzLmFsbG93RGF0YXBvaW50c0Zyb21NdWx0aXBsZUFzc2V0cykge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFwb2ludHMgPSBbXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZERhdGFwb2ludHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNUb3VjaGVkKCkge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVzU2VhcmNoU3RyaW5nKGRhdGFwb2ludDogS1BJRGV0YWlscywgbG93ZXJDYXNlU2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IGRhdGFwb2ludC5sYWJlbD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobGFiZWwgJiYgbGFiZWwuaW5jbHVkZXMobG93ZXJDYXNlU2VhcmNoU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkYXRhcG9pbnQuZnJhZ21lbnQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50LmluY2x1ZGVzKGxvd2VyQ2FzZVNlYXJjaFN0cmluZykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmllcyA9IGRhdGFwb2ludC5zZXJpZXM/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNlcmllcyAmJiBzZXJpZXMuaW5jbHVkZXMobG93ZXJDYXNlU2VhcmNoU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZC1ncmlkIGdyaWRfX3Jvdy0tMSBmaXQtaFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCAmJiAhaGlkZVNlbGVjdGlvbixcbiAgICAnZ3JpZF9fY29sLS04LTQtLW1kJzogIWFsbG93Q2hhbmdpbmdDb250ZXh0ICYmICFoaWRlU2VsZWN0aW9uLFxuICAgICdncmlkX19jb2wtLTQtOC0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCAmJiBoaWRlU2VsZWN0aW9uXG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtY29sIHAtcmVsYXRpdmUgYmctbGV2ZWwtMVwiICpuZ0lmPVwiYWxsb3dDaGFuZ2luZ0NvbnRleHRcIj5cbiAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlclxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgW2NvbnRhaW5lcl09XCInJ1wiXG4gICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgdmlldzogJ21pbGxlcicsXG4gICAgICAgIGdyb3Vwc1NlbGVjdGFibGU6IHRydWUsXG4gICAgICAgIGNvbHVtbkhlYWRlcnM6IHRydWUsXG4gICAgICAgIHNob3dDaGlsZERldmljZXM6IHRydWUsXG4gICAgICAgIHNob3dVbmFzc2lnbmVkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2luZ2xlQ29sdW1uOiB0cnVlLFxuICAgICAgICBzZWFyY2g6IGFsbG93U2VhcmNoXG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlcj5cbiAgPC9kaXY+XG4gIDwhLS0gY2VudGVyIGNvbHVtbiAtLT5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbCBiZy1jb21wb25lbnRcIj5cbiAgICA8bmctdGVtcGxhdGUgI25vRGV2aWNlRW1wdHlTdGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2XCI+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICBbaWNvbl09XCInYzh5LWRhdGEtcG9pbnRzJ1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBkYXRhIHBvaW50cyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInU2VsZWN0IGFuIGFzc2V0IGZyb20gdGhlIGxpc3QuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nRGF0YT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiYXNzZXRTZWxlY3Rpb24gfCBhc3luYyBhcyBhc3NldDsgZWxzZSBub0RldmljZUVtcHR5U3RhdGVcIiBjbGFzcz1cImJnLWluaGVyaXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMTYgcC1yLTE2IHAtdC04IHAtYi04IHN0aWNreS10b3AgYmctaW5oZXJpdCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC10cnVuY2F0ZVwiIFt0aXRsZV09XCInQXZhaWxhYmxlIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIHt7ICdBdmFpbGFibGUgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nRGF0YXBvaW50c1wiIGlkPVwic2VhcmNoXCIgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2jigKZcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoU3RyaW5nXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwic2VhcmNoXCIgKm5nSWY9XCIhc2VhcmNoU3RyaW5nOyBlbHNlIGNsZWFyU2VhcmNoU3RyaW5nXCI+PC9pPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbGVhclNlYXJjaFN0cmluZz5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCIgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgKGNsaWNrKT1cInNlYXJjaFN0cmluZ0NoYW5nZWQoKVwiPjwvaT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRGF0YXBvaW50cyQgfCBhc3luYyBhcyBmaWx0ZXJlZERhdGFwb2ludHM7IGVsc2UgbG9hZGluZ0RhdGFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nRGF0YXBvaW50czsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhcG9pbnRzJCB8IGFzeW5jIGFzIGRhdGFwb2ludHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCIhZmlsdGVyZWREYXRhcG9pbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2M4eS1kYXRhLXBvaW50cydcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBkYXRhcG9pbnRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IChlbXB0eVN0YXRlU3VidGl0bGVXaGVuTm9NYXRjaGluZ0RhdGFQb2ludHMgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgIDogKGVtcHR5U3RhdGVTdWJ0aXRsZVdoZW5Ob0RhdGFQb2ludHNJbkFzc2V0IHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGRhdGFwb2ludHMubGVuZ3RoID4gbWF4TnVtYmVyT2ZEYXRhcG9pbnRzICYmXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGFwb2ludHMubGVuZ3RoID49IG1heE51bWJlck9mRGF0YXBvaW50c1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtLWItMFwiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgJ0R1ZSB0byB0aGUgbGFyZ2UgbnVtYmVyLCBvbmx5IGEgc3Vic2V0IG9mIGRhdGEgcG9pbnRzIGlzIGRpc3BsYXllZC4gVXNlIHNlYXJjaCB0byBuYXJyb3cgZG93biB0aGUgbnVtYmVyIG9mIHJlc3VsdHMuJ1xuICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDxjOHktZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRwXCJcbiAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJzZWxlY3RlZERhdGFwb2ludHMgfCBpbmNsdWRlc0RhdGFwb2ludDogZHBcIlxuICAgICAgICAgICAgICAgIFtkYXRhcG9pbnRMaWJyYXJ5RW50cmllc109XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChhZGRlZCk9XCJkYXRhcG9pbnRBZGRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJkYXRhcG9pbnRSZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cInNlYXJjaFN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRwIG9mIGZpbHRlcmVkRGF0YXBvaW50czsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgPjwvYzh5LWRhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0+XG4gICAgICAgICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiICpuZ0lmPVwiIWhpZGVTZWxlY3Rpb25cIj5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBwLWwtMTYgcC1yLTE2IHAtdC04IHAtYi04IHNlcGFyYXRvci1ib3R0b20gc3RpY2t5LXRvcCB0ZXh0LXRydW5jYXRlXCJcbiAgICAgIFt0aXRsZV09XCInU2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgIHRyYW5zbGF0ZVxuICAgID5cbiAgICAgIFNlbGVjdGVkIGRhdGEgcG9pbnRzXG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC04IHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTE2XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsXCIgKm5nRm9yPVwibGV0IHNlbGVjdGVkRHAgb2Ygc2VsZWN0ZWREYXRhcG9pbnRzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbdGl0bGVdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsX19idG5cIlxuICAgICAgICAgIChjbGljayk9XCJkYXRhcG9pbnRSZW1vdmVkKHNlbGVjdGVkRHApXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJyZW1vdmVcIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGxfX2xhYmVsXCJcbiAgICAgICAgICBbdGl0bGVdPVwic2VsZWN0ZWREcCB8IGRhdGFwb2ludExhYmVsOiB7IGRvTm90VXNlTGFiZWw6IHRydWUsIGluY2x1ZGVEZXZpY2U6IHRydWUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiY2lyY2xlXCIgY2xhc3M9XCJtLXItNCBpY29uLTE0XCIgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkRHAuY29sb3JcIj48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBzZWxlY3RlZERwIHwgZGF0YXBvaW50TGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIiAqbmdJZj1cInNlbGVjdGVkRHA/Ll9fdGFyZ2V0Py5uYW1lXCI+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkRHA/Ll9fdGFyZ2V0Py5uYW1lIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNlwiICpuZ0lmPVwiIXNlbGVjdGVkRGF0YXBvaW50cyB8fCAhc2VsZWN0ZWREYXRhcG9pbnRzLmxlbmd0aFwiPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCInYzh5LWRhdGEtcG9pbnRzJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgc2VsZWN0ZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -66,10 +66,10 @@ export class AssetPropertiesItemComponent {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
AssetPropertiesItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetPropertiesItemComponent, deps: [{ token: i1.AlertService }, { token: i1.C8yJSONSchema }, { token: i1.FilesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
69
|
-
AssetPropertiesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: { key: "key", value: "value", label: "label", type: "type", file: "file", complex: "complex", isEdit: "isEdit", jsonSchema: "jsonSchema" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label
|
|
69
|
+
AssetPropertiesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: { key: "key", value: "value", label: "label", type: "type", file: "file", complex: "complex", isEdit: "isEdit", jsonSchema: "jsonSchema" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] });
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetPropertiesItemComponent, decorators: [{
|
|
71
71
|
type: Component,
|
|
72
|
-
args: [{ selector: 'c8y-asset-properties-item', template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label
|
|
72
|
+
args: [{ selector: 'c8y-asset-properties-item', template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n" }]
|
|
73
73
|
}], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i1.C8yJSONSchema }, { type: i1.FilesService }]; }, propDecorators: { key: [{
|
|
74
74
|
type: Input
|
|
75
75
|
}], value: [{
|
|
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
87
87
|
}], jsonSchema: [{
|
|
88
88
|
type: Input
|
|
89
89
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnZDLFlBQ1UsS0FBbUIsRUFDbkIsb0JBQW1DLEVBQ3BDLFlBQTBCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hDLENBQUM7SUFFSixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1lBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzthQUN6RDtTQUNGO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNuQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPO2dCQUNMLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN6QyxDQUFDO1NBQ0g7UUFDRCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQWU7UUFDN0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7eUhBbkZVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDBPQ2J6Qyx5ekVBMkRBLHN3QkQ5Q2EsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzBKQUtyQyxHQUFHO3NCQURGLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdEJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQzh5SlNPTlNjaGVtYSwgZ2V0dGV4dCwgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0aWVzSXRlbSB9IGZyb20gJy4vYXNzZXQtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydGllc0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBc3NldFByb3BlcnRpZXNJdGVtLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IGFueTtcbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgdHlwZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBmaWxlOiBJTWFuYWdlZE9iamVjdEJpbmFyeTtcbiAgQElucHV0KClcbiAgY29tcGxleDogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdO1xuICBASW5wdXQoKVxuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGpzb25TY2hlbWE6IEpTT05TY2hlbWE3O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBtb2RlbDogYW55O1xuICBwcmV2aWV3SW1hZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYzh5SnNvblNjaGVtYVNlcnZpY2U6IEM4eUpTT05TY2hlbWEsXG4gICAgcHVibGljIGZpbGVzU2VydmljZTogRmlsZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLnJlc29sdmVKc29uU2NoZW1hKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZUZpbGUgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5nZXRGaWxlKHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlID0gYXdhaXQgdGhpcy5nZXRQcmV2aWV3SWZJbWFnZShpbWFnZUZpbGUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcHMgPSB7fTtcbiAgICB0aGlzLmNvbXBsZXguZm9yRWFjaChjb21wbGV4T2JqID0+IHtcbiAgICAgIGlmIChjb21wbGV4T2JqLmZpbGUpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IGNvbXBsZXhPYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldICE9IG51bGwpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21wbGV4UHJvcHM7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKCkge1xuICAgIGlmICh0aGlzLmNvbXBsZXggJiYgdGhpcy5jb21wbGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFt0aGlzLmtleV06IHRoaXMuZm9ybUNvbXBsZXhQcm9wc1ZhbHVlKClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBjbG9uZSh0aGlzLnZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVKc29uU2NoZW1hKCkge1xuICAgIGlmICh0aGlzLmpzb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jOHlKc29uU2NoZW1hU2VydmljZS50b0ZpZWxkQ29uZmlnKHRoaXMuanNvblNjaGVtYSwgdGhpcy5qc29uU2NoZW1hKTtcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgdGhpcy5maWVsZHMgPSBbZmllbGRDb25maWddO1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFByZXZpZXdJZkltYWdlKGltYWdlRmlsZTogRmlsZSkge1xuICAgIGlmICh0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRFeHRlbnNpb25zKGltYWdlRmlsZSwgJ2ltYWdlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzU2VydmljZS50b0Jhc2U2NChpbWFnZUZpbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwiIWlzRWRpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICB7eyB2YWx1ZSB8IGM4eURhdGU6ICdmdWxsRGF0ZScgfX1cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlXCI+XG4gICAgICA8aW1nICpuZ0lmPVwicHJldmlld0ltYWdlXCIgW3NyY109XCJwcmV2aWV3SW1hZ2VcIiBjbGFzcz1cImltZy1yZXNwb25zaXZlXCIgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhcHJldmlld0ltYWdlXCJcbiAgICAgICAgKGNsaWNrKT1cImZpbGVzU2VydmljZS5kb3dubG9hZChmaWxlKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdEb3dubG9hZCcgfCB0cmFuc2xhdGUgfX0ge3sgZmlsZS5uYW1lIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFuIHRleHQtdHJ1bmNhdGUgcC0wXCJcbiAgICAgID5cbiAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbGVcIj5cbiAgICAgIHt7ICdObyBmaWxlIGF0dGFjaGVkLicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvYmplY3QnXCI+XG4gICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBjOHktY3VzdG9tLXByb3BlcnRpZXNcIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcCBvZiBjb21wbGV4OyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VwYXJhdG9yLXRvcC1ib3R0b20nOiBpID09PSAwLCAnc2VwYXJhdG9yLWJvdHRvbSc6IGkgPiAwIH1cIlxuICAgICAgICBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04XCIgW25nQ2xhc3NdPVwieyAnYS1zLXN0YXJ0JzogcHJvcC5maWxlIH1cIj5cbiAgICAgICAgICB7eyBwcm9wLmxhYmVsIHwgaHVtYW5pemUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiIHN0eWxlPVwibWF4LXdpZHRoOiB7eyBwcm9wLmZpbGUgPyAnNTAlJyA6ICcxMDAlJyB9fTsgbWluLXdpZHRoOjA7XCI+XG4gICAgICAgICAgPGM4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW1cbiAgICAgICAgICAgIFtmaWxlXT1cInByb3AuZmlsZVwiXG4gICAgICAgICAgICBba2V5XT1cInByb3Aua2V5XCJcbiAgICAgICAgICAgIFt0eXBlXT1cInByb3AudHlwZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicHJvcC52YWx1ZVwiXG4gICAgICAgICAgPjwvYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPCEtLVxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ2YWx1ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyA/IHR5cGUgOiAnJ1wiPlxuICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVwiPlxuICAgICAge3sgdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICA8cCBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7ICh2YWx1ZSB8IHRyYW5zbGF0ZSkgfHwgKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVwiPlxuICAgICAge3sgKHZhbHVlIHwgdHJhbnNsYXRlKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gICAgPC9wPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPGZvcm1seS1mb3JtICpuZ0lmPVwiaXNFZGl0XCIgW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZmllbGRzXCIgW21vZGVsXT1cIm1vZGVsXCI+PC9mb3JtbHktZm9ybT5cbiJdfQ==
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnZDLFlBQ1UsS0FBbUIsRUFDbkIsb0JBQW1DLEVBQ3BDLFlBQTBCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hDLENBQUM7SUFFSixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1lBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzthQUN6RDtTQUNGO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNuQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPO2dCQUNMLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN6QyxDQUFDO1NBQ0g7UUFDRCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQWU7UUFDN0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7eUhBbkZVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDBPQ2J6QywwNUVBK0RBLHN3QkRsRGEsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzBKQUtyQyxHQUFHO3NCQURGLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdEJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQzh5SlNPTlNjaGVtYSwgZ2V0dGV4dCwgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0aWVzSXRlbSB9IGZyb20gJy4vYXNzZXQtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydGllc0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBc3NldFByb3BlcnRpZXNJdGVtLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IGFueTtcbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgdHlwZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBmaWxlOiBJTWFuYWdlZE9iamVjdEJpbmFyeTtcbiAgQElucHV0KClcbiAgY29tcGxleDogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdO1xuICBASW5wdXQoKVxuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGpzb25TY2hlbWE6IEpTT05TY2hlbWE3O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBtb2RlbDogYW55O1xuICBwcmV2aWV3SW1hZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYzh5SnNvblNjaGVtYVNlcnZpY2U6IEM4eUpTT05TY2hlbWEsXG4gICAgcHVibGljIGZpbGVzU2VydmljZTogRmlsZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLnJlc29sdmVKc29uU2NoZW1hKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZUZpbGUgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5nZXRGaWxlKHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlID0gYXdhaXQgdGhpcy5nZXRQcmV2aWV3SWZJbWFnZShpbWFnZUZpbGUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcHMgPSB7fTtcbiAgICB0aGlzLmNvbXBsZXguZm9yRWFjaChjb21wbGV4T2JqID0+IHtcbiAgICAgIGlmIChjb21wbGV4T2JqLmZpbGUpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IGNvbXBsZXhPYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldICE9IG51bGwpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21wbGV4UHJvcHM7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKCkge1xuICAgIGlmICh0aGlzLmNvbXBsZXggJiYgdGhpcy5jb21wbGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFt0aGlzLmtleV06IHRoaXMuZm9ybUNvbXBsZXhQcm9wc1ZhbHVlKClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBjbG9uZSh0aGlzLnZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVKc29uU2NoZW1hKCkge1xuICAgIGlmICh0aGlzLmpzb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jOHlKc29uU2NoZW1hU2VydmljZS50b0ZpZWxkQ29uZmlnKHRoaXMuanNvblNjaGVtYSwgdGhpcy5qc29uU2NoZW1hKTtcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgdGhpcy5maWVsZHMgPSBbZmllbGRDb25maWddO1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFByZXZpZXdJZkltYWdlKGltYWdlRmlsZTogRmlsZSkge1xuICAgIGlmICh0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRFeHRlbnNpb25zKGltYWdlRmlsZSwgJ2ltYWdlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzU2VydmljZS50b0Jhc2U2NChpbWFnZUZpbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwiIWlzRWRpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICB7eyB2YWx1ZSB8IGM4eURhdGU6ICdmdWxsRGF0ZScgfX1cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlXCI+XG4gICAgICA8aW1nICpuZ0lmPVwicHJldmlld0ltYWdlXCIgW3NyY109XCJwcmV2aWV3SW1hZ2VcIiBjbGFzcz1cImltZy1yZXNwb25zaXZlXCIgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhcHJldmlld0ltYWdlXCJcbiAgICAgICAgKGNsaWNrKT1cImZpbGVzU2VydmljZS5kb3dubG9hZChmaWxlKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdEb3dubG9hZCcgfCB0cmFuc2xhdGUgfX0ge3sgZmlsZS5uYW1lIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFuIHRleHQtdHJ1bmNhdGUgcC0wXCJcbiAgICAgID5cbiAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbGVcIj5cbiAgICAgIHt7ICdObyBmaWxlIGF0dGFjaGVkLicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvYmplY3QnXCI+XG4gICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBjOHktY3VzdG9tLXByb3BlcnRpZXNcIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcCBvZiBjb21wbGV4OyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VwYXJhdG9yLXRvcC1ib3R0b20nOiBpID09PSAwLCAnc2VwYXJhdG9yLWJvdHRvbSc6IGkgPiAwIH1cIlxuICAgICAgICBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLTggdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBwcm9wLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhLXMtc3RhcnQnOiBwcm9wLmZpbGUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIiBzdHlsZT1cIm1heC13aWR0aDoge3sgcHJvcC5maWxlID8gJzUwJScgOiAnMTAwJScgfX07IG1pbi13aWR0aDowO1wiPlxuICAgICAgICAgIDxjOHktYXNzZXQtcHJvcGVydGllcy1pdGVtXG4gICAgICAgICAgICBbZmlsZV09XCJwcm9wLmZpbGVcIlxuICAgICAgICAgICAgW2tleV09XCJwcm9wLmtleVwiXG4gICAgICAgICAgICBbdHlwZV09XCJwcm9wLnR5cGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInByb3AudmFsdWVcIlxuICAgICAgICAgID48L2M4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW0+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDwhLS1cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIC0tPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicgPyB0eXBlIDogJydcIj5cbiAgICA8cCBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cIj5cbiAgICAgIHt7IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyAodmFsdWUgfCB0cmFuc2xhdGUpIHx8ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cIj5cbiAgICAgIHt7ICh2YWx1ZSB8IHRyYW5zbGF0ZSkgfHwgKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxmb3JtbHktZm9ybSAqbmdJZj1cImlzRWRpdFwiIFtmb3JtXT1cImZvcm1cIiBbZmllbGRzXT1cImZpZWxkc1wiIFttb2RlbF09XCJtb2RlbFwiPjwvZm9ybWx5LWZvcm0+XG4iXX0=
|