@pepperi-addons/ngx-lib 0.4.2-beta.314 → 0.4.2-beta.316
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/assets/i18n/en.ngx-lib.json +3 -0
- package/esm2020/list/list-pager.component.mjs +54 -5
- package/esm2020/list/list.component.mjs +16 -3
- package/esm2020/list/list.module.mjs +5 -1
- package/esm2020/remote-loader/remote-loader-element.component.mjs +37 -3
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +74 -8
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +38 -4
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +3 -0
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +73 -8
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +36 -2
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs +3 -0
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/list/list-pager.component.d.ts +15 -4
- package/list/list.component.d.ts +4 -1
- package/list/list.module.d.ts +4 -3
- package/package.json +1 -1
- package/src/assets/i18n/en.ngx-lib.json +3 -0
|
@@ -136,6 +136,9 @@
|
|
|
136
136
|
"PAGER_NEXT": "Next",
|
|
137
137
|
"PAGER_OUT_OF": "Out of",
|
|
138
138
|
"PAGER_PAGE": "Page",
|
|
139
|
+
"PAGER_FIRST": "First",
|
|
140
|
+
"PAGER_LAST": "Last",
|
|
141
|
+
"PAGER_ITEMS_PER_PAGE": "items per page",
|
|
139
142
|
"SELECT": "Select",
|
|
140
143
|
"SELECTED": "selected",
|
|
141
144
|
"SORT_BY": "Sort by",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
2
2
|
import { Component, EventEmitter, Injectable, Input, Output, } from '@angular/core';
|
|
3
|
+
import { PepScreenSizeType, } from '@pepperi-addons/ngx-lib';
|
|
3
4
|
import { DEFAULT_PAGE_SIZE } from './list.model';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@pepperi-addons/ngx-lib";
|
|
@@ -7,8 +8,9 @@ import * as i2 from "@angular/common";
|
|
|
7
8
|
import * as i3 from "@angular/material/button";
|
|
8
9
|
import * as i4 from "@angular/material/icon";
|
|
9
10
|
import * as i5 from "@pepperi-addons/ngx-lib/icon";
|
|
10
|
-
import * as i6 from "@pepperi-addons/ngx-lib/
|
|
11
|
-
import * as i7 from "@ngx-
|
|
11
|
+
import * as i6 from "@pepperi-addons/ngx-lib/select";
|
|
12
|
+
import * as i7 from "@pepperi-addons/ngx-lib/textbox";
|
|
13
|
+
import * as i8 from "@ngx-translate/core";
|
|
12
14
|
export class IPepListPagerChangeEvent {
|
|
13
15
|
}
|
|
14
16
|
export class PepListPagerComponent {
|
|
@@ -16,10 +18,34 @@ export class PepListPagerComponent {
|
|
|
16
18
|
this._changeDetectorRef = _changeDetectorRef;
|
|
17
19
|
this.layoutService = layoutService;
|
|
18
20
|
this.disabled = false;
|
|
21
|
+
this.showPageSizeSelector = false;
|
|
22
|
+
this.showFirstLastButtons = false;
|
|
23
|
+
this.PepScreenSizeType = PepScreenSizeType;
|
|
24
|
+
this.screenSize = PepScreenSizeType.LG;
|
|
25
|
+
this.pageSizeOptionsForSelect = [
|
|
26
|
+
{ key: '10', value: '10' },
|
|
27
|
+
{ key: '20', value: '20' },
|
|
28
|
+
{ key: '50', value: '50' },
|
|
29
|
+
];
|
|
30
|
+
this._pageSizeOptions = [10, 20, 50];
|
|
19
31
|
this._pageIndex = 0;
|
|
20
32
|
this.length = 0;
|
|
21
33
|
this.pageSize = DEFAULT_PAGE_SIZE;
|
|
22
34
|
this.pagerChange = new EventEmitter();
|
|
35
|
+
this.resizeSub = this.layoutService.onResize$.subscribe((size) => {
|
|
36
|
+
this.screenSize = size;
|
|
37
|
+
this._changeDetectorRef.detectChanges();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
set pageSizeOptions(value) {
|
|
41
|
+
this._pageSizeOptions = Array.isArray(value) && value.length > 0 ? value : [10, 20, 50];
|
|
42
|
+
this.pageSizeOptionsForSelect = this._pageSizeOptions.map((n) => ({
|
|
43
|
+
key: n.toString(),
|
|
44
|
+
value: n.toString(),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
get pageSizeOptions() {
|
|
48
|
+
return this._pageSizeOptions;
|
|
23
49
|
}
|
|
24
50
|
set pageIndex(value) {
|
|
25
51
|
this.setPageIndex(value);
|
|
@@ -27,6 +53,9 @@ export class PepListPagerComponent {
|
|
|
27
53
|
get pageIndex() {
|
|
28
54
|
return this._pageIndex;
|
|
29
55
|
}
|
|
56
|
+
ngOnDestroy() {
|
|
57
|
+
this.resizeSub?.unsubscribe();
|
|
58
|
+
}
|
|
30
59
|
nextPage() {
|
|
31
60
|
if (!this.hasNextPage()) {
|
|
32
61
|
return;
|
|
@@ -76,6 +105,20 @@ export class PepListPagerComponent {
|
|
|
76
105
|
const pageNumber = coerceNumberProperty(value);
|
|
77
106
|
this.setPageIndex(pageNumber - 1); // - 1 to convert number into index.
|
|
78
107
|
}
|
|
108
|
+
onPageSizeChange(value) {
|
|
109
|
+
const newPageSize = coerceNumberProperty(value);
|
|
110
|
+
if (!newPageSize || newPageSize === this.pageSize) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const previousPageIndex = this.pageIndex;
|
|
114
|
+
this.pageSize = newPageSize;
|
|
115
|
+
// Reset to first page on page-size change.
|
|
116
|
+
this.setPageIndex(0);
|
|
117
|
+
// If we were already on page 0, setPageIndex won't emit, so emit explicitly.
|
|
118
|
+
if (this.pageIndex === previousPageIndex) {
|
|
119
|
+
this._emitChangeEvent(previousPageIndex);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
79
122
|
setPageIndex(newIndex) {
|
|
80
123
|
const previousPageIndex = this.pageIndex;
|
|
81
124
|
if (newIndex >= 0 && newIndex < this.getNumberOfPages()) {
|
|
@@ -99,15 +142,21 @@ export class PepListPagerComponent {
|
|
|
99
142
|
}
|
|
100
143
|
}
|
|
101
144
|
PepListPagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
-
PepListPagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepListPagerComponent, selector: "pep-list-pager", inputs: { disabled: "disabled", pageIndex: "pageIndex", length: "length", pageSize: "pageSize" }, outputs: { pagerChange: "pagerChange" }, ngImport: i0, template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <
|
|
145
|
+
PepListPagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepListPagerComponent, selector: "pep-list-pager", inputs: { disabled: "disabled", showPageSizeSelector: "showPageSizeSelector", showFirstLastButtons: "showFirstLastButtons", pageSizeOptions: "pageSizeOptions", pageIndex: "pageIndex", length: "length", pageSize: "pageSize" }, outputs: { pagerChange: "pagerChange" }, ngImport: i0, template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasPreviousPage()\"\n [ngClass]=\"{ disabled: disabled || !hasPreviousPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"firstPage()\"\n [title]=\"('LIST.PAGER_FIRST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_right' : 'arrow_back_left'\"></pep-icon>\n </mat-icon>\n </button>\n <button mat-button [disabled]=\"disabled || _previousButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _previousButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"previousPage()\"\n [title]=\"('LIST.PAGER_PREVIOUS' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_right' : 'arrow_left'\"></pep-icon>\n </mat-icon>\n </button>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <button mat-button [disabled]=\"disabled || _nextButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _nextButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"nextPage()\"\n [title]=\"('LIST.PAGER_NEXT' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_left' : 'arrow_right'\"></pep-icon>\n </mat-icon>\n </button>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasNextPage()\"\n [ngClass]=\"{ disabled: disabled || !hasNextPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"lastPage()\"\n [title]=\"('LIST.PAGER_LAST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_left' : 'arrow_back_right'\"></pep-icon>\n </mat-icon>\n </button>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\n <ng-container *ngIf=\"showPageSizeSelector\">\n <pep-select pepAutoWidth class=\"page-size pep-spacing-element\" [key]=\"'pageSize'\" [value]=\"pageSize?.toString()\"\n [disabled]=\"disabled\" [renderTitle]=\"false\" [emptyOption]=\"false\" [options]=\"pageSizeOptionsForSelect\"\n (valueChange)=\"onPageSizeChange($event)\">\n </pep-select>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_ITEMS_PER_PAGE' | translate }}</span>\n </ng-container>\n</div>", styles: [".pager-container{display:flex;justify-content:center;align-items:center;height:calc(2rem + calc(var(--pep-spacing-sm, .5rem) * 2));padding:var(--pep-spacing-sm, .5rem)}.pager-container .page-size{min-height:unset;margin-bottom:0}.pager-container .page-size ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index{min-height:unset;margin-bottom:0}.pager-container .page-index ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index ::ng-deep .mat-form-field-flex .mat-input-element{min-width:1.25rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.PepInputAutoWidthDirective, selector: "[pepAutoWidth]", inputs: ["includePadding"] }, { kind: "directive", type: i1.PepMenuBlurDirective, selector: "[pepMenuBlur]" }, { kind: "directive", type: i1.PepRtlDirectionDirective, selector: "[pepRtlDirection]" }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i6.PepSelectComponent, selector: "pep-select", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "placeholder", "placeholderWhenDisabled", "autoSortOptions", "options", "visible", "emptyOption", "form", "layoutType", "parentFieldKey", "isActive", "showTitle", "renderTitle", "typeaheadDebounceInterval", "addValueToOptionsIfNotExist"], outputs: ["valueChange", "validationChange"] }, { kind: "component", type: i7.PepTextboxComponent, selector: "pep-textbox", inputs: ["key", "value", "minFractionDigits", "maxFractionDigits", "accessory", "label", "placeholder", "type", "mandatory", "disabled", "readonly", "maxFieldCharacters", "hint", "textColor", "xAlignment", "rowSpan", "minValue", "maxValue", "visible", "form", "isActive", "showTitle", "renderTitle", "renderError", "renderSymbol", "layoutType", "parentFieldKey", "regex", "regexError", "isInFocus"], outputs: ["valueChange", "keyup", "validationChange"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
103
146
|
PepListPagerComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent });
|
|
104
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepListPagerComponent, decorators: [{
|
|
105
148
|
type: Component,
|
|
106
|
-
args: [{ selector: 'pep-list-pager', template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <
|
|
149
|
+
args: [{ selector: 'pep-list-pager', template: "<div class=\"pager-container body-sm\">\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasPreviousPage()\"\n [ngClass]=\"{ disabled: disabled || !hasPreviousPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"firstPage()\"\n [title]=\"('LIST.PAGER_FIRST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_right' : 'arrow_back_left'\"></pep-icon>\n </mat-icon>\n </button>\n <button mat-button [disabled]=\"disabled || _previousButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _previousButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"previousPage()\"\n [title]=\"('LIST.PAGER_PREVIOUS' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_right' : 'arrow_left'\"></pep-icon>\n </mat-icon>\n </button>\n <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n </pep-textbox>\n <button mat-button [disabled]=\"disabled || _nextButtonsDisabled()\"\n [ngClass]=\"{ disabled: disabled || _nextButtonsDisabled() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"nextPage()\"\n [title]=\"('LIST.PAGER_NEXT' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_left' : 'arrow_right'\"></pep-icon>\n </mat-icon>\n </button>\n <button *ngIf=\"showFirstLastButtons && screenSize <= PepScreenSizeType.MD\" mat-button [disabled]=\"disabled || !hasNextPage()\"\n [ngClass]=\"{ disabled: disabled || !hasNextPage() }\"\n class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"lastPage()\"\n [title]=\"('LIST.PAGER_LAST' | translate)\">\n <mat-icon>\n <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_back_left' : 'arrow_back_right'\"></pep-icon>\n </mat-icon>\n </button>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\n <ng-container *ngIf=\"showPageSizeSelector\">\n <pep-select pepAutoWidth class=\"page-size pep-spacing-element\" [key]=\"'pageSize'\" [value]=\"pageSize?.toString()\"\n [disabled]=\"disabled\" [renderTitle]=\"false\" [emptyOption]=\"false\" [options]=\"pageSizeOptionsForSelect\"\n (valueChange)=\"onPageSizeChange($event)\">\n </pep-select>\n <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_ITEMS_PER_PAGE' | translate }}</span>\n </ng-container>\n</div>", styles: [".pager-container{display:flex;justify-content:center;align-items:center;height:calc(2rem + calc(var(--pep-spacing-sm, .5rem) * 2));padding:var(--pep-spacing-sm, .5rem)}.pager-container .page-size{min-height:unset;margin-bottom:0}.pager-container .page-size ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index{min-height:unset;margin-bottom:0}.pager-container .page-index ::ng-deep .mat-form-field-flex{padding:0 .5rem;min-height:2rem}.pager-container .page-index ::ng-deep .mat-form-field-flex .mat-input-element{min-width:1.25rem}\n"] }]
|
|
107
150
|
}, {
|
|
108
151
|
type: Injectable
|
|
109
152
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PepLayoutService }]; }, propDecorators: { disabled: [{
|
|
110
153
|
type: Input
|
|
154
|
+
}], showPageSizeSelector: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], showFirstLastButtons: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], pageSizeOptions: [{
|
|
159
|
+
type: Input
|
|
111
160
|
}], pageIndex: [{
|
|
112
161
|
type: Input
|
|
113
162
|
}], length: [{
|
|
@@ -117,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
117
166
|
}], pagerChange: [{
|
|
118
167
|
type: Output
|
|
119
168
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7OztBQUVqRCxNQUFNLE9BQU8sd0JBQXdCO0NBS3BDO0FBUUQsTUFBTSxPQUFPLHFCQUFxQjtJQWlCOUIsWUFDWSxrQkFBcUMsRUFDdEMsYUFBK0I7UUFEOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFsQmpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQVNkLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxhQUFRLEdBQUcsaUJBQWlCLENBQUM7UUFHdEMsZ0JBQVcsR0FBMkMsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFJckQsQ0FBQztJQWhCL0MsSUFDSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQVlELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE9BQU87U0FDVjtRQUVELElB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TmpDLFNBQVM7K0JBQ0ksZ0JBQWdCOztrQkFJN0IsVUFBVTt1SUFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUdGLFNBQVM7c0JBRFosS0FBSztnQkFRRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwTGF5b3V0U2VydmljZSwgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBERUZBVUxUX1BBR0VfU0laRSB9IGZyb20gJy4vbGlzdC5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQge1xuICAgIHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGlzdC1wYWdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtcGFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QtcGFnZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGVwTGlzdFBhZ2VyQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3BhZ2VJbmRleCA9IDA7XG4gICAgQElucHV0KClcbiAgICBzZXQgcGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbGVuZ3RoID0gMDtcbiAgICBASW5wdXQoKSBwYWdlU2l6ZSA9IERFRkFVTFRfUEFHRV9TSVpFO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcGFnZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSkgeyB9XG5cbiAgICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMucGFnZUluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgZmlyc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KDApO1xuICAgIH1cblxuICAgIGxhc3RQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzTmV4dFBhZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxKTtcbiAgICB9XG5cbiAgICBoYXNQcmV2aW91c1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRleCA+PSAxICYmIHRoaXMucGFnZVNpemUgIT0gMDtcbiAgICB9XG5cbiAgICBoYXNOZXh0UGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbWF4UGFnZUluZGV4ID0gdGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkgLSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggPCBtYXhQYWdlSW5kZXggJiYgdGhpcy5wYWdlU2l6ZSAhPSAwO1xuICAgIH1cblxuICAgIGdldE51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGZvcndhcmRzIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgICBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzTmV4dFBhZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGJ1dHRvbnMgZm9yIGdvaW5nIGJhY2t3YXJkcyBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gICAgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgocGFnZU51bWJlciAtIDEpOyAvLyAtIDEgdG8gY29udmVydCBudW1iZXIgaW50byBpbmRleC5cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBhZ2VJbmRleChuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFnZUluZGV4ID0gdGhpcy5wYWdlSW5kZXg7XG5cbiAgICAgICAgaWYgKG5ld0luZGV4ID49IDAgJiYgbmV3SW5kZXggPCB0aGlzLmdldE51bWJlck9mUGFnZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlSW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnZUluZGV4ICE9PSBwcmV2aW91c1BhZ2VJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhbiBldmVudCBub3RpZnlpbmcgdGhhdCBhIGNoYW5nZSBvZiB0aGUgcGFnaW5hdG9yJ3MgcHJvcGVydGllcyBoYXMgYmVlbiB0cmlnZ2VyZWQuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZUV2ZW50KHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lciBib2R5LXNtXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgJ0xJU1QuUEFHRVJfUEFHRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPHBlcC10ZXh0Ym94IHBlcEF1dG9XaWR0aCBjbGFzcz1cInBhZ2UtaW5kZXggcGVwLXNwYWNpbmctZWxlbWVudFwiIFtrZXldPVwiJ3BhZ2VJbmRleCdcIiBbdHlwZV09XCInaW50J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt4QWxpZ25tZW50XT1cIidjZW50ZXInXCIgW3JlbmRlclRpdGxlXT1cImZhbHNlXCIgW3JlbmRlckVycm9yXT1cImZhbHNlXCIgW3JlbmRlclN5bWJvbF09XCJmYWxzZVwiXG4gICAgICAgIFt2YWx1ZV09XCJwYWdlSW5kZXggKyAxXCIgW21pblZhbHVlXT1cIjFcIiBbbWF4VmFsdWVdPVwidGhpcy5nZXROdW1iZXJPZlBhZ2VzKClcIlxuICAgICAgICBbbWF4RmllbGRDaGFyYWN0ZXJzXT1cIjZcIiBbbWFuZGF0b3J5XT1cInRydWVcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9wZXAtdGV4dGJveD5cbiAgICA8c3BhbiBjbGFzcz1cInBlcC1zcGFjaW5nLWVsZW1lbnRcIj57eyAnTElTVC5QQUdFUl9PVVRfT0YnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudFwiPnt7IGdldE51bWJlck9mUGFnZXMoKSB9fTwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IF9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQgfHwgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkgfVwiXG4gICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBwZXAtc3BhY2luZy1lbGVtZW50IHNtIHdlYWtcIiBwZXBSdGxEaXJlY3Rpb24gcGVwTWVudUJsdXIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9QUkVWSU9VUycgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJsYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyAnYXJyb3dfcmlnaHQnIDogJ2Fycm93X2xlZnQnXCI+PC9wZXAtaWNvbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IF9uZXh0QnV0dG9uc0Rpc2FibGVkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpIH1cIlxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gcGVwLXNwYWNpbmctZWxlbWVudCBzbSB3ZWFrXCIgcGVwUnRsRGlyZWN0aW9uIHBlcE1lbnVCbHVyIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cIignTElTVC5QQUdFUl9ORVhUJyB8IHRyYW5zbGF0ZSlcIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdhcnJvd19sZWZ0JyA6ICdhcnJvd19yaWdodCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpc3QvbGlzdC1wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWdDLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7O0FBRWpELE1BQU0sT0FBTyx3QkFBd0I7Q0FLcEM7QUFRRCxNQUFNLE9BQU8scUJBQXFCO0lBMkM5QixZQUNZLGtCQUFxQyxFQUN0QyxhQUErQjtRQUQ5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQTVDakMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRXRDLHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQ3RDLGVBQVUsR0FBc0IsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRXJELDZCQUF3QixHQUFzQjtZQUMxQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMxQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMxQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUM3QixDQUFDO1FBRU0scUJBQWdCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBYTFDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFTZCxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsYUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBR3RDLGdCQUFXLEdBQTJDLElBQUksWUFBWSxFQUE0QixDQUFDO1FBSy9GLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQWxDRCxJQUNJLGVBQWUsQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtTQUN0QixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFDRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBR0QsSUFDSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQWlCRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN6QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ3pCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXO1FBQ1AsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFDekUsd0JBQXdCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7SUFDM0UsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDMUIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvQyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFFNUIsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckIsNkVBQTZFO1FBQzdFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBZ0I7UUFDakMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7U0FDOUI7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELCtGQUErRjtJQUN2RixnQkFBZ0IsQ0FBQyxpQkFBeUI7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsaUJBQWlCO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztJQUNQLENBQUM7O2tIQWhLUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixpVUMzQmxDLHN1R0FnRE07c0hEckJPLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLGdCQUFnQjs7a0JBSTdCLFVBQVU7dUlBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQWFGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBY0YsU0FBUztzQkFEWixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RhYmxlLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJUGVwT3B0aW9uLCBQZXBMYXlvdXRTZXJ2aWNlLCBQZXBTY3JlZW5TaXplVHlwZSwgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBERUZBVUxUX1BBR0VfU0laRSB9IGZyb20gJy4vbGlzdC5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQge1xuICAgIHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHByZXZpb3VzUGFnZUluZGV4OiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGlzdC1wYWdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtcGFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QtcGFnZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGVwTGlzdFBhZ2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2hvd1BhZ2VTaXplU2VsZWN0b3IgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93Rmlyc3RMYXN0QnV0dG9ucyA9IGZhbHNlO1xuXG4gICAgUGVwU2NyZWVuU2l6ZVR5cGUgPSBQZXBTY3JlZW5TaXplVHlwZTtcbiAgICBzY3JlZW5TaXplOiBQZXBTY3JlZW5TaXplVHlwZSA9IFBlcFNjcmVlblNpemVUeXBlLkxHO1xuICAgIHByaXZhdGUgcmVzaXplU3ViOiBTdWJzY3JpcHRpb247XG4gICAgcGFnZVNpemVPcHRpb25zRm9yU2VsZWN0OiBBcnJheTxJUGVwT3B0aW9uPiA9IFtcbiAgICAgICAgeyBrZXk6ICcxMCcsIHZhbHVlOiAnMTAnIH0sXG4gICAgICAgIHsga2V5OiAnMjAnLCB2YWx1ZTogJzIwJyB9LFxuICAgICAgICB7IGtleTogJzUwJywgdmFsdWU6ICc1MCcgfSxcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBfcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDUwXTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBwYWdlU2l6ZU9wdGlvbnModmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuX3BhZ2VTaXplT3B0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IFsxMCwgMjAsIDUwXTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnNGb3JTZWxlY3QgPSB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMubWFwKChuKSA9PiAoe1xuICAgICAgICAgICAga2V5OiBuLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZTogbi50b1N0cmluZygpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGdldCBwYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZVNpemVPcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhZ2VJbmRleCA9IDA7XG4gICAgQElucHV0KClcbiAgICBzZXQgcGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdlSW5kZXgodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbGVuZ3RoID0gMDtcbiAgICBASW5wdXQoKSBwYWdlU2l6ZSA9IERFRkFVTFRfUEFHRV9TSVpFO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcGFnZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdFBhZ2VyQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSkge1xuICAgICAgICB0aGlzLnJlc2l6ZVN1YiA9IHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQuc3Vic2NyaWJlKChzaXplKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcmVlblNpemUgPSBzaXplO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYXNOZXh0UGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2VJbmRleCh0aGlzLnBhZ2VJbmRleCArIDEpO1xuICAgIH1cblxuICAgIHByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2VJbmRleCh0aGlzLnBhZ2VJbmRleCAtIDEpO1xuICAgIH1cblxuICAgIGZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2VJbmRleCgwKTtcbiAgICB9XG5cbiAgICBsYXN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpIC0gMSk7XG4gICAgfVxuXG4gICAgaGFzUHJldmlvdXNQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggPj0gMSAmJiB0aGlzLnBhZ2VTaXplICE9IDA7XG4gICAgfVxuXG4gICAgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG1heFBhZ2VJbmRleCA9IHRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpIC0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUluZGV4IDwgbWF4UGFnZUluZGV4ICYmIHRoaXMucGFnZVNpemUgIT0gMDtcbiAgICB9XG5cbiAgICBnZXROdW1iZXJPZlBhZ2VzKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5wYWdlU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBidXR0b25zIGZvciBnb2luZyBmb3J3YXJkcyBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gICAgX25leHRCdXR0b25zRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc05leHRQYWdlKCk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBidXR0b25zIGZvciBnb2luZyBiYWNrd2FyZHMgc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICAgIF9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzUHJldmlvdXNQYWdlKCk7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0UGFnZUluZGV4KHBhZ2VOdW1iZXIgLSAxKTsgLy8gLSAxIHRvIGNvbnZlcnQgbnVtYmVyIGludG8gaW5kZXguXG4gICAgfVxuXG4gICAgb25QYWdlU2l6ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2VTaXplID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoIW5ld1BhZ2VTaXplIHx8IG5ld1BhZ2VTaXplID09PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IHRoaXMucGFnZUluZGV4O1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gbmV3UGFnZVNpemU7XG5cbiAgICAgICAgLy8gUmVzZXQgdG8gZmlyc3QgcGFnZSBvbiBwYWdlLXNpemUgY2hhbmdlLlxuICAgICAgICB0aGlzLnNldFBhZ2VJbmRleCgwKTtcblxuICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFscmVhZHkgb24gcGFnZSAwLCBzZXRQYWdlSW5kZXggd29uJ3QgZW1pdCwgc28gZW1pdCBleHBsaWNpdGx5LlxuICAgICAgICBpZiAodGhpcy5wYWdlSW5kZXggPT09IHByZXZpb3VzUGFnZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQocHJldmlvdXNQYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYWdlSW5kZXgobmV3SW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IHRoaXMucGFnZUluZGV4O1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA+PSAwICYmIG5ld0luZGV4IDwgdGhpcy5nZXROdW1iZXJPZlBhZ2VzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VJbmRleCA9IG5ld0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2VJbmRleCAhPT0gcHJldmlvdXNQYWdlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VFdmVudChwcmV2aW91c1BhZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRW1pdHMgYW4gZXZlbnQgbm90aWZ5aW5nIHRoYXQgYSBjaGFuZ2Ugb2YgdGhlIHBhZ2luYXRvcidzIHByb3BlcnRpZXMgaGFzIGJlZW4gdHJpZ2dlcmVkLiAqL1xuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VFdmVudChwcmV2aW91c1BhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnZXJDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYWdlci1jb250YWluZXIgYm9keS1zbVwiPlxuICAgIDxzcGFuIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudFwiPnt7ICdMSVNULlBBR0VSX1BBR0UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93Rmlyc3RMYXN0QnV0dG9ucyAmJiBzY3JlZW5TaXplIDw9IFBlcFNjcmVlblNpemVUeXBlLk1EXCIgbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIWhhc1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQgfHwgIWhhc1ByZXZpb3VzUGFnZSgpIH1cIlxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gcGVwLXNwYWNpbmctZWxlbWVudCBzbSB3ZWFrXCIgcGVwUnRsRGlyZWN0aW9uIHBlcE1lbnVCbHVyIChjbGljayk9XCJmaXJzdFBhZ2UoKVwiXG4gICAgICAgIFt0aXRsZV09XCIoJ0xJU1QuUEFHRVJfRklSU1QnIHwgdHJhbnNsYXRlKVwiPlxuICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8cGVwLWljb24gW25hbWVdPVwibGF5b3V0U2VydmljZS5pc1J0bCgpID8gJ2Fycm93X2JhY2tfcmlnaHQnIDogJ2Fycm93X2JhY2tfbGVmdCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB8fCBfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSB9XCJcbiAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHBlcC1zcGFjaW5nLWVsZW1lbnQgc20gd2Vha1wiIHBlcFJ0bERpcmVjdGlvbiBwZXBNZW51Qmx1ciAoY2xpY2spPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICBbdGl0bGVdPVwiKCdMSVNULlBBR0VSX1BSRVZJT1VTJyB8IHRyYW5zbGF0ZSlcIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImxheW91dFNlcnZpY2UuaXNSdGwoKSA/ICdhcnJvd19yaWdodCcgOiAnYXJyb3dfbGVmdCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxwZXAtdGV4dGJveCBwZXBBdXRvV2lkdGggY2xhc3M9XCJwYWdlLWluZGV4IHBlcC1zcGFjaW5nLWVsZW1lbnRcIiBba2V5XT1cIidwYWdlSW5kZXgnXCIgW3R5cGVdPVwiJ2ludCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbeEFsaWdubWVudF09XCInY2VudGVyJ1wiIFtyZW5kZXJUaXRsZV09XCJmYWxzZVwiIFtyZW5kZXJFcnJvcl09XCJmYWxzZVwiIFtyZW5kZXJTeW1ib2xdPVwiZmFsc2VcIlxuICAgICAgICBbdmFsdWVdPVwicGFnZUluZGV4ICsgMVwiIFttaW5WYWx1ZV09XCIxXCIgW21heFZhbHVlXT1cInRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpXCJcbiAgICAgICAgW21heEZpZWxkQ2hhcmFjdGVyc109XCI2XCIgW21hbmRhdG9yeV09XCJ0cnVlXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvcGVwLXRleHRib3g+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBfbmV4dEJ1dHRvbnNEaXNhYmxlZCgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQgfHwgX25leHRCdXR0b25zRGlzYWJsZWQoKSB9XCJcbiAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHBlcC1zcGFjaW5nLWVsZW1lbnQgc20gd2Vha1wiIHBlcFJ0bERpcmVjdGlvbiBwZXBNZW51Qmx1ciAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgIFt0aXRsZV09XCIoJ0xJU1QuUEFHRVJfTkVYVCcgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJsYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyAnYXJyb3dfbGVmdCcgOiAnYXJyb3dfcmlnaHQnXCI+PC9wZXAtaWNvbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0ZpcnN0TGFzdEJ1dHRvbnMgJiYgc2NyZWVuU2l6ZSA8PSBQZXBTY3JlZW5TaXplVHlwZS5NRFwiIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFoYXNOZXh0UGFnZSgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQgfHwgIWhhc05leHRQYWdlKCkgfVwiXG4gICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBwZXAtc3BhY2luZy1lbGVtZW50IHNtIHdlYWtcIiBwZXBSdGxEaXJlY3Rpb24gcGVwTWVudUJsdXIgKGNsaWNrKT1cImxhc3RQYWdlKClcIlxuICAgICAgICBbdGl0bGVdPVwiKCdMSVNULlBBR0VSX0xBU1QnIHwgdHJhbnNsYXRlKVwiPlxuICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8cGVwLWljb24gW25hbWVdPVwibGF5b3V0U2VydmljZS5pc1J0bCgpID8gJ2Fycm93X2JhY2tfbGVmdCcgOiAnYXJyb3dfYmFja19yaWdodCdcIj48L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudFwiPnt7ICdMSVNULlBBR0VSX09VVF9PRicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwZXAtc3BhY2luZy1lbGVtZW50XCI+e3sgZ2V0TnVtYmVyT2ZQYWdlcygpIH19PC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnZVNpemVTZWxlY3RvclwiPlxuICAgICAgICA8cGVwLXNlbGVjdCBwZXBBdXRvV2lkdGggY2xhc3M9XCJwYWdlLXNpemUgcGVwLXNwYWNpbmctZWxlbWVudFwiIFtrZXldPVwiJ3BhZ2VTaXplJ1wiIFt2YWx1ZV09XCJwYWdlU2l6ZT8udG9TdHJpbmcoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVuZGVyVGl0bGVdPVwiZmFsc2VcIiBbZW1wdHlPcHRpb25dPVwiZmFsc2VcIiBbb3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNGb3JTZWxlY3RcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L3BlcC1zZWxlY3Q+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGVwLXNwYWNpbmctZWxlbWVudFwiPnt7ICdMSVNULlBBR0VSX0lURU1TX1BFUl9QQUdFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|