@myrmidon/gve-core 0.0.3 → 0.0.5
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/README.md +43 -77
- package/esm2022/lib/components/animation-timeline/animation-timeline.component.mjs +50 -19
- package/esm2022/lib/components/animation-timeline-set/animation-timeline-set.component.mjs +154 -0
- package/esm2022/lib/components/animation-tween/animation-tween.component.mjs +48 -25
- package/esm2022/lib/components/base-text-char/base-text-char.component.mjs +13 -4
- package/esm2022/lib/components/base-text-editor/base-text-editor.component.mjs +10 -6
- package/esm2022/lib/components/base-text-view/base-text-view.component.mjs +39 -5
- package/esm2022/lib/components/chain-operation-editor/chain-operation-editor.component.mjs +97 -39
- package/esm2022/lib/components/chain-result-view/chain-result-view.component.mjs +44 -12
- package/esm2022/lib/components/feature-editor/feature-editor.component.mjs +27 -12
- package/esm2022/lib/components/feature-set-editor/feature-set-editor.component.mjs +32 -9
- package/esm2022/lib/components/feature-set-view/feature-set-view.component.mjs +28 -8
- package/esm2022/lib/components/ln-heights-editor/ln-heights-editor.component.mjs +38 -7
- package/esm2022/lib/components/operation-source-editor/operation-source-editor.component.mjs +29 -4
- package/esm2022/lib/components/simple-tree/simple-tree.component.mjs +20 -4
- package/esm2022/lib/components/snapshot-editor/snapshot-editor.component.mjs +446 -108
- package/esm2022/lib/components/steps-map/steps-map.component.mjs +31 -9
- package/esm2022/lib/services/gve-api.service.mjs +17 -4
- package/esm2022/lib/services/settings.service.mjs +6 -5
- package/esm2022/lib/validators/svg-validators.mjs +7 -1
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/myrmidon-gve-core.mjs +1089 -375
- package/fesm2022/myrmidon-gve-core.mjs.map +1 -1
- package/lib/components/animation-timeline/animation-timeline.component.d.ts +31 -9
- package/lib/components/animation-timeline-set/animation-timeline-set.component.d.ts +55 -0
- package/lib/components/animation-tween/animation-tween.component.d.ts +25 -12
- package/lib/components/base-text-char/base-text-char.component.d.ts +16 -0
- package/lib/components/base-text-editor/base-text-editor.component.d.ts +5 -1
- package/lib/components/base-text-view/base-text-view.component.d.ts +37 -0
- package/lib/components/chain-operation-editor/chain-operation-editor.component.d.ts +53 -5
- package/lib/components/chain-result-view/chain-result-view.component.d.ts +17 -3
- package/lib/components/feature-editor/feature-editor.component.d.ts +21 -7
- package/lib/components/feature-set-editor/feature-set-editor.component.d.ts +28 -5
- package/lib/components/feature-set-view/feature-set-view.component.d.ts +23 -3
- package/lib/components/ln-heights-editor/ln-heights-editor.component.d.ts +22 -0
- package/lib/components/operation-source-editor/operation-source-editor.component.d.ts +31 -0
- package/lib/components/simple-tree/simple-tree.component.d.ts +19 -0
- package/lib/components/snapshot-editor/snapshot-editor.component.d.ts +179 -12
- package/lib/components/steps-map/steps-map.component.d.ts +20 -3
- package/lib/services/gve-api.service.d.ts +14 -0
- package/lib/services/settings.service.d.ts +2 -1
- package/lib/validators/svg-validators.d.ts +6 -0
- package/package.json +4 -4
- package/public-api.d.ts +0 -1
- package/esm2022/lib/components/animation-vars/animation-vars.component.mjs +0 -141
- package/lib/components/animation-vars/animation-vars.component.d.ts +0 -30
|
@@ -22,7 +22,26 @@ import * as i6 from "@angular/material/input";
|
|
|
22
22
|
import * as i7 from "@angular/material/tooltip";
|
|
23
23
|
import * as i8 from "@myrmidon/ng-tools";
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 🔑 `gve-feature-set-editor`
|
|
26
|
+
*
|
|
27
|
+
* Component for editing a set of features. It shows a list of features,
|
|
28
|
+
* allowing to edit each of them or adding new ones. Optionally you can
|
|
29
|
+
* specify a list of feature names and values to use in the selection.
|
|
30
|
+
* Used by base text editor and chain operation editor components.
|
|
31
|
+
*
|
|
32
|
+
* - ▶️ `featNames` (`LabeledId[]`): the list of feature names to display
|
|
33
|
+
* in the _name_ selection. This is used when you have a closed list of features.
|
|
34
|
+
* - ▶️ `featValues` (`FeatureMap`): the feature values map. When specified
|
|
35
|
+
* and the user selects a feature name present in the map keys, the corresponding
|
|
36
|
+
* values will be used to populate the value selection.
|
|
37
|
+
* - ▶️ `filterThreshold` (`number`): the threshold at which the features filter
|
|
38
|
+
* should become visible. If set to 0, the filter is always visible; if set to -1,
|
|
39
|
+
* it is always invisible; otherwise, it gets visible when the number of features
|
|
40
|
+
* is greater than the threshold. Default is 5.
|
|
41
|
+
* - ▶️ `features` (`Feature[]`): the features to edit.
|
|
42
|
+
* - ▶️ `isVar`: true if the feature is a variant operation feature, which
|
|
43
|
+
* has additional properties like negation, global, and short-lived.
|
|
44
|
+
* - 🔥 `featuresChange` (`Feature[]`): emitted when features have changed.
|
|
26
45
|
*/
|
|
27
46
|
export class FeatureSetEditorComponent {
|
|
28
47
|
/**
|
|
@@ -39,14 +58,18 @@ export class FeatureSetEditorComponent {
|
|
|
39
58
|
this.applyFeatureFilter(this.filter.value);
|
|
40
59
|
}
|
|
41
60
|
constructor(formBuilder) {
|
|
61
|
+
this.POLICIES = ['M', 'S', 'SF'];
|
|
42
62
|
/**
|
|
43
63
|
* True if the features are variable features.
|
|
44
64
|
*/
|
|
45
65
|
this.isVar = false;
|
|
46
66
|
/**
|
|
47
|
-
*
|
|
67
|
+
* The threshold at which the features filter should become visible.
|
|
68
|
+
* If set to 0, the filter is always visible; if set to -1, it is always
|
|
69
|
+
* invisible; otherwise, it gets visible when the number of features
|
|
70
|
+
* is greater than the threshold. Default is 5.
|
|
48
71
|
*/
|
|
49
|
-
this.
|
|
72
|
+
this.filterThreshold = 5;
|
|
50
73
|
/**
|
|
51
74
|
* Emitted when the features change.
|
|
52
75
|
*/
|
|
@@ -118,10 +141,10 @@ export class FeatureSetEditorComponent {
|
|
|
118
141
|
this.editedFeature = undefined;
|
|
119
142
|
this._editedFeatureIndex = -1;
|
|
120
143
|
}
|
|
121
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
122
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: FeatureSetEditorComponent, isStandalone: true, selector: "gve-feature-set-editor", inputs: { isVar: "isVar", featNames: "featNames", featValues: "featValues", filterThreshold: "filterThreshold", features: "features" }, outputs: { featuresChange: "featuresChange" }, ngImport: i0, template: "<div>\r\n <div class=\"form-row\">\r\n <!-- filter -->\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- add feature button -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Add a new feature\"\r\n (click)=\"addFeature()\"\r\n [class.in-row-button]=\"\r\n filterThreshold === 0 || features.length > filterThreshold\r\n \"\r\n >\r\n <mat-icon>add</mat-icon>\r\n feature\r\n </button>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (features.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>feature</th>\r\n <th>value</th>\r\n <th>policy</th>\r\n @if (isVar) {\r\n <th>negated</th>\r\n <th>global</th>\r\n <th>short-lived</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (feature of filteredFeatures; track feature) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <!-- edit -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit this feature\"\r\n (click)=\"editFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <!-- delete -->\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Delete this feature\"\r\n (click)=\"deleteFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </td>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n <td>\r\n <span>{{ POLICIES[feature.setPolicy] }}</span>\r\n </td>\r\n @if (isVar) {\r\n <td>\r\n <span>{{ $any(feature).isNegated ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isGlobal ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isShortLived ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [disabled]=\"!editedFeature\" [expanded]=\"editedFeature\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span>{{ editedFeature?.name || \"feature\" }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <gve-feature-editor\r\n [isVar]=\"isVar\"\r\n [featNames]=\"featNames\"\r\n [featValues]=\"featValues\"\r\n [feature]=\"editedFeature\"\r\n (featureChange)=\"onFeatureChange($event)\"\r\n (featureCancel)=\"onFeatureCancel()\"\r\n />\r\n </mat-expansion-panel>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse;margin-top:8px}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: NgToolsModule }, { kind: "pipe", type: i8.FlatLookupPipe, name: "flatLookup" }, { kind: "component", type: FeatureEditorComponent, selector: "gve-feature-editor", inputs: ["featNames", "featValues", "feature", "isVar"], outputs: ["featureCancel", "featureChange"] }] }); }
|
|
123
146
|
}
|
|
124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetEditorComponent, decorators: [{
|
|
125
148
|
type: Component,
|
|
126
149
|
args: [{ selector: 'gve-feature-set-editor', standalone: true, imports: [
|
|
127
150
|
CommonModule,
|
|
@@ -135,18 +158,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
135
158
|
MatTooltipModule,
|
|
136
159
|
NgToolsModule,
|
|
137
160
|
FeatureEditorComponent,
|
|
138
|
-
], template: "<div>\r\n <div class=\"form-row\">\r\n @if (
|
|
161
|
+
], template: "<div>\r\n <div class=\"form-row\">\r\n <!-- filter -->\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- add feature button -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Add a new feature\"\r\n (click)=\"addFeature()\"\r\n [class.in-row-button]=\"\r\n filterThreshold === 0 || features.length > filterThreshold\r\n \"\r\n >\r\n <mat-icon>add</mat-icon>\r\n feature\r\n </button>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (features.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>feature</th>\r\n <th>value</th>\r\n <th>policy</th>\r\n @if (isVar) {\r\n <th>negated</th>\r\n <th>global</th>\r\n <th>short-lived</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (feature of filteredFeatures; track feature) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <!-- edit -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit this feature\"\r\n (click)=\"editFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <!-- delete -->\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Delete this feature\"\r\n (click)=\"deleteFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </td>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n <td>\r\n <span>{{ POLICIES[feature.setPolicy] }}</span>\r\n </td>\r\n @if (isVar) {\r\n <td>\r\n <span>{{ $any(feature).isNegated ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isGlobal ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isShortLived ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [disabled]=\"!editedFeature\" [expanded]=\"editedFeature\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span>{{ editedFeature?.name || \"feature\" }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <gve-feature-editor\r\n [isVar]=\"isVar\"\r\n [featNames]=\"featNames\"\r\n [featValues]=\"featValues\"\r\n [feature]=\"editedFeature\"\r\n (featureChange)=\"onFeatureChange($event)\"\r\n (featureCancel)=\"onFeatureCancel()\"\r\n />\r\n </mat-expansion-panel>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse;margin-top:8px}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"] }]
|
|
139
162
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { isVar: [{
|
|
140
163
|
type: Input
|
|
141
164
|
}], featNames: [{
|
|
142
165
|
type: Input
|
|
143
166
|
}], featValues: [{
|
|
144
167
|
type: Input
|
|
145
|
-
}],
|
|
168
|
+
}], filterThreshold: [{
|
|
146
169
|
type: Input
|
|
147
170
|
}], features: [{
|
|
148
171
|
type: Input
|
|
149
172
|
}], featuresChange: [{
|
|
150
173
|
type: Output
|
|
151
174
|
}] } });
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9C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UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQTFJVSx5QkFBeUI7a0dBQXpCLHlCQUF5QiwyUEN4RHRDLGlsSEE4SEEscWJEckZJLFlBQVksOEJBQ1osbUJBQW1CLHlrQkFDbkIsZUFBZSx3VUFDZixrQkFBa0IseWRBQ2xCLGtCQUFrQiwwV0FDbEIsYUFBYSxtTEFDYixjQUFjLDBXQUNkLGVBQWUsOEJBQ2YsZ0JBQWdCLDRUQUNoQixhQUFhLDhGQUNiLHNCQUFzQjs7MkZBS2IseUJBQXlCO2tCQW5CckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2Isc0JBQXNCO3FCQUN2QjtnRkFhTSxLQUFLO3NCQURYLEtBQUs7Z0JBUUMsU0FBUztzQkFEZixLQUFLO2dCQVNDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQU9LLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZ0JDLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE5nVG9vbHNNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGZWF0dXJlU2V0UG9saWN5LFxyXG4gIExhYmVsZWRJZCxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlRWRpdG9yQ29tcG9uZW50LFxyXG4gIEZlYXR1cmVNYXAsXHJcbn0gZnJvbSAnLi4vZmVhdHVyZS1lZGl0b3IvZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBFZGl0b3IgZm9yIGEgc2V0IG9mIGZlYXR1cmVzLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtZmVhdHVyZS1zZXQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTmdUb29sc01vZHVsZSxcclxuICAgIEZlYXR1cmVFZGl0b3JDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZVNldEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuICBwcml2YXRlIF9lZGl0ZWRGZWF0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGUgZmVhdHVyZXMgYXJlIHZhcmlhYmxlIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzVmFyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0VmFsdWVzOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUcnVlIHRvIGhpZGUgdGhlIGZlYXR1cmUgZmlsdGVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG5vRmlsdGVyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBmZWF0dXJlcyB0byBlZGl0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBmZWF0dXJlcygpOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZlYXR1cmVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGZlYXR1cmVzKHZhbHVlOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10pIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlcyA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmVhdHVyZXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKHRoaXMuZmlsdGVyLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZmVhdHVyZXMgY2hhbmdlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBmZWF0dXJlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdPigpO1xyXG5cclxuICBwdWJsaWMgZWRpdGVkRmVhdHVyZT86IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlO1xyXG5cclxuICAvLyBmaWx0ZXJcclxuICBwdWJsaWMgZmlsdGVyOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZmlsdGVyZWRGZWF0dXJlczogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuX2ZlYXR1cmVzID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkRmVhdHVyZXMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZlYXR1cmVGaWx0ZXIobmFtZT86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyZWRGZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgIHJldHVybiAhbmFtZSB8fCBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWIgPSB0aGlzLmZpbHRlci52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVGaWx0ZXIodmFsdWUpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1Yj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRGZWF0dXJlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0ZWRGZWF0dXJlID0ge1xyXG4gICAgICBuYW1lOiAnJyxcclxuICAgICAgdmFsdWU6ICcnLFxyXG4gICAgICBzZXRQb2xpY3k6IEZlYXR1cmVTZXRQb2xpY3kubXVsdGlwbGUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4ID0gLTE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IGZlYXR1cmU7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSB0aGlzLmZlYXR1cmVzLmluZGV4T2YoZmVhdHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmVhdHVyZShmZWF0dXJlOiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZSk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZlYXR1cmVzLmluZGV4T2YoZmVhdHVyZSk7XHJcbiAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZlYXR1cmVzID0gWy4uLnRoaXMuZmVhdHVyZXNdO1xyXG4gICAgZmVhdHVyZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZmVhdHVyZXMgPSBmZWF0dXJlcztcclxuICAgIHRoaXMuZmVhdHVyZXNDaGFuZ2UuZW1pdCh0aGlzLmZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZlYXR1cmVDaGFuZ2UoZmVhdHVyZTogRmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZlYXR1cmVzID0gWy4uLnRoaXMuZmVhdHVyZXNdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBmZWF0dXJlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoZmVhdHVyZXNbaV0ubmFtZSA9PT0gZmVhdHVyZS5uYW1lKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZmVhdHVyZS5zZXRQb2xpY3kgPT09IEZlYXR1cmVTZXRQb2xpY3kuc2luZ2xlIHx8XHJcbiAgICAgICAgICBmZWF0dXJlc1tpXS5zZXRQb2xpY3kgPT09IEZlYXR1cmVTZXRQb2xpY3kuc2luZ2xlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmZWF0dXJlcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9PT0gLTEpIHtcclxuICAgICAgZmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZlYXR1cmVzLnNwbGljZSh0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXgsIDEsIGZlYXR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmVhdHVyZXMgPSBmZWF0dXJlcztcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5mZWF0dXJlc0NoYW5nZS5lbWl0KHRoaXMuZmVhdHVyZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRmVhdHVyZUNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgQGlmICghbm9GaWx0ZXIgfHwgIWZlYXR1cmVzLmxlbmd0aCkge1xyXG4gICAgPCEtLSBmaWx0ZXIgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cImZpbHRlclwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJcIiAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlci5yZXNldCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJtYXQtd2FyblwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIGFkZCBmZWF0dXJlIGJ1dHRvbiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIG5ldyBmZWF0dXJlXCJcclxuICAgICAgKGNsaWNrKT1cImFkZEZlYXR1cmUoKVwiXHJcbiAgICAgIFtjbGFzcy5pbi1yb3ctYnV0dG9uXT1cIiFub0ZpbHRlclwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICBmZWF0dXJlXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBsaXN0IC0tPlxyXG4gIEBpZiAoZmVhdHVyZXMubGVuZ3RoKSB7XHJcbiAgPHRhYmxlPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoPmZlYXR1cmU8L3RoPlxyXG4gICAgICAgIDx0aD52YWx1ZTwvdGg+XHJcbiAgICAgICAgQGlmIChpc1Zhcikge1xyXG4gICAgICAgIDx0aD5uZWdhdGVkPC90aD5cclxuICAgICAgICA8dGg+Z2xvYmFsPC90aD5cclxuICAgICAgICA8dGg+c2hvcnQtbGl2ZWQ8L3RoPlxyXG4gICAgICAgIH1cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIEBmb3IgKGZlYXR1cmUgb2YgZmlsdGVyZWRGZWF0dXJlczsgdHJhY2sgZmVhdHVyZSkge1xyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwiZml0LXdpZHRoXCI+XHJcbiAgICAgICAgICA8IS0tIGVkaXQgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgdGhpcyBmZWF0dXJlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRGZWF0dXJlKGZlYXR1cmUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXByaW1hcnlcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPCEtLSBkZWxldGUgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIGZlYXR1cmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmVhdHVyZShmZWF0dXJlKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgQGlmIChmZWF0TmFtZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgZmVhdHVyZS5uYW1lIHwgZmxhdExvb2t1cCA6IGZlYXROYW1lcyA6IFwiaWRcIiA6IFwibGFiZWxcIlxyXG4gICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIEBpZiAoZmVhdFZhbHVlcykge1xyXG4gICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgZmVhdHVyZS52YWx1ZSB8IGZsYXRMb29rdXAgOiBmZWF0VmFsdWVzW2ZlYXR1cmUubmFtZV1cclxuICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICA8c3Bhbj57eyBmZWF0dXJlLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgQGlmIChpc1Zhcikge1xyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxzcGFuPnt7ICRhbnkoZmVhdHVyZSkuaXNOZWdhdGVkID8gXCJ5ZXNcIiA6IFwibm9cIiB9fTwvc3Bhbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxzcGFuPnt7ICRhbnkoZmVhdHVyZSkuaXNHbG9iYWwgPyBcInllc1wiIDogXCJub1wiIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc1Nob3J0TGl2ZWQgPyBcInllc1wiIDogXCJub1wiIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgICB9XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcbiAgfVxyXG5cclxuICA8IS0tIGVkaXRvciAtLT5cclxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZGlzYWJsZWRdPVwiIWVkaXRlZEZlYXR1cmVcIiBbZXhwYW5kZWRdPVwiZWRpdGVkRmVhdHVyZVwiPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDxzcGFuPnt7IGVkaXRlZEZlYXR1cmU/Lm5hbWUgfHwgXCJmZWF0dXJlXCIgfX08L3NwYW4+XHJcbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxndmUtZmVhdHVyZS1lZGl0b3JcclxuICAgICAgW2lzVmFyXT1cImlzVmFyXCJcclxuICAgICAgW2ZlYXROYW1lc109XCJmZWF0TmFtZXNcIlxyXG4gICAgICBbZmVhdFZhbHVlc109XCJmZWF0VmFsdWVzXCJcclxuICAgICAgW2ZlYXR1cmVdPVwiZWRpdGVkRmVhdHVyZVwiXHJcbiAgICAgIChmZWF0dXJlQ2hhbmdlKT1cIm9uRmVhdHVyZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKGZlYXR1cmVDYW5jZWwpPVwib25GZWF0dXJlQ2FuY2VsKClcIlxyXG4gICAgLz5cclxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9C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O1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OEdBL0lVLHlCQUF5QjtrR0FBekIseUJBQXlCLHlRQzNFdEMsNnlIQW9JQSxvY0R4RUksWUFBWSw4QkFDWixtQkFBbUIseWtCQUNuQixlQUFlLHdVQUNmLGtCQUFrQix5ZEFDbEIsa0JBQWtCLDBXQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSw4QkFDZixnQkFBZ0IsNFRBQ2hCLGFBQWEsOEZBQ2Isc0JBQXNCOzsyRkFLYix5QkFBeUI7a0JBbkJyQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixzQkFBc0I7cUJBQ3ZCO2dGQWVNLEtBQUs7c0JBRFgsS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsS0FBSztnQkFVQyxlQUFlO3NCQURyQixLQUFLO2dCQU9LLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZ0JDLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE5nVG9vbHNNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGZWF0dXJlU2V0UG9saWN5LFxyXG4gIExhYmVsZWRJZCxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlRWRpdG9yQ29tcG9uZW50LFxyXG4gIEZlYXR1cmVNYXAsXHJcbn0gZnJvbSAnLi4vZmVhdHVyZS1lZGl0b3IvZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiDwn5SRIGBndmUtZmVhdHVyZS1zZXQtZWRpdG9yYFxyXG4gKlxyXG4gKiBDb21wb25lbnQgZm9yIGVkaXRpbmcgYSBzZXQgb2YgZmVhdHVyZXMuIEl0IHNob3dzIGEgbGlzdCBvZiBmZWF0dXJlcyxcclxuICogYWxsb3dpbmcgdG8gZWRpdCBlYWNoIG9mIHRoZW0gb3IgYWRkaW5nIG5ldyBvbmVzLiBPcHRpb25hbGx5IHlvdSBjYW5cclxuICogc3BlY2lmeSBhIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcyBhbmQgdmFsdWVzIHRvIHVzZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gKiBVc2VkIGJ5IGJhc2UgdGV4dCBlZGl0b3IgYW5kIGNoYWluIG9wZXJhdGlvbiBlZGl0b3IgY29tcG9uZW50cy5cclxuICpcclxuICogLSDilrbvuI8gYGZlYXROYW1lc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBmZWF0dXJlIG5hbWVzIHRvIGRpc3BsYXlcclxuICogaW4gdGhlIF9uYW1lXyBzZWxlY3Rpb24uIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGEgY2xvc2VkIGxpc3Qgb2YgZmVhdHVyZXMuXHJcbiAqIC0g4pa277iPIGBmZWF0VmFsdWVzYCAoYEZlYXR1cmVNYXBgKTogdGhlIGZlYXR1cmUgdmFsdWVzIG1hcC4gV2hlbiBzcGVjaWZpZWRcclxuICogYW5kIHRoZSB1c2VyIHNlbGVjdHMgYSBmZWF0dXJlIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsIHRoZSBjb3JyZXNwb25kaW5nXHJcbiAqIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICogLSDilrbvuI8gYGZpbHRlclRocmVzaG9sZGAgKGBudW1iZXJgKTogdGhlIHRocmVzaG9sZCBhdCB3aGljaCB0aGUgZmVhdHVyZXMgZmlsdGVyXHJcbiAqIHNob3VsZCBiZWNvbWUgdmlzaWJsZS4gSWYgc2V0IHRvIDAsIHRoZSBmaWx0ZXIgaXMgYWx3YXlzIHZpc2libGU7IGlmIHNldCB0byAtMSxcclxuICogaXQgaXMgYWx3YXlzIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGhyZXNob2xkLiBEZWZhdWx0IGlzIDUuXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlc2AgKGBGZWF0dXJlW11gKTogdGhlIGZlYXR1cmVzIHRvIGVkaXQuXHJcbiAqIC0g4pa277iPIGBpc1ZhcmA6IHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgYSB2YXJpYW50IG9wZXJhdGlvbiBmZWF0dXJlLCB3aGljaFxyXG4gKiBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGxpa2UgbmVnYXRpb24sIGdsb2JhbCwgYW5kIHNob3J0LWxpdmVkLlxyXG4gKiAtIPCflKUgYGZlYXR1cmVzQ2hhbmdlYCAoYEZlYXR1cmVbXWApOiBlbWl0dGVkIHdoZW4gZmVhdHVyZXMgaGF2ZSBjaGFuZ2VkLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtZmVhdHVyZS1zZXQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTmdUb29sc01vZHVsZSxcclxuICAgIEZlYXR1cmVFZGl0b3JDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZVNldEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuICBwcml2YXRlIF9lZGl0ZWRGZWF0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIFBPTElDSUVTID0gWydNJywgJ1MnLCAnU0YnXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGUgZmVhdHVyZXMgYXJlIHZhcmlhYmxlIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzVmFyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0VmFsdWVzOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGhyZXNob2xkIGF0IHdoaWNoIHRoZSBmZWF0dXJlcyBmaWx0ZXIgc2hvdWxkIGJlY29tZSB2aXNpYmxlLlxyXG4gICAqIElmIHNldCB0byAwLCB0aGUgZmlsdGVyIGlzIGFsd2F5cyB2aXNpYmxlOyBpZiBzZXQgdG8gLTEsIGl0IGlzIGFsd2F5c1xyXG4gICAqIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAgICogaXMgZ3JlYXRlciB0aGFuIHRoZSB0aHJlc2hvbGQuIERlZmF1bHQgaXMgNS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaWx0ZXJUaHJlc2hvbGQgPSA1O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZXMgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdHVyZXMoKTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlcztcclxuICB9XHJcbiAgcHVibGljIHNldCBmZWF0dXJlcyh2YWx1ZTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXMgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmFwcGx5RmVhdHVyZUZpbHRlcih0aGlzLmZpbHRlci52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGZlYXR1cmVzIGNoYW5nZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXT4oKTtcclxuXHJcbiAgcHVibGljIGVkaXRlZEZlYXR1cmU/OiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZTtcclxuXHJcbiAgLy8gZmlsdGVyXHJcbiAgcHVibGljIGZpbHRlcjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGZpbHRlcmVkRmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZEZlYXR1cmVzID0gW107XHJcbiAgICB0aGlzLmZpbHRlciA9IGZvcm1CdWlsZGVyLmNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGZWF0dXJlRmlsdGVyKG5hbWU/OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcmVkRmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT4ge1xyXG4gICAgICByZXR1cm4gIW5hbWUgfHwgZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViID0gdGhpcy5maWx0ZXIudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRmVhdHVyZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgc2V0UG9saWN5OiBGZWF0dXJlU2V0UG9saWN5Lm11bHRpcGxlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSBmZWF0dXJlO1xyXG4gICAgdGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuICAgIGZlYXR1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmZlYXR1cmVzQ2hhbmdlLmVtaXQodGhpcy5mZWF0dXJlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25GZWF0dXJlQ2hhbmdlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gZmVhdHVyZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGZlYXR1cmVzW2ldLm5hbWUgPT09IGZlYXR1cmUubmFtZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZlYXR1cmUuc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZSB8fFxyXG4gICAgICAgICAgZmVhdHVyZXNbaV0uc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZmVhdHVyZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmZWF0dXJlcy5zcGxpY2UodGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4LCAxLCBmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZmVhdHVyZXNDaGFuZ2UuZW1pdCh0aGlzLmZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZlYXR1cmVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gZmlsdGVyIC0tPlxyXG4gICAgQGlmIChmaWx0ZXJUaHJlc2hvbGQgPT09IDAgfHwgZmVhdHVyZXMubGVuZ3RoID4gZmlsdGVyVGhyZXNob2xkKSB7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cImZpbHRlclwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJcIiAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlci5yZXNldCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJtYXQtd2FyblwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIGFkZCBmZWF0dXJlIGJ1dHRvbiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIG5ldyBmZWF0dXJlXCJcclxuICAgICAgKGNsaWNrKT1cImFkZEZlYXR1cmUoKVwiXHJcbiAgICAgIFtjbGFzcy5pbi1yb3ctYnV0dG9uXT1cIlxyXG4gICAgICAgIGZpbHRlclRocmVzaG9sZCA9PT0gMCB8fCBmZWF0dXJlcy5sZW5ndGggPiBmaWx0ZXJUaHJlc2hvbGRcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIGZlYXR1cmVcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGxpc3QgLS0+XHJcbiAgQGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcclxuICA8dGFibGU+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICA8dGg+ZmVhdHVyZTwvdGg+XHJcbiAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgICA8dGg+cG9saWN5PC90aD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRoPm5lZ2F0ZWQ8L3RoPlxyXG4gICAgICAgIDx0aD5nbG9iYWw8L3RoPlxyXG4gICAgICAgIDx0aD5zaG9ydC1saXZlZDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgQGZvciAoZmVhdHVyZSBvZiBmaWx0ZXJlZEZlYXR1cmVzOyB0cmFjayBmZWF0dXJlKSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJmaXQtd2lkdGhcIj5cclxuICAgICAgICAgIDwhLS0gZWRpdCAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGZlYXR1cmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZlYXR1cmUoZmVhdHVyZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGRlbGV0ZSAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgZmVhdHVyZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGZWF0dXJlKGZlYXR1cmUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLm5hbWUgfCBmbGF0TG9va3VwIDogZmVhdE5hbWVzIDogXCJpZFwiIDogXCJsYWJlbFwiXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPHNwYW4+e3sgZmVhdHVyZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgQGlmIChmZWF0VmFsdWVzKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLnZhbHVlIHwgZmxhdExvb2t1cCA6IGZlYXRWYWx1ZXNbZmVhdHVyZS5uYW1lXVxyXG4gICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBQT0xJQ0lFU1tmZWF0dXJlLnNldFBvbGljeV0gfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc05lZ2F0ZWQgPyBcInllc1wiIDogXCJub1wiIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc0dsb2JhbCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyAkYW55KGZlYXR1cmUpLmlzU2hvcnRMaXZlZCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIH1cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuICB9XHJcblxyXG4gIDwhLS0gZWRpdG9yIC0tPlxyXG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtkaXNhYmxlZF09XCIhZWRpdGVkRmVhdHVyZVwiIFtleHBhbmRlZF09XCJlZGl0ZWRGZWF0dXJlXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPHNwYW4+e3sgZWRpdGVkRmVhdHVyZT8ubmFtZSB8fCBcImZlYXR1cmVcIiB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGd2ZS1mZWF0dXJlLWVkaXRvclxyXG4gICAgICBbaXNWYXJdPVwiaXNWYXJcIlxyXG4gICAgICBbZmVhdE5hbWVzXT1cImZlYXROYW1lc1wiXHJcbiAgICAgIFtmZWF0VmFsdWVzXT1cImZlYXRWYWx1ZXNcIlxyXG4gICAgICBbZmVhdHVyZV09XCJlZGl0ZWRGZWF0dXJlXCJcclxuICAgICAgKGZlYXR1cmVDaGFuZ2UpPVwib25GZWF0dXJlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoZmVhdHVyZUNhbmNlbCk9XCJvbkZlYXR1cmVDYW5jZWwoKVwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -14,6 +14,23 @@ import * as i3 from "@angular/material/form-field";
|
|
|
14
14
|
import * as i4 from "@angular/material/icon";
|
|
15
15
|
import * as i5 from "@angular/material/input";
|
|
16
16
|
import * as i6 from "@myrmidon/ng-tools";
|
|
17
|
+
/**
|
|
18
|
+
* 🔑 `gve-feature-set-view`
|
|
19
|
+
*
|
|
20
|
+
* A component to display a list of features.
|
|
21
|
+
* Used by the chain result view component.
|
|
22
|
+
*
|
|
23
|
+
* - ▶️ `features` (`Feature[]`): the features to display.
|
|
24
|
+
* - ▶️ `featNames` (`LabeledId[]`): the list of feature names to display
|
|
25
|
+
* in the _name_ selection. This is used when you have a closed list of features.
|
|
26
|
+
* - ▶️ `featValues` (`FeatureMap`): the feature values map. When specified
|
|
27
|
+
* and the user selects a feature name present in the map keys, the corresponding
|
|
28
|
+
* values will be used to populate the value selection.
|
|
29
|
+
* - ▶️ `filterThreshold` (`number`): the threshold at which the features filter
|
|
30
|
+
* should become visible. If set to 0, the filter is always visible; if set to -1,
|
|
31
|
+
* it is always invisible; otherwise, it gets visible when the number of features
|
|
32
|
+
* is greater than the threshold. Default is 5.
|
|
33
|
+
*/
|
|
17
34
|
export class FeatureSetViewComponent {
|
|
18
35
|
/**
|
|
19
36
|
* The features.
|
|
@@ -32,9 +49,12 @@ export class FeatureSetViewComponent {
|
|
|
32
49
|
constructor(formBuilder) {
|
|
33
50
|
this._features = [];
|
|
34
51
|
/**
|
|
35
|
-
* The
|
|
52
|
+
* The threshold at which the features filter should become visible.
|
|
53
|
+
* If set to 0, the filter is always visible; if set to -1, it is always
|
|
54
|
+
* invisible; otherwise, it gets visible when the number of features
|
|
55
|
+
* is greater than the threshold. Default is 5.
|
|
36
56
|
*/
|
|
37
|
-
this.
|
|
57
|
+
this.filterThreshold = 5;
|
|
38
58
|
this.filteredFeatures = [];
|
|
39
59
|
this.filter = formBuilder.control(null);
|
|
40
60
|
}
|
|
@@ -54,10 +74,10 @@ export class FeatureSetViewComponent {
|
|
|
54
74
|
ngOnDestroy() {
|
|
55
75
|
this._sub?.unsubscribe();
|
|
56
76
|
}
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
58
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetViewComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: FeatureSetViewComponent, isStandalone: true, selector: "gve-feature-set-view", inputs: { features: "features", featNames: "featNames", featValues: "featValues", filterThreshold: "filterThreshold" }, ngImport: i0, template: "<div>\r\n <!-- filter -->\r\n <div>\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <div class=\"form-row\">\r\n <mat-form-field id=\"filter\">\r\n <mat-label>filter</mat-label>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <span>{{ filteredFeatures.length }}</span>\r\n </div>\r\n }\r\n\r\n <!-- list -->\r\n @if (filteredFeatures.length) {\r\n <table>\r\n <tbody>\r\n @for (feature of filteredFeatures; track $index) {\r\n <tr>\r\n <th>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </th>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse}th{text-align:left;background-color:#c8d9eb;color:#333;font-weight:400}th,td{border:1px solid silver;padding:4px}tr:nth-child(2n){background-color:#dfdfdf}#filter{width:7em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: NgToolsModule }, { kind: "pipe", type: i6.FlatLookupPipe, name: "flatLookup" }] }); }
|
|
59
79
|
}
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetViewComponent, decorators: [{
|
|
61
81
|
type: Component,
|
|
62
82
|
args: [{ selector: 'gve-feature-set-view', standalone: true, imports: [
|
|
63
83
|
CommonModule,
|
|
@@ -67,14 +87,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
67
87
|
MatIconModule,
|
|
68
88
|
MatInputModule,
|
|
69
89
|
NgToolsModule,
|
|
70
|
-
], template: "<div>\r\n <!-- filter -->\r\n <div>\r\n @if (
|
|
90
|
+
], template: "<div>\r\n <!-- filter -->\r\n <div>\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <div class=\"form-row\">\r\n <mat-form-field id=\"filter\">\r\n <mat-label>filter</mat-label>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <span>{{ filteredFeatures.length }}</span>\r\n </div>\r\n }\r\n\r\n <!-- list -->\r\n @if (filteredFeatures.length) {\r\n <table>\r\n <tbody>\r\n @for (feature of filteredFeatures; track $index) {\r\n <tr>\r\n <th>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </th>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse}th{text-align:left;background-color:#c8d9eb;color:#333;font-weight:400}th,td{border:1px solid silver;padding:4px}tr:nth-child(2n){background-color:#dfdfdf}#filter{width:7em}\n"] }]
|
|
71
91
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { features: [{
|
|
72
92
|
type: Input
|
|
73
93
|
}], featNames: [{
|
|
74
94
|
type: Input
|
|
75
95
|
}], featValues: [{
|
|
76
96
|
type: Input
|
|
77
|
-
}],
|
|
97
|
+
}], filterThreshold: [{
|
|
78
98
|
type: Input
|
|
79
99
|
}] } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9ndmUtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvZmVhdHVyZS1zZXQtdmlldy9mZWF0dXJlLXNldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC12aWV3L2ZlYXR1cmUtc2V0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUE0QixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7O0FBd0JuRCxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDOztPQUVHO0lBQ0gsSUFDVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBcUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQTJCRCxZQUFZLFdBQXdCO1FBM0M1QixjQUFTLEdBQW1DLEVBQUUsQ0FBQztRQWlDdkQ7O1dBRUc7UUFFSSxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUluQixxQkFBZ0IsR0FBbUMsRUFBRSxDQUFDO1FBRzNELElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEQsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7YUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9DLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0FsRVUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsc01DbENwQyx5akRBdURBLDZZRGhDSSxZQUFZLDhCQUNaLG1CQUFtQix5a0JBQ25CLGVBQWUsMklBQ2Ysa0JBQWtCLDJhQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsYUFBYTs7MkZBS0osdUJBQXVCO2tCQWZuQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTtxQkFDZDtnRkFZVSxRQUFRO3NCQURsQixLQUFLO2dCQWtCQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsS0FBSztnQkFPQyxjQUFjO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcblxyXG5pbXBvcnQgeyBOZ1Rvb2xzTW9kdWxlIH0gZnJvbSAnQG15cm1pZG9uL25nLXRvb2xzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBMYWJlbGVkSWQsXHJcbiAgT3BlcmF0aW9uRmVhdHVyZSxcclxufSBmcm9tICdAbXlybWlkb24vZ3ZlLXNuYXBzaG90LXZpZXcnO1xyXG5pbXBvcnQgeyBGZWF0dXJlTWFwIH0gZnJvbSAnLi4vZmVhdHVyZS1lZGl0b3IvZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3ZlLWZlYXR1cmUtc2V0LXZpZXcnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE5nVG9vbHNNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1zZXQtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZlYXR1cmUtc2V0LXZpZXcuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlU2V0Vmlld0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfc3ViPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2ZlYXR1cmVzOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBmZWF0dXJlcygpOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZlYXR1cmVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGZlYXR1cmVzKHZhbHVlOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10pIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlcyA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmVhdHVyZXMgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZpbHRlci5yZXNldCgpO1xyXG4gICAgdGhpcy5hcHBseUZlYXR1cmVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0VmFsdWVzOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWluaW11bSBjb3VudCBvZiBmZWF0dXJlcyByZXF1aXJlZCBmb3IgZmlsdGVyIHRvIGJlIHZpc2libGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbWluRmlsdGVyQ291bnQgPSA2O1xyXG5cclxuICAvLyBmaWx0ZXJcclxuICBwdWJsaWMgZmlsdGVyOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZmlsdGVyZWRGZWF0dXJlczogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xyXG4gICAgdGhpcy5maWx0ZXIgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZlYXR1cmVGaWx0ZXIobmFtZT86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyZWRGZWF0dXJlcyA9IHRoaXMuX2ZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT4ge1xyXG4gICAgICByZXR1cm4gIW5hbWUgfHwgZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViID0gdGhpcy5maWx0ZXIudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmFwcGx5RmVhdHVyZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDwhLS0gZmlsdGVyIC0tPlxyXG4gIDxkaXY+XHJcbiAgICBAaWYgKGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlcy5sZW5ndGggPj0gbWluRmlsdGVyQ291bnQpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgaWQ9XCJmaWx0ZXJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPmZpbHRlcjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cImZpbHRlclwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJcIiAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIChjbGljayk9XCJmaWx0ZXIucmVzZXQoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZXNldCBmaWx0ZXInXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCIgIGNsYXNzPVwibWF0LXdhcm5cIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgPHNwYW4+e3sgZmlsdGVyZWRGZWF0dXJlcy5sZW5ndGggfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIGxpc3QgLS0+XHJcbiAgICBAaWYgKGZpbHRlcmVkRmVhdHVyZXMubGVuZ3RoKSB7XHJcbiAgICA8dGFibGU+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgICBAZm9yIChmZWF0dXJlIG9mIGZpbHRlcmVkRmVhdHVyZXM7IHRyYWNrIGZlYXR1cmUpIHtcclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgIEBpZiAoZmVhdE5hbWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgICBmZWF0dXJlLm5hbWUgfCBmbGF0TG9va3VwIDogZmVhdE5hbWVzIDogXCJpZFwiIDogXCJsYWJlbFwiXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHNwYW4+e3sgZmVhdHVyZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICBAaWYgKGZlYXRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgICBmZWF0dXJlLnZhbHVlIHwgZmxhdExvb2t1cCA6IGZlYXRWYWx1ZXNbZmVhdHVyZS5uYW1lXVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9ndmUtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvZmVhdHVyZS1zZXQtdmlldy9mZWF0dXJlLXNldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC12aWV3L2ZlYXR1cmUtc2V0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUE0QixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7O0FBU25EOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBZ0JILE1BQU0sT0FBTyx1QkFBdUI7SUFJbEM7O09BRUc7SUFDSCxJQUNXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFXLFFBQVEsQ0FBQyxLQUFxQztRQUN2RCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBOEJELFlBQVksV0FBd0I7UUE5QzVCLGNBQVMsR0FBbUMsRUFBRSxDQUFDO1FBaUN2RDs7Ozs7V0FLRztRQUVJLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBSXBCLHFCQUFnQixHQUFtQyxFQUFFLENBQUM7UUFHM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFvQjtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4RCxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTthQUNqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0MsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQXJFVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3TUNuRHBDLDhqREF1REEsNllEZkksWUFBWSw4QkFDWixtQkFBbUIseWtCQUNuQixlQUFlLDJJQUNmLGtCQUFrQiwyYUFDbEIsYUFBYSxtTEFDYixjQUFjLDBXQUNkLGFBQWE7OzJGQUtKLHVCQUF1QjtrQkFmbkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7cUJBQ2Q7Z0ZBWVUsUUFBUTtzQkFEbEIsS0FBSztnQkFrQkMsU0FBUztzQkFEZixLQUFLO2dCQVNDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBVUMsZUFBZTtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5cclxuaW1wb3J0IHsgTmdUb29sc01vZHVsZSB9IGZyb20gJ0BteXJtaWRvbi9uZy10b29scyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmUsXHJcbiAgTGFiZWxlZElkLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHsgRmVhdHVyZU1hcCB9IGZyb20gJy4uL2ZlYXR1cmUtZWRpdG9yL2ZlYXR1cmUtZWRpdG9yLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICog8J+UkSBgZ3ZlLWZlYXR1cmUtc2V0LXZpZXdgXHJcbiAqXHJcbiAqIEEgY29tcG9uZW50IHRvIGRpc3BsYXkgYSBsaXN0IG9mIGZlYXR1cmVzLlxyXG4gKiBVc2VkIGJ5IHRoZSBjaGFpbiByZXN1bHQgdmlldyBjb21wb25lbnQuXHJcbiAqXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlc2AgKGBGZWF0dXJlW11gKTogdGhlIGZlYXR1cmVzIHRvIGRpc3BsYXkuXHJcbiAqIC0g4pa277iPIGBmZWF0TmFtZXNgIChgTGFiZWxlZElkW11gKTogdGhlIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcyB0byBkaXNwbGF5XHJcbiAqIGluIHRoZSBfbmFtZV8gc2VsZWN0aW9uLiBUaGlzIGlzIHVzZWQgd2hlbiB5b3UgaGF2ZSBhIGNsb3NlZCBsaXN0IG9mIGZlYXR1cmVzLlxyXG4gKiAtIOKWtu+4jyBgZmVhdFZhbHVlc2AgKGBGZWF0dXJlTWFwYCk6IHRoZSBmZWF0dXJlIHZhbHVlcyBtYXAuIFdoZW4gc3BlY2lmaWVkXHJcbiAqIGFuZCB0aGUgdXNlciBzZWxlY3RzIGEgZmVhdHVyZSBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZ1xyXG4gKiB2YWx1ZXMgd2lsbCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSB2YWx1ZSBzZWxlY3Rpb24uXHJcbiAqIC0g4pa277iPIGBmaWx0ZXJUaHJlc2hvbGRgIChgbnVtYmVyYCk6IHRoZSB0aHJlc2hvbGQgYXQgd2hpY2ggdGhlIGZlYXR1cmVzIGZpbHRlclxyXG4gKiBzaG91bGQgYmVjb21lIHZpc2libGUuIElmIHNldCB0byAwLCB0aGUgZmlsdGVyIGlzIGFsd2F5cyB2aXNpYmxlOyBpZiBzZXQgdG8gLTEsXHJcbiAqIGl0IGlzIGFsd2F5cyBpbnZpc2libGU7IG90aGVyd2lzZSwgaXQgZ2V0cyB2aXNpYmxlIHdoZW4gdGhlIG51bWJlciBvZiBmZWF0dXJlc1xyXG4gKiBpcyBncmVhdGVyIHRoYW4gdGhlIHRocmVzaG9sZC4gRGVmYXVsdCBpcyA1LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtZmVhdHVyZS1zZXQtdmlldycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTmdUb29sc01vZHVsZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLXNldC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1zZXQtdmlldy5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVTZXRWaWV3Q29tcG9uZW50IHtcclxuICBwcml2YXRlIF9zdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGZlYXR1cmVzKCk6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmVhdHVyZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZmVhdHVyZXModmFsdWU6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXSkge1xyXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZmlsdGVyLnJlc2V0KCk7XHJcbiAgICB0aGlzLmFwcGx5RmVhdHVyZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcyB0byBkaXNwbGF5IGluIHRoZSBuYW1lIHNlbGVjdGlvbi5cclxuICAgKiBUaGlzIGlzIHVzZWQgd2hlbiB5b3UgaGF2ZSBhIGNsb3NlZCBsaXN0IG9mIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZlYXROYW1lczogTGFiZWxlZElkW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBmZWF0dXJlIHZhbHVlcyBtYXAuIFdoZW4gc3BlY2lmaWVkIGFuZCB0aGUgdXNlciBzZWxlY3RzIGEgZmVhdHVyZVxyXG4gICAqIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyB3aWxsIGJlIHVzZWRcclxuICAgKiB0byBwb3B1bGF0ZSB0aGUgdmFsdWUgc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZlYXRWYWx1ZXM6IEZlYXR1cmVNYXAgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB0aHJlc2hvbGQgYXQgd2hpY2ggdGhlIGZlYXR1cmVzIGZpbHRlciBzaG91bGQgYmVjb21lIHZpc2libGUuXHJcbiAgICogSWYgc2V0IHRvIDAsIHRoZSBmaWx0ZXIgaXMgYWx3YXlzIHZpc2libGU7IGlmIHNldCB0byAtMSwgaXQgaXMgYWx3YXlzXHJcbiAgICogaW52aXNpYmxlOyBvdGhlcndpc2UsIGl0IGdldHMgdmlzaWJsZSB3aGVuIHRoZSBudW1iZXIgb2YgZmVhdHVyZXNcclxuICAgKiBpcyBncmVhdGVyIHRoYW4gdGhlIHRocmVzaG9sZC4gRGVmYXVsdCBpcyA1LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZpbHRlclRocmVzaG9sZCA9IDU7XHJcblxyXG4gIC8vIGZpbHRlclxyXG4gIHB1YmxpYyBmaWx0ZXI6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBmaWx0ZXJlZEZlYXR1cmVzOiBGZWF0dXJlW10gfCBPcGVyYXRpb25GZWF0dXJlW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RmVhdHVyZUZpbHRlcihuYW1lPzogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZEZlYXR1cmVzID0gdGhpcy5fZmVhdHVyZXMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgIHJldHVybiAhbmFtZSB8fCBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWIgPSB0aGlzLmZpbHRlci52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVGaWx0ZXIodmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPCEtLSBmaWx0ZXIgLS0+XHJcbiAgPGRpdj5cclxuICAgIEBpZiAoZmlsdGVyVGhyZXNob2xkID09PSAwIHx8IGZlYXR1cmVzLmxlbmd0aCA+IGZpbHRlclRocmVzaG9sZCkge1xyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBpZD1cImZpbHRlclwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+ZmlsdGVyPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiZmlsdGVyXCIgW2Zvcm1Db250cm9sXT1cImZpbHRlclwiIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlci5yZXNldCgpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Jlc2V0IGZpbHRlcidcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIiAgY2xhc3M9XCJtYXQtd2FyblwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8c3Bhbj57eyBmaWx0ZXJlZEZlYXR1cmVzLmxlbmd0aCB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gbGlzdCAtLT5cclxuICAgIEBpZiAoZmlsdGVyZWRGZWF0dXJlcy5sZW5ndGgpIHtcclxuICAgIDx0YWJsZT5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIEBmb3IgKGZlYXR1cmUgb2YgZmlsdGVyZWRGZWF0dXJlczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgZmVhdHVyZS5uYW1lIHwgZmxhdExvb2t1cCA6IGZlYXROYW1lcyA6IFwiaWRcIiA6IFwibGFiZWxcIlxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgQGlmIChmZWF0VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgZmVhdHVyZS52YWx1ZSB8IGZsYXRMb29rdXAgOiBmZWF0VmFsdWVzW2ZlYXR1cmUubmFtZV1cclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBmZWF0dXJlLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -18,7 +18,21 @@ import * as i6 from "@angular/material/input";
|
|
|
18
18
|
import * as i7 from "@angular/material/select";
|
|
19
19
|
import * as i8 from "@angular/material/core";
|
|
20
20
|
import * as i9 from "@angular/material/tooltip";
|
|
21
|
+
/**
|
|
22
|
+
* 🔑 `gve-ln-heights-editor`
|
|
23
|
+
*
|
|
24
|
+
* A component to edit line heights.
|
|
25
|
+
* Used by the `gve-snapshot-editor` component.
|
|
26
|
+
*
|
|
27
|
+
* - ▶️ `lineCount` (`number`): the number of lines.
|
|
28
|
+
* - ▶️ `heights` (`Record<number, number>`): the line heights.
|
|
29
|
+
* - 🔥 `heightsChange` (`EventEmitter<Record<number, number>>`): the event
|
|
30
|
+
* emitted when the heights change.
|
|
31
|
+
*/
|
|
21
32
|
export class LnHeightsEditorComponent {
|
|
33
|
+
/**
|
|
34
|
+
* The total number of lines in the text.
|
|
35
|
+
*/
|
|
22
36
|
get lineCount() {
|
|
23
37
|
return this._lineCount;
|
|
24
38
|
}
|
|
@@ -28,6 +42,10 @@ export class LnHeightsEditorComponent {
|
|
|
28
42
|
this._lineCount = value;
|
|
29
43
|
this.lineNumbers = Array.from({ length: value }, (_, i) => i + 1);
|
|
30
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The heights map of the lines. Each key is a line number and the value is
|
|
47
|
+
* the height of the line.
|
|
48
|
+
*/
|
|
31
49
|
get heights() {
|
|
32
50
|
return this._heights;
|
|
33
51
|
}
|
|
@@ -38,20 +56,33 @@ export class LnHeightsEditorComponent {
|
|
|
38
56
|
}
|
|
39
57
|
constructor(formBuilder) {
|
|
40
58
|
this._lineCount = 0;
|
|
59
|
+
/**
|
|
60
|
+
* The event emitted when the heights change.
|
|
61
|
+
*/
|
|
41
62
|
this.heightsChange = new EventEmitter();
|
|
42
63
|
this.lineNumbers = [];
|
|
43
64
|
this.lineNumber = formBuilder.control(0, { nonNullable: true });
|
|
44
65
|
this.height = formBuilder.control(0, { nonNullable: true });
|
|
45
66
|
}
|
|
67
|
+
pruneHeights() {
|
|
68
|
+
// remove all the heigths with value=0
|
|
69
|
+
this._heights = Object.fromEntries(Object.entries(this._heights || {}).filter(([_, v]) => v !== 0));
|
|
70
|
+
// if heights are now empty, set to undefined
|
|
71
|
+
if (Object.keys(this._heights).length === 0) {
|
|
72
|
+
this._heights = undefined;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
46
75
|
ngOnInit() {
|
|
47
76
|
this._subs = [];
|
|
48
77
|
// update heights[ln] when height changes and emit heightsChange
|
|
49
78
|
this._subs.push(this.height.valueChanges
|
|
50
79
|
.pipe(distinctUntilChanged(), debounceTime(200))
|
|
51
80
|
.subscribe((value) => {
|
|
52
|
-
if (!this._heights)
|
|
53
|
-
|
|
81
|
+
if (!this._heights) {
|
|
82
|
+
this._heights = {};
|
|
83
|
+
}
|
|
54
84
|
this._heights[this.lineNumber.value] = value;
|
|
85
|
+
this.pruneHeights();
|
|
55
86
|
this.heightsChange.emit(this._heights);
|
|
56
87
|
}));
|
|
57
88
|
// update height when line number changes
|
|
@@ -70,10 +101,10 @@ export class LnHeightsEditorComponent {
|
|
|
70
101
|
this._heights = undefined;
|
|
71
102
|
this.heightsChange.emit(undefined);
|
|
72
103
|
}
|
|
73
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
74
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
104
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LnHeightsEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
105
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: LnHeightsEditorComponent, isStandalone: true, selector: "gve-ln-heights-editor", inputs: { lineCount: "lineCount", heights: "heights" }, outputs: { heightsChange: "heightsChange" }, ngImport: i0, template: "@if (lineNumbers.length) {\r\n<div class=\"form-row\">\r\n <!-- line number -->\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>line</mat-label>\r\n <mat-select [formControl]=\"lineNumber\">\r\n <mat-option *ngFor=\"let n of lineNumbers\" [value]=\"n\">\r\n {{ n }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- height -->\r\n @if (lineNumber.value) {\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>height</mat-label>\r\n <input matInput type=\"number\" [formControl]=\"height\" min=\"0\" />\r\n </mat-form-field>\r\n }\r\n\r\n <!-- reset button -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"reset()\"\r\n matTooltip=\"Remove all the heights\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n</div>\r\n}\r\n", styles: [".input-nr{width:5em}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
75
106
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LnHeightsEditorComponent, decorators: [{
|
|
77
108
|
type: Component,
|
|
78
109
|
args: [{ selector: 'gve-ln-heights-editor', standalone: true, imports: [
|
|
79
110
|
CommonModule,
|
|
@@ -84,7 +115,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
84
115
|
MatInputModule,
|
|
85
116
|
MatSelectModule,
|
|
86
117
|
MatTooltipModule,
|
|
87
|
-
], template: "@if (lineNumbers.length) {\r\n<div class=\"form-row\">\r\n <!-- line number -->\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>line</mat-label>\r\n <mat-select [formControl]=\"lineNumber\">\r\n <mat-option *ngFor=\"let n of lineNumbers\" [value]=\"n\">\r\n {{ n }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- height -->\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>height</mat-label>\r\n <input matInput type=\"number\" [formControl]=\"height\" min=\"0\" />\r\n </mat-form-field>\r\n\r\n <!-- reset button -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"reset()\"\r\n matTooltip=\"Remove all the heights\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n</div>\r\n}\r\n", styles: [".input-nr{width:5em}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"] }]
|
|
118
|
+
], template: "@if (lineNumbers.length) {\r\n<div class=\"form-row\">\r\n <!-- line number -->\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>line</mat-label>\r\n <mat-select [formControl]=\"lineNumber\">\r\n <mat-option *ngFor=\"let n of lineNumbers\" [value]=\"n\">\r\n {{ n }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- height -->\r\n @if (lineNumber.value) {\r\n <mat-form-field class=\"input-nr\">\r\n <mat-label>height</mat-label>\r\n <input matInput type=\"number\" [formControl]=\"height\" min=\"0\" />\r\n </mat-form-field>\r\n }\r\n\r\n <!-- reset button -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"reset()\"\r\n matTooltip=\"Remove all the heights\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n</div>\r\n}\r\n", styles: [".input-nr{width:5em}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"] }]
|
|
88
119
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { lineCount: [{
|
|
89
120
|
type: Input
|
|
90
121
|
}], heights: [{
|
|
@@ -92,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
92
123
|
}], heightsChange: [{
|
|
93
124
|
type: Output
|
|
94
125
|
}] } });
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG4taGVpZ2h0cy1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2xuLWhlaWdodHMtZWRpdG9yL2xuLWhlaWdodHMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9sbi1oZWlnaHRzLWVkaXRvci9sbi1oZWlnaHRzLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7OztBQWtCN0QsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQyxJQUNXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLFNBQVMsQ0FBQyxLQUFhO1FBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQ1csT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQVcsT0FBTyxDQUFDLEtBQWdEO1FBQ2pFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUM7SUFDckMsQ0FBQztJQVNELFlBQVksV0FBd0I7UUEvQjVCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUF5QmYsa0JBQWEsR0FFekIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTthQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0MsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVk7YUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9DLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OEdBdEVVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHNMQ25DckMsMDBCQThCQSwwS0RQSSxZQUFZLDJKQUNaLG1CQUFtQixzNkJBQ25CLGVBQWUsMklBQ2Ysa0JBQWtCLDBTQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSxtckJBQ2YsZ0JBQWdCOzsyRkFLUCx3QkFBd0I7a0JBaEJwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCO2dGQWFVLFNBQVM7c0JBRG5CLEtBQUs7Z0JBV0ssT0FBTztzQkFEakIsS0FBSztnQkFVVSxhQUFhO3NCQUQ1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3ZlLWxuLWhlaWdodHMtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xuLWhlaWdodHMtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbG4taGVpZ2h0cy1lZGl0b3IuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMbkhlaWdodHNFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfc3Vicz86IFN1YnNjcmlwdGlvbltdO1xyXG4gIHByaXZhdGUgX2hlaWdodHM/OiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+O1xyXG4gIHByaXZhdGUgX2xpbmVDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIGxpbmVOdW1iZXI6IEZvcm1Db250cm9sPG51bWJlcj47XHJcbiAgcHVibGljIGhlaWdodDogRm9ybUNvbnRyb2w8bnVtYmVyPjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xpbmVDb3VudDtcclxuICB9XHJcbiAgcHVibGljIHNldCBsaW5lQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX2xpbmVDb3VudCA9PT0gdmFsdWUpIHJldHVybjtcclxuICAgIHRoaXMuX2xpbmVDb3VudCA9IHZhbHVlO1xyXG4gICAgdGhpcy5saW5lTnVtYmVycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlIH0sIChfLCBpKSA9PiBpICsgMSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaGVpZ2h0cygpOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9oZWlnaHRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGhlaWdodHModmFsdWU6IFJlY29yZDxudW1iZXIsIG51bWJlcj4gfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5faGVpZ2h0cyA9PT0gdmFsdWUpIHJldHVybjtcclxuICAgIHRoaXMuX2hlaWdodHMgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgaGVpZ2h0c0NoYW5nZTogRXZlbnRFbWl0dGVyPFxyXG4gICAgUmVjb3JkPG51bWJlciwgbnVtYmVyPiB8IHVuZGVmaW5lZFxyXG4gID4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBsaW5lTnVtYmVyczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmxpbmVOdW1iZXIgPSBmb3JtQnVpbGRlci5jb250cm9sKDAsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmhlaWdodCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woMCwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMgPSBbXTtcclxuICAgIC8vIHVwZGF0ZSBoZWlnaHRzW2xuXSB3aGVuIGhlaWdodCBjaGFuZ2VzIGFuZCBlbWl0IGhlaWdodHNDaGFuZ2VcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5oZWlnaHQudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDIwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5faGVpZ2h0cykgcmV0dXJuO1xyXG4gICAgICAgICAgdGhpcy5faGVpZ2h0c1t0aGlzLmxpbmVOdW1iZXIudmFsdWVdID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmhlaWdodHNDaGFuZ2UuZW1pdCh0aGlzLl9oZWlnaHRzKTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgaGVpZ2h0IHdoZW4gbGluZSBudW1iZXIgY2hhbmdlc1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLmxpbmVOdW1iZXIudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDIwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5faGVpZ2h0cykgcmV0dXJuO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQuc2V0VmFsdWUodGhpcy5faGVpZ2h0c1t2YWx1ZV0gfHwgMCk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzPy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hlaWdodHMgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmhlaWdodHNDaGFuZ2UuZW1pdCh1bmRlZmluZWQpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGxpbmVOdW1iZXJzLmxlbmd0aCkge1xyXG48ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICA8IS0tIGxpbmUgbnVtYmVyIC0tPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LW5yXCI+XHJcbiAgICA8bWF0LWxhYmVsPmxpbmU8L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJsaW5lTnVtYmVyXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBuIG9mIGxpbmVOdW1iZXJzXCIgW3ZhbHVlXT1cIm5cIj5cclxuICAgICAgICB7eyBuIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8IS0tIGhlaWdodCAtLT5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnB1dC1uclwiPlxyXG4gICAgPG1hdC1sYWJlbD5oZWlnaHQ8L21hdC1sYWJlbD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Zvcm1Db250cm9sXT1cImhlaWdodFwiIG1pbj1cIjBcIiAvPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDwhLS0gcmVzZXQgYnV0dG9uIC0tPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgKGNsaWNrKT1cInJlc2V0KClcIlxyXG4gICAgbWF0VG9vbHRpcD1cIlJlbW92ZSBhbGwgdGhlIGhlaWdodHNcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+Y2xlYXI8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG4taGVpZ2h0cy1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2xuLWhlaWdodHMtZWRpdG9yL2xuLWhlaWdodHMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9sbi1oZWlnaHRzLWVkaXRvci9sbi1oZWlnaHRzLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7OztBQUU3RDs7Ozs7Ozs7OztHQVVHO0FBaUJILE1BQU0sT0FBTyx3QkFBd0I7SUFRbkM7O09BRUc7SUFDSCxJQUNXLFNBQVM7UUFD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QyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OEdBOUZVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHNMQzlDckMsKzJCQWdDQSwwS0RFSSxZQUFZLDJKQUNaLG1CQUFtQixzNkJBQ25CLGVBQWUsMklBQ2Ysa0JBQWtCLDBTQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSxtckJBQ2YsZ0JBQWdCOzsyRkFLUCx3QkFBd0I7a0JBaEJwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCO2dGQWdCVSxTQUFTO3NCQURuQixLQUFLO2dCQWVLLE9BQU87c0JBRGpCLEtBQUs7Z0JBYVUsYUFBYTtzQkFENUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG4vKipcclxuICog8J+UkSBgZ3ZlLWxuLWhlaWdodHMtZWRpdG9yYFxyXG4gKlxyXG4gKiBBIGNvbXBvbmVudCB0byBlZGl0IGxpbmUgaGVpZ2h0cy5cclxuICogVXNlZCBieSB0aGUgYGd2ZS1zbmFwc2hvdC1lZGl0b3JgIGNvbXBvbmVudC5cclxuICpcclxuICogLSDilrbvuI8gYGxpbmVDb3VudGAgKGBudW1iZXJgKTogdGhlIG51bWJlciBvZiBsaW5lcy5cclxuICogLSDilrbvuI8gYGhlaWdodHNgIChgUmVjb3JkPG51bWJlciwgbnVtYmVyPmApOiB0aGUgbGluZSBoZWlnaHRzLlxyXG4gKiAtIPCflKUgYGhlaWdodHNDaGFuZ2VgIChgRXZlbnRFbWl0dGVyPFJlY29yZDxudW1iZXIsIG51bWJlcj4+YCk6IHRoZSBldmVudFxyXG4gKiBlbWl0dGVkIHdoZW4gdGhlIGhlaWdodHMgY2hhbmdlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtbG4taGVpZ2h0cy1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG4taGVpZ2h0cy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9sbi1oZWlnaHRzLWVkaXRvci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExuSGVpZ2h0c0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWJzPzogU3Vic2NyaXB0aW9uW107XHJcbiAgcHJpdmF0ZSBfaGVpZ2h0cz86IFJlY29yZDxudW1iZXIsIG51bWJlcj47XHJcbiAgcHJpdmF0ZSBfbGluZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBwdWJsaWMgbGluZU51bWJlcjogRm9ybUNvbnRyb2w8bnVtYmVyPjtcclxuICBwdWJsaWMgaGVpZ2h0OiBGb3JtQ29udHJvbDxudW1iZXI+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSB0ZXh0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBsaW5lQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9saW5lQ291bnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgbGluZUNvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9saW5lQ291bnQgPT09IHZhbHVlKSByZXR1cm47XHJcbiAgICB0aGlzLl9saW5lQ291bnQgPSB2YWx1ZTtcclxuICAgIHRoaXMubGluZU51bWJlcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZSB9LCAoXywgaSkgPT4gaSArIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGhlaWdodHMgbWFwIG9mIHRoZSBsaW5lcy4gRWFjaCBrZXkgaXMgYSBsaW5lIG51bWJlciBhbmQgdGhlIHZhbHVlIGlzXHJcbiAgICogdGhlIGhlaWdodCBvZiB0aGUgbGluZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaGVpZ2h0cygpOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9oZWlnaHRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGhlaWdodHModmFsdWU6IFJlY29yZDxudW1iZXIsIG51bWJlcj4gfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5faGVpZ2h0cyA9PT0gdmFsdWUpIHJldHVybjtcclxuICAgIHRoaXMuX2hlaWdodHMgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBoZWlnaHRzIGNoYW5nZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgaGVpZ2h0c0NoYW5nZTogRXZlbnRFbWl0dGVyPFxyXG4gICAgUmVjb3JkPG51bWJlciwgbnVtYmVyPiB8IHVuZGVmaW5lZFxyXG4gID4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBsaW5lTnVtYmVyczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmxpbmVOdW1iZXIgPSBmb3JtQnVpbGRlci5jb250cm9sKDAsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmhlaWdodCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woMCwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJ1bmVIZWlnaHRzKCk6IHZvaWQge1xyXG4gICAgLy8gcmVtb3ZlIGFsbCB0aGUgaGVpZ3RocyB3aXRoIHZhbHVlPTBcclxuICAgIHRoaXMuX2hlaWdodHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2hlaWdodHMgfHwge30pLmZpbHRlcigoW18sIHZdKSA9PiB2ICE9PSAwKVxyXG4gICAgKTtcclxuICAgIC8vIGlmIGhlaWdodHMgYXJlIG5vdyBlbXB0eSwgc2V0IHRvIHVuZGVmaW5lZFxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX2hlaWdodHMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLl9oZWlnaHRzID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3VicyA9IFtdO1xyXG4gICAgLy8gdXBkYXRlIGhlaWdodHNbbG5dIHdoZW4gaGVpZ2h0IGNoYW5nZXMgYW5kIGVtaXQgaGVpZ2h0c0NoYW5nZVxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLmhlaWdodC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMjAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9oZWlnaHRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodHMgPSB7fTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2hlaWdodHNbdGhpcy5saW5lTnVtYmVyLnZhbHVlXSA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wcnVuZUhlaWdodHMoKTtcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0c0NoYW5nZS5lbWl0KHRoaXMuX2hlaWdodHMpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBoZWlnaHQgd2hlbiBsaW5lIG51bWJlciBjaGFuZ2VzXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMubGluZU51bWJlci52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMjAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9oZWlnaHRzKSByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLmhlaWdodC5zZXRWYWx1ZSh0aGlzLl9oZWlnaHRzW3ZhbHVlXSB8fCAwKTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnM/LmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGVpZ2h0cyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuaGVpZ2h0c0NoYW5nZS5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAobGluZU51bWJlcnMubGVuZ3RoKSB7XHJcbjxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gIDwhLS0gbGluZSBudW1iZXIgLS0+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5wdXQtbnJcIj5cclxuICAgIDxtYXQtbGFiZWw+bGluZTwvbWF0LWxhYmVsPlxyXG4gICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cImxpbmVOdW1iZXJcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG4gb2YgbGluZU51bWJlcnNcIiBbdmFsdWVdPVwiblwiPlxyXG4gICAgICAgIHt7IG4gfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDwhLS0gaGVpZ2h0IC0tPlxyXG4gIEBpZiAobGluZU51bWJlci52YWx1ZSkge1xyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LW5yXCI+XHJcbiAgICA8bWF0LWxhYmVsPmhlaWdodDwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwiaGVpZ2h0XCIgbWluPVwiMFwiIC8+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuICB9XHJcblxyXG4gIDwhLS0gcmVzZXQgYnV0dG9uIC0tPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgKGNsaWNrKT1cInJlc2V0KClcIlxyXG4gICAgbWF0VG9vbHRpcD1cIlJlbW92ZSBhbGwgdGhlIGhlaWdodHNcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+Y2xlYXI8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
|