@elderbyte/ngx-starter 13.6.0 → 13.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/common/utils/collection-util.mjs +4 -1
- package/esm2020/lib/components/select/auto/elder-auto-select-first.directive.mjs +77 -0
- package/esm2020/lib/components/select/auto/elder-select-first-util.mjs +62 -0
- package/esm2020/lib/components/select/elder-select/elder-select.component.mjs +14 -9
- package/esm2020/lib/components/select/elder-select-on-tab.directive.mjs +104 -0
- package/esm2020/lib/components/select/elder-select.module.mjs +11 -11
- package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +103 -39
- package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +13 -13
- package/fesm2015/elderbyte-ngx-starter.mjs +226 -144
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +226 -144
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/utils/collection-util.d.ts +1 -0
- package/lib/components/select/{auto-select-first.directive.d.ts → auto/elder-auto-select-first.directive.d.ts} +4 -13
- package/lib/components/select/auto/elder-select-first-util.d.ts +22 -0
- package/lib/components/select/elder-select/elder-select.component.d.ts +11 -1
- package/lib/components/select/{select-on-tab.directive.d.ts → elder-select-on-tab.directive.d.ts} +3 -3
- package/lib/components/select/elder-select.module.d.ts +5 -5
- package/lib/components/select/multi/elder-multi-select-base.d.ts +39 -15
- package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts +11 -11
- package/package.json +1 -1
- package/esm2020/lib/components/select/auto-select-first.directive.mjs +0 -126
- package/esm2020/lib/components/select/select-on-tab.directive.mjs +0 -104
|
@@ -16,7 +16,7 @@ import * as i7 from "@angular/material/input";
|
|
|
16
16
|
import * as i8 from "@angular/material/autocomplete";
|
|
17
17
|
import * as i9 from "../../../input/autocomplete/elder-autocomplete.directive";
|
|
18
18
|
import * as i10 from "@ngx-translate/core";
|
|
19
|
-
class
|
|
19
|
+
class SelectChip {
|
|
20
20
|
constructor(value, displayText, color, removeable) {
|
|
21
21
|
this.value = value;
|
|
22
22
|
this.displayText = displayText;
|
|
@@ -41,13 +41,13 @@ export class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
|
|
|
41
41
|
this.chipColorResolver$ = new BehaviorSubject((value) => undefined);
|
|
42
42
|
this.selectable = true;
|
|
43
43
|
this.allowRemove = true;
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
44
|
+
this.selectChips$ = combineLatest([
|
|
45
|
+
this.entities$,
|
|
46
46
|
this.displayPropertyResolver$,
|
|
47
47
|
this.chipColorResolver$
|
|
48
48
|
]).pipe(map(([values, dPR, cCR]) => {
|
|
49
49
|
if (values) {
|
|
50
|
-
return values.map(v => new
|
|
50
|
+
return values.map(v => new SelectChip(v, dPR(v), cCR(v), this.allowRemove));
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
return [];
|
|
@@ -116,19 +116,19 @@ export class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
addLabels(labels) {
|
|
119
|
-
const current = this.
|
|
119
|
+
const current = this.entities ? this.entities : [];
|
|
120
120
|
this.replaceWith([...current, ...labels]);
|
|
121
121
|
}
|
|
122
122
|
addLabel(label) {
|
|
123
123
|
this.addLabels([label]);
|
|
124
124
|
}
|
|
125
125
|
removeLabel(toRemove) {
|
|
126
|
-
const remaining = this.
|
|
126
|
+
const remaining = this.entities
|
|
127
127
|
.filter(l => !this.isEqual(l, toRemove));
|
|
128
128
|
this.replaceWith(remaining);
|
|
129
129
|
}
|
|
130
|
-
replaceWith(
|
|
131
|
-
this.
|
|
130
|
+
replaceWith(entities) {
|
|
131
|
+
this.updateValueByEntities(entities);
|
|
132
132
|
}
|
|
133
133
|
/***************************************************************************
|
|
134
134
|
* *
|
|
@@ -136,8 +136,8 @@ export class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
|
|
|
136
136
|
* *
|
|
137
137
|
**************************************************************************/
|
|
138
138
|
isAlreadyPresent(queryValue) {
|
|
139
|
-
if (this.
|
|
140
|
-
return this.
|
|
139
|
+
if (this.entities) {
|
|
140
|
+
return this.entities.some(v => this.isEqual(v, queryValue));
|
|
141
141
|
}
|
|
142
142
|
else {
|
|
143
143
|
return false;
|
|
@@ -153,10 +153,10 @@ export class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
ElderMultiSelectChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectChipsComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
156
|
-
ElderMultiSelectChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectChipsComponent, selector: "elder-multi-select-chips", inputs: { allowRemove: "allowRemove", chipTemplate: "chipTemplate", chipColorResolver: "chipColorResolver" }, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "inputControl", first: true, predicate: ["chipInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(
|
|
156
|
+
ElderMultiSelectChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectChipsComponent, selector: "elder-multi-select-chips", inputs: { allowRemove: "allowRemove", chipTemplate: "chipTemplate", chipColorResolver: "chipColorResolver" }, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "inputControl", first: true, predicate: ["chipInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(selectChips$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i1.MatPrefix, selector: "[matPrefix]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.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"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9.ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i5.AsyncPipe, "translate": i10.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
157
157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectChipsComponent, decorators: [{
|
|
158
158
|
type: Component,
|
|
159
|
-
args: [{ selector: 'elder-multi-select-chips', changeDetection: ChangeDetectionStrategy.OnPush, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), template: "<mat-form-field *ngIf=\"(
|
|
159
|
+
args: [{ selector: 'elder-multi-select-chips', changeDetection: ChangeDetectionStrategy.OnPush, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), template: "<mat-form-field *ngIf=\"(selectChips$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"] }]
|
|
160
160
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { allowRemove: [{
|
|
161
161
|
type: Input
|
|
162
162
|
}], inputControl: [{
|
|
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
170
170
|
}], chipColorResolver: [{
|
|
171
171
|
type: Input
|
|
172
172
|
}] } });
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L211bHRpL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLHVCQUF1QixFQUFVLFNBQVMsRUFBYyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7QUFFbEcsTUFBTSxTQUFTO0lBQ2IsWUFDa0IsS0FBUSxFQUNSLFdBQW1CLEVBQ25CLEtBQW1CLEVBQ25CLFVBQW1CO1FBSG5CLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDUixnQkFB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Q0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztTQUN4RTtJQUVILENBQUM7OzJIQS9LVSw4QkFBOEI7K0dBQTlCLDhCQUE4QixpS0FGOUIsNkJBQTZCLENBQUMsOEJBQThCLENBQUMseUVBeUIxRCx3QkFBd0IsMkJBQVMsV0FBVyw2S0NuRDVELDY5RUEwRUE7MkZEOUNhLDhCQUE4QjtrQkFQMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsNkJBQTZCLGdDQUFnQzs2RkFtQmpFLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0UsWUFBWTtzQkFEbkIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUloQyxpQkFBaUI7c0JBRHZCLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBdUQ5RCxZQUFZO3NCQUR0QixLQUFLO2dCQWFLLGlCQUFpQjtzQkFEM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBOZ1pvbmUsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFbGRlck11bHRpU2VsZWN0QmFzZX0gZnJvbSAnLi4vZWxkZXItbXVsdGktc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlL2NvbW1vbi1iZWhhdmlvcnMvY29sb3InO1xuaW1wb3J0IHtUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VsZGVyU2VsZWN0Q2hpcERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWNoaXAuZGlyZWN0aXZlJztcbmltcG9ydCB7YnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnN9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy90ZW1wbGF0ZS1jb21wb3NpdGUtY29udHJvbCc7XG5cbmNsYXNzIFZhbHVlQ2hpcDxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogVCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sb3I6IFRoZW1lUGFsZXR0ZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3ZlYWJsZTogYm9vbGVhblxuICApIHtcbiAgfVxufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogYnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnMoRWxkZXJNdWx0aVNlbGVjdENoaXBzQ29tcG9uZW50KVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlck11bHRpU2VsZWN0Q2hpcHNDb21wb25lbnQ8VElkLCBUPiBleHRlbmRzIEVsZGVyTXVsdGlTZWxlY3RCYXNlPFRJZCwgVD4gaW1wbGVtZW50cyBPbkluaXQge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlc1dyYXBwZWQkOiBPYnNlcnZhYmxlPFZhbHVlQ2hpcDxUPltdPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNoaXBDb2xvclJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZT4oKHZhbHVlOiBUKSA9PiB1bmRlZmluZWQpO1xuXG5cbiAgcHVibGljIHNlbGVjdGFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd1JlbW92ZSA9IHRydWU7XG5cblxuICBAVmlld0NoaWxkKCdjaGlwSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0pXG4gIHByaXZhdGUgaW5wdXRDb250cm9sOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBjaGlwVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfY2hpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgem9uZTogTmdab25lXG4gICkge1xuICAgIHN1cGVyKHpvbmUpO1xuICAgIHRoaXMudmFsdWVzV3JhcHBlZCQgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgW1xuICAgICAgICB0aGlzLnZhbHVlJCxcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcGVydHlSZXNvbHZlciQsXG4gICAgICAgIHRoaXMuY2hpcENvbG9yUmVzb2x2ZXIkXG4gICAgICBdXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWVzLCBkUFIsIGNDUl0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKFxuICAgICAgICAgICAgdiA9PiBuZXcgVmFsdWVDaGlwPFQ+KFxuICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICBkUFIodiksXG4gICAgICAgICAgICAgIGNDUih2KSxcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlbW92ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDxWYWx1ZUNoaXA8VD5bXT5bXTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9jaGlwVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpcFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlwVGVtcGxhdGUgfHwgdGhpcy5jaGlwVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGNvbG9yIG9mIGEgZ2l2ZW4gbGFiZWwgb2JqZWN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwQ29sb3JSZXNvbHZlcihmbjogKG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZSkge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2hpcENvbG9yUmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIScpO1xuICAgIH1cbiAgICB0aGlzLmNoaXBDb2xvclJlc29sdmVyJC5uZXh0KGZuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFQpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wdGlvbkRpc2FibGVkRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFQpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZXNlbnQob3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChzZWxlY3RlZFZhbHVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dCgpO1xuICAgICAgdGhpcy5hZGRMYWJlbChzZWxlY3RlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkTGFiZWxzKGxhYmVsczogVFtdKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogW107XG4gICAgdGhpcy5yZXBsYWNlV2l0aChbLi4uY3VycmVudCwgLi4ubGFiZWxzXSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTGFiZWwobGFiZWw6IGFueSkge1xuICAgIHRoaXMuYWRkTGFiZWxzKFtsYWJlbF0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUxhYmVsKHRvUmVtb3ZlOiBUKTogdm9pZCB7XG5cbiAgICBjb25zdCByZW1haW5pbmcgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGwgPT4gIXRoaXMuaXNFcXVhbChsLCB0b1JlbW92ZSkpO1xuXG4gICAgdGhpcy5yZXBsYWNlV2l0aChyZW1haW5pbmcpO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VXaXRoKGxhYmVsczogVFtdKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShsYWJlbHMpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBpc0FscmVhZHlQcmVzZW50KHF1ZXJ5VmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc29tZSh2ID0+IHRoaXMuaXNFcXVhbCh2LCBxdWVyeVZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0SW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdGYWlsZWQgdG8gcmVzZXQgaW5wdXRDb250cm9sIHNpbmNlIGl0IHdhcyBub3QgZm91bmQhJyk7XG4gICAgfVxuXG4gIH1cblxufVxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKHZhbHVlc1dyYXBwZWQkIHwgYXN5bmMpIGFzIGNoaXBWYWx1ZXNcIiBmeEZsZXhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLXN0ZC1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuPlxuXG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuXG5cbiAgPG5nLWNvbnRhaW5lciBtYXRQcmVmaXggKm5nSWY9XCIobWVyZ2VkU3RhdGUkIHwgYXN5bmMpIGFzIHN0YXRlXCI+XG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLWljb24gcHJlZml4LXBhZGRpbmcgbm9zZWxlY3RcIlxuICAgICAgICAgICAgICBbY2xhc3MubG9hZGluZ109XCJzdGF0ZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cInN0YXRlPy5lcnJvciA/ICd3YXJuJyA6IGNvbG9yXCI+XG4gICAgICB7e2ljb259fVxuICAgIDwvbWF0LWljb24+XG5cblxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpY29uICYmIHN0YXRlPy5lcnJvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCI+XG4gICAgICB3YXJuaW5nXG4gICAgPC9tYXQtaWNvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBIGR5bmFtaWMgaW5wdXQgLS0+XG5cbiAgPG1hdC1jaGlwLWxpc3Qgc2VsZWN0YWJsZSAjY2hpcHM+XG4gICAgPG1hdC1jaGlwICpuZ0Zvcj1cImxldCBjaGlwTW9kZWwgb2YgY2hpcFZhbHVlc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwibm9zZWxlY3RcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiY2hpcE1vZGVsLmNvbG9yXCIgc2VsZWN0YWJsZSBzZWxlY3RlZFxuICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cImNoaXBNb2RlbC5yZW1vdmVhYmxlXCJcbiAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlTGFiZWwoY2hpcE1vZGVsLnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNoaXBUZW1wbGF0ZSB8fCBzaW1wbGVDaGlwVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaXBNb2RlbH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgPC9tYXQtY2hpcD5cblxuICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLW11bHRpLWNoaXBzLWlubmVyLWlucHV0J1wiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcHNcIlxuICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXVxuICAgICAgICAgICBbZWxkZXJFbGRlckF1dG9jb21wbGV0ZV09XCJlbGRlckF1dG9cIiBbcXVlcnlGaWx0ZXJdPVwicXVlcnlGaWx0ZXJcIiBbZmlsdGVyc109XCJmaWx0ZXJzXCIgW3NvcnRzXT1cInNvcnRzXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgI2NoaXBJbnB1dD5cbiAgPC9tYXQtY2hpcC1saXN0PlxuXG4gIDxlbGRlci1hdXRvY29tcGxldGVcbiAgICAjZWxkZXJBdXRvPVwiZWxkZXJBdXRvY29tcGxldGVcIlxuICAgIFtzdWdnZXN0aW9uc0RjXT1cInN1Z2dlc3Rpb25zRGMkIHwgYXN5bmNcIlxuICAgIFt2YWx1ZVRlbXBsYXRlXT1cInZhbHVlVGVtcGxhdGVcIlxuICAgIFtkaXNwbGF5UHJvcGVydHlSZXNvbHZlcl09XCJkaXNwbGF5UHJvcGVydHlSZXNvbHZlciQgfCBhc3luY1wiXG4gICAgW2lzT3B0aW9uRGlzYWJsZWRGbl09XCJpc09wdGlvbkRpc2FibGVkSW50ZXJuYWxGblwiXG4gICAgW2lzT3B0aW9uSGlkZGVuRm5dPVwiaXNPcHRpb25IaWRkZW5JbnRlcm5hbEZuXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwib25PcHRpb25TZWxlY3RlZCgkYW55KCRldmVudCkpXCJcbiAgPjwvZWxkZXItYXV0b2NvbXBsZXRlPlxuXG4gIDxtYXQtaGludCAqbmdJZj1cImhpbnRcIj57e2hpbnQgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cblxuPG5nLXRlbXBsYXRlICNzaW1wbGVDaGlwVGVtcGxhdGUgbGV0LWNoaXBNb2RlbD5cbiAge3tjaGlwTW9kZWwuZGlzcGxheVRleHR9fVxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L211bHRpL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy9lbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QvbXVsdGkvZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzL2VsZGVyLW11bHRpLXNlbGVjdC1jaGlwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFVLHVCQUF1QixFQUFVLFNBQVMsRUFBYyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7QUFFbEcsTUFBTSxVQUFVO0lBQ2QsWUFDa0IsS0FBUSxFQUNSLFdBQW1CLEVBQ25CLEtBQW1CLEVBQ25CLFVBQW1CO1FBSG5CLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDUixnQkFB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LEVBQUUsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7OzJIQWpMVSw4QkFBOEI7K0dBQTlCLDhCQUE4QixpS0FGOUIsNkJBQTZCLENBQUMsOEJBQThCLENBQUMseUVBNEIxRCx3QkFBd0IsMkJBQVMsV0FBVyw2S0N0RDVELDI5RUEwRUE7MkZEOUNhLDhCQUE4QjtrQkFQMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsNkJBQTZCLGdDQUFnQzs2RkFzQmpFLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0UsWUFBWTtzQkFEbkIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUloQyxpQkFBaUI7c0JBRHZCLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBdUQ5RCxZQUFZO3NCQUR0QixLQUFLO2dCQWFLLGlCQUFpQjtzQkFEM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBOZ1pvbmUsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFbGRlck11bHRpU2VsZWN0QmFzZX0gZnJvbSAnLi4vZWxkZXItbXVsdGktc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlL2NvbW1vbi1iZWhhdmlvcnMvY29sb3InO1xuaW1wb3J0IHtUZXh0UmVzb2x2ZXJGbn0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VsZGVyU2VsZWN0Q2hpcERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZWxkZXItc2VsZWN0LWNoaXAuZGlyZWN0aXZlJztcbmltcG9ydCB7YnVpbGRGb3JtSW50ZWdyYXRpb25Qcm92aWRlcnN9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy90ZW1wbGF0ZS1jb21wb3NpdGUtY29udHJvbCc7XG5cbmNsYXNzIFNlbGVjdENoaXA8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9yOiBUaGVtZVBhbGV0dGUsXG4gICAgcHVibGljIHJlYWRvbmx5IHJlbW92ZWFibGU6IGJvb2xlYW5cbiAgKSB7XG4gIH1cbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1tdWx0aS1zZWxlY3QtY2hpcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItbXVsdGktc2VsZWN0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IGJ1aWxkRm9ybUludGVncmF0aW9uUHJvdmlkZXJzKEVsZGVyTXVsdGlTZWxlY3RDaGlwc0NvbXBvbmVudClcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJNdWx0aVNlbGVjdENoaXBzQ29tcG9uZW50PFRJZCA9IGFueSwgVEVudGl0eSA9IGFueSwgVFZhbHVlID0gYW55PlxuICBleHRlbmRzIEVsZGVyTXVsdGlTZWxlY3RCYXNlPFRJZCwgVEVudGl0eSwgVFZhbHVlPlxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RDaGlwcyQ6IE9ic2VydmFibGU8U2VsZWN0Q2hpcDxURW50aXR5PltdPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNoaXBDb2xvclJlc29sdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZT4oKHZhbHVlOiBURW50aXR5KSA9PiB1bmRlZmluZWQpO1xuXG5cbiAgcHVibGljIHNlbGVjdGFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd1JlbW92ZSA9IHRydWU7XG5cblxuICBAVmlld0NoaWxkKCdjaGlwSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0pXG4gIHByaXZhdGUgaW5wdXRDb250cm9sOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJTZWxlY3RDaGlwRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyBjaGlwVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfY2hpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgem9uZTogTmdab25lXG4gICkge1xuICAgIHN1cGVyKHpvbmUpO1xuICAgIHRoaXMuc2VsZWN0Q2hpcHMkID0gY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5lbnRpdGllcyQsXG4gICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkLFxuICAgICAgICB0aGlzLmNoaXBDb2xvclJlc29sdmVyJFxuICAgICAgXVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlcywgZFBSLCBjQ1JdKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChcbiAgICAgICAgICAgIHYgPT4gbmV3IFNlbGVjdENoaXA8VEVudGl0eT4oXG4gICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgIGRQUih2KSxcbiAgICAgICAgICAgICAgY0NSKHYpLFxuICAgICAgICAgICAgICB0aGlzLmFsbG93UmVtb3ZlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gPFNlbGVjdENoaXA8VEVudGl0eT5bXT5bXTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9jaGlwVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpcFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlwVGVtcGxhdGUgfHwgdGhpcy5jaGlwVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGNvbG9yIG9mIGEgZ2l2ZW4gbGFiZWwgb2JqZWN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGlwQ29sb3JSZXNvbHZlcihmbjogKG8xOiBhbnkpID0+IFRoZW1lUGFsZXR0ZSkge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2hpcENvbG9yUmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIScpO1xuICAgIH1cbiAgICB0aGlzLmNoaXBDb2xvclJlc29sdmVyJC5uZXh0KGZuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWRGbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wdGlvbkRpc2FibGVkRm4ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbkhpZGRlbkludGVybmFsRm4oKTogKG9wdGlvbjogVEVudGl0eSkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIChvcHRpb246IFRFbnRpdHkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZXNlbnQob3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzT3B0aW9uSGlkZGVuRm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25IaWRkZW5GbihvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChzZWxlY3RlZFZhbHVlOiBURW50aXR5KTogdm9pZCB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dCgpO1xuICAgICAgdGhpcy5hZGRMYWJlbChzZWxlY3RlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkTGFiZWxzKGxhYmVsczogVEVudGl0eVtdKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZW50aXRpZXMgPyB0aGlzLmVudGl0aWVzIDogW107XG4gICAgdGhpcy5yZXBsYWNlV2l0aChbLi4uY3VycmVudCwgLi4ubGFiZWxzXSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTGFiZWwobGFiZWw6IGFueSkge1xuICAgIHRoaXMuYWRkTGFiZWxzKFtsYWJlbF0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUxhYmVsKHRvUmVtb3ZlOiBURW50aXR5KTogdm9pZCB7XG5cbiAgICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmVudGl0aWVzXG4gICAgICAuZmlsdGVyKGwgPT4gIXRoaXMuaXNFcXVhbChsLCB0b1JlbW92ZSkpO1xuXG4gICAgdGhpcy5yZXBsYWNlV2l0aChyZW1haW5pbmcpO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VXaXRoKGVudGl0aWVzOiBURW50aXR5W10pOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQnlFbnRpdGllcyhlbnRpdGllcyk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGlzQWxyZWFkeVByZXNlbnQocXVlcnlWYWx1ZTogVEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmVudGl0aWVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRpdGllcy5zb21lKHYgPT4gdGhpcy5pc0VxdWFsKHYsIHF1ZXJ5VmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJ0ZhaWxlZCB0byByZXNldCBpbnB1dENvbnRyb2wgc2luY2UgaXQgd2FzIG5vdCBmb3VuZCEnKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKHNlbGVjdENoaXBzJCB8IGFzeW5jKSBhcyBjaGlwVmFsdWVzXCIgZnhGbGV4XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1zdGQtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbj5cblxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cblxuXG4gIDxuZy1jb250YWluZXIgbWF0UHJlZml4ICpuZ0lmPVwiKG1lcmdlZFN0YXRlJCB8IGFzeW5jKSBhcyBzdGF0ZVwiPlxuXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiIGRpc2FibGVkXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVhZGluZy1pY29uIHByZWZpeC1wYWRkaW5nIG5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxvYWRpbmddPVwic3RhdGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJzdGF0ZT8uZXJyb3IgPyAnd2FybicgOiBjb2xvclwiPlxuICAgICAge3tpY29ufX1cbiAgICA8L21hdC1pY29uPlxuXG5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhaWNvbiAmJiBzdGF0ZT8uZXJyb3JcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxlYWRpbmctaWNvbiBwcmVmaXgtcGFkZGluZyBub3NlbGVjdFwiXG4gICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiPlxuICAgICAgd2FybmluZ1xuICAgIDwvbWF0LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQSBkeW5hbWljIGlucHV0IC0tPlxuXG4gIDxtYXQtY2hpcC1saXN0IHNlbGVjdGFibGUgI2NoaXBzPlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgY2hpcE1vZGVsIG9mIGNoaXBWYWx1ZXNcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5vc2VsZWN0XCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBNb2RlbC5jb2xvclwiIHNlbGVjdGFibGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJjaGlwTW9kZWwucmVtb3ZlYWJsZVwiXG4gICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZUxhYmVsKGNoaXBNb2RlbC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwVGVtcGxhdGUgfHwgc2ltcGxlQ2hpcFRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBjaGlwTW9kZWx9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiY2hpcE1vZGVsLnJlbW92ZWFibGVcIj5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvbWF0LWNoaXA+XG5cbiAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy1tdWx0aS1jaGlwcy1pbm5lci1pbnB1dCdcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBzXCJcbiAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV1cbiAgICAgICAgICAgW2VsZGVyRWxkZXJBdXRvY29tcGxldGVdPVwiZWxkZXJBdXRvXCIgW3F1ZXJ5RmlsdGVyXT1cInF1ZXJ5RmlsdGVyXCIgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIFtzb3J0c109XCJzb3J0c1wiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICNjaGlwSW5wdXQ+XG4gIDwvbWF0LWNoaXAtbGlzdD5cblxuICA8ZWxkZXItYXV0b2NvbXBsZXRlXG4gICAgI2VsZGVyQXV0bz1cImVsZGVyQXV0b2NvbXBsZXRlXCJcbiAgICBbc3VnZ2VzdGlvbnNEY109XCJzdWdnZXN0aW9uc0RjJCB8IGFzeW5jXCJcbiAgICBbdmFsdWVUZW1wbGF0ZV09XCJ2YWx1ZVRlbXBsYXRlXCJcbiAgICBbZGlzcGxheVByb3BlcnR5UmVzb2x2ZXJdPVwiZGlzcGxheVByb3BlcnR5UmVzb2x2ZXIkIHwgYXN5bmNcIlxuICAgIFtpc09wdGlvbkRpc2FibGVkRm5dPVwiaXNPcHRpb25EaXNhYmxlZEludGVybmFsRm5cIlxuICAgIFtpc09wdGlvbkhpZGRlbkZuXT1cImlzT3B0aW9uSGlkZGVuSW50ZXJuYWxGblwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGFueSgkZXZlbnQpKVwiXG4gID48L2VsZGVyLWF1dG9jb21wbGV0ZT5cblxuICA8bWF0LWhpbnQgKm5nSWY9XCJoaW50XCI+e3toaW50IHwgdHJhbnNsYXRlfX08L21hdC1oaW50PlxuXG48L21hdC1mb3JtLWZpZWxkPlxuXG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlQ2hpcFRlbXBsYXRlIGxldC1jaGlwTW9kZWw+XG4gIHt7Y2hpcE1vZGVsLmRpc3BsYXlUZXh0fX1cbjwvbmctdGVtcGxhdGU+XG5cbiJdfQ==
|