verben-ng-ui 1.5.1 → 1.5.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/esm2022/src/lib/components/data-xport/data-xport.component.mjs +21 -3
- package/esm2022/src/lib/components/data-xport/data-xport.module.mjs +7 -3
- package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs +26 -4
- package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs.map +1 -1
- package/package.json +94 -94
- package/src/lib/components/data-xport/data-xport.component.d.ts +1 -0
- package/src/lib/components/data-xport/data-xport.module.d.ts +2 -1
|
@@ -9,6 +9,7 @@ import * as i4 from "verben-ng-ui/src/lib/components/svg";
|
|
|
9
9
|
import * as i5 from "verben-ng-ui/src/lib/components/card";
|
|
10
10
|
import * as i6 from "verben-ng-ui/src/lib/components/drop-down";
|
|
11
11
|
import * as i7 from "verben-ng-ui/src/lib/verbena-input";
|
|
12
|
+
import * as i8 from "verben-ng-ui/src/lib/verbena-button";
|
|
12
13
|
export class DataXportComponent {
|
|
13
14
|
exportService;
|
|
14
15
|
fb;
|
|
@@ -266,6 +267,23 @@ export class DataXportComponent {
|
|
|
266
267
|
}
|
|
267
268
|
}
|
|
268
269
|
}
|
|
270
|
+
exportAllData() {
|
|
271
|
+
const selectedProfiles = this.profiles.filter((profile) => profile.selected);
|
|
272
|
+
const dataQueryFunction = this.dataQueryFunction();
|
|
273
|
+
if (selectedProfiles.length > 0) {
|
|
274
|
+
if (dataQueryFunction) {
|
|
275
|
+
// this.exportDataRangeEvent.emit({ skip: this.skip, limit: this.limit });
|
|
276
|
+
dataQueryFunction({ skip: 0, limit: 0 }).then((data) => {
|
|
277
|
+
if (data) {
|
|
278
|
+
this.exportService.exportData(data, selectedProfiles, this.useImportKey, this.includeFooterInExport);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this.exportService.exportData(this.data, selectedProfiles, this.useImportKey, this.includeFooterInExport);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
269
287
|
isAnyProfileSelected() {
|
|
270
288
|
return this.profiles.some((profile) => profile.selected);
|
|
271
289
|
}
|
|
@@ -308,11 +326,11 @@ export class DataXportComponent {
|
|
|
308
326
|
: column.header;
|
|
309
327
|
}
|
|
310
328
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataXportComponent, deps: [{ token: i1.DataXportService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
311
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataXportComponent, selector: "lib-data-xport", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, useImportKey: { classPropertyName: "useImportKey", publicName: "useImportKey", isSignal: false, isRequired: false, transformFunction: null }, includeFooterInExport: { classPropertyName: "includeFooterInExport", publicName: "includeFooterInExport", isSignal: false, isRequired: false, transformFunction: null }, dataFetchUrl: { classPropertyName: "dataFetchUrl", publicName: "dataFetchUrl", isSignal: true, isRequired: false, transformFunction: null }, dataQueryParameters: { classPropertyName: "dataQueryParameters", publicName: "dataQueryParameters", isSignal: true, isRequired: false, transformFunction: null }, dataQueryFunction: { classPropertyName: "dataQueryFunction", publicName: "dataQueryFunction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportDataEvent: "exportDataEvent", exportDataRangeEvent: "exportDataRangeEvent" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n\n <div class=\"operation-grid\">\n <!-- First Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n fontSize=\"11px\"\n placeholder=\"Select field\"\n [options]=\"columnOptions\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n\n <!-- Operator/Join Selection -->\n <ng-container *ngIf=\"newOperation.type === 'arithmetic'\">\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"arithmeticOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"newOperation.operator\"\n fontSize=\"11px\"\n >\n </verben-drop-down>\n </ng-container>\n <ng-container *ngIf=\"newOperation.type === 'string'\">\n <verbena-input\n placeholder=\"Join by\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"newOperation.joinBy\"\n ></verbena-input>\n </ng-container>\n\n <!-- Second Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n\n <div class=\"flex gap-4 items-center\">\n <verbena-input\n placeholder=\"Skip\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"skip\"\n ></verbena-input>\n\n <span>-</span>\n\n <verbena-input\n placeholder=\"Limit\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"limit\"\n ></verbena-input>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportData()\"\n >\n Export\n </button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}.export-button:disabled{background-color:var(--vbn-color-surface-alt);color:var(--vbn-color-text-muted);cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio", "heading", "subheading", "variant", "interactive", "selected", "tag", "tagTone", "tagBgColor", "tagTextColor", "actions", "cornerPosition", "actionsOnHover", "collapsed"], outputs: ["collapsedChange", "action"] }, { kind: "directive", type: i5.CardSlotDirective, selector: "[card-header], [card-media], [card-actions]" }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "autoScrollToCurrentItem", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i7.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
|
|
329
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataXportComponent, selector: "lib-data-xport", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, useImportKey: { classPropertyName: "useImportKey", publicName: "useImportKey", isSignal: false, isRequired: false, transformFunction: null }, includeFooterInExport: { classPropertyName: "includeFooterInExport", publicName: "includeFooterInExport", isSignal: false, isRequired: false, transformFunction: null }, dataFetchUrl: { classPropertyName: "dataFetchUrl", publicName: "dataFetchUrl", isSignal: true, isRequired: false, transformFunction: null }, dataQueryParameters: { classPropertyName: "dataQueryParameters", publicName: "dataQueryParameters", isSignal: true, isRequired: false, transformFunction: null }, dataQueryFunction: { classPropertyName: "dataQueryFunction", publicName: "dataQueryFunction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exportDataEvent: "exportDataEvent", exportDataRangeEvent: "exportDataRangeEvent" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n\n <div class=\"operation-grid\">\n <!-- First Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n fontSize=\"11px\"\n placeholder=\"Select field\"\n [options]=\"columnOptions\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n\n <!-- Operator/Join Selection -->\n <ng-container *ngIf=\"newOperation.type === 'arithmetic'\">\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"arithmeticOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"newOperation.operator\"\n fontSize=\"11px\"\n >\n </verben-drop-down>\n </ng-container>\n <ng-container *ngIf=\"newOperation.type === 'string'\">\n <verbena-input\n placeholder=\"Join by\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"newOperation.joinBy\"\n ></verbena-input>\n </ng-container>\n\n <!-- Second Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n\n <div class=\"flex gap-4 items-center\">\n <verbena-input\n placeholder=\"Skip\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"skip\"\n ></verbena-input>\n\n <span>-</span>\n\n <verbena-input\n placeholder=\"Limit\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"limit\"\n ></verbena-input>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer flex gap-2\">\n <verbena-button\n (click)=\"exportData()\"\n styleType=\"secondary\"\n text=\"Export\"\n [disable]=\"!isAnyProfileSelected()\"\n ></verbena-button>\n <verbena-button\n (click)=\"exportAllData()\"\n styleType=\"secondary\"\n text=\"Export All\"\n [disable]=\"!isAnyProfileSelected()\"\n ></verbena-button>\n <!-- <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportData()\"\n >\n Export\n </button>\n <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportAllData()\"\n >\n Export All\n </button> -->\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}.export-button:disabled{background-color:var(--vbn-color-surface-alt);color:var(--vbn-color-text-muted);cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i5.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio", "heading", "subheading", "variant", "interactive", "selected", "tag", "tagTone", "tagBgColor", "tagTextColor", "actions", "cornerPosition", "actionsOnHover", "collapsed"], outputs: ["collapsedChange", "action"] }, { kind: "directive", type: i5.CardSlotDirective, selector: "[card-header], [card-media], [card-actions]" }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "autoScrollToCurrentItem", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i7.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["type", "text", "styleType", "size", "block", "disable", "disabled", "isLoading", "spinnerSize", "spinnerColor", "svg", "svgPosition", "svgWidth", "svgHeight", "svgSize", "svgColor", "icon", "useIcon", "iconPosition", "iconColor", "variant", "weight", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "buttonClass", "buttonTextClass"] }] });
|
|
312
330
|
}
|
|
313
331
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataXportComponent, decorators: [{
|
|
314
332
|
type: Component,
|
|
315
|
-
args: [{ selector: 'lib-data-xport', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n\n <div class=\"operation-grid\">\n <!-- First Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n fontSize=\"11px\"\n placeholder=\"Select field\"\n [options]=\"columnOptions\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n\n <!-- Operator/Join Selection -->\n <ng-container *ngIf=\"newOperation.type === 'arithmetic'\">\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"arithmeticOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"newOperation.operator\"\n fontSize=\"11px\"\n >\n </verben-drop-down>\n </ng-container>\n <ng-container *ngIf=\"newOperation.type === 'string'\">\n <verbena-input\n placeholder=\"Join by\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"newOperation.joinBy\"\n ></verbena-input>\n </ng-container>\n\n <!-- Second Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n\n <div class=\"flex gap-4 items-center\">\n <verbena-input\n placeholder=\"Skip\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"skip\"\n ></verbena-input>\n\n <span>-</span>\n\n <verbena-input\n placeholder=\"Limit\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"limit\"\n ></verbena-input>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportData()\"\n >\n Export\n </button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}.export-button:disabled{background-color:var(--vbn-color-surface-alt);color:var(--vbn-color-text-muted);cursor:not-allowed}\n"] }]
|
|
333
|
+
args: [{ selector: 'lib-data-xport', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n fontSize=\"11px\"\n height=\"20px\"\n pd=\"2px 4px !important\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n fill=\"var(--vbn-color-surface)\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n\n <div class=\"flex items-center justify-between\">\n <button\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"var(--vbn-color-text)\"\n stroke=\"var(--vbn-color-text)\"\n ></verben-svg>\n </button>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n\n <div class=\"operation-grid\">\n <!-- First Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n fontSize=\"11px\"\n placeholder=\"Select field\"\n [options]=\"columnOptions\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n\n <!-- Operator/Join Selection -->\n <ng-container *ngIf=\"newOperation.type === 'arithmetic'\">\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"arithmeticOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"newOperation.operator\"\n fontSize=\"11px\"\n >\n </verben-drop-down>\n </ng-container>\n <ng-container *ngIf=\"newOperation.type === 'string'\">\n <verbena-input\n placeholder=\"Join by\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"newOperation.joinBy\"\n ></verbena-input>\n </ng-container>\n\n <!-- Second Field Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n optionLabel=\"label\"\n optionValue=\"id\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button ml-auto\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Record Size</h3>\n </div>\n\n <div class=\"flex gap-4 items-center\">\n <verbena-input\n placeholder=\"Skip\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"skip\"\n ></verbena-input>\n\n <span>-</span>\n\n <verbena-input\n placeholder=\"Limit\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n fontSize=\"11px\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n bgColor=\"transparent\"\n [showBorder]=\"true\"\n [(ngModel)]=\"limit\"\n ></verbena-input>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer flex gap-2\">\n <verbena-button\n (click)=\"exportData()\"\n styleType=\"secondary\"\n text=\"Export\"\n [disable]=\"!isAnyProfileSelected()\"\n ></verbena-button>\n <verbena-button\n (click)=\"exportAllData()\"\n styleType=\"secondary\"\n text=\"Export All\"\n [disable]=\"!isAnyProfileSelected()\"\n ></verbena-button>\n <!-- <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportData()\"\n >\n Export\n </button>\n <button\n class=\"export-button\"\n [disabled]=\"!isAnyProfileSelected()\"\n (click)=\"exportAllData()\"\n >\n Export All\n </button> -->\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}.export-button:disabled{background-color:var(--vbn-color-surface-alt);color:var(--vbn-color-text-muted);cursor:not-allowed}\n"] }]
|
|
316
334
|
}], ctorParameters: () => [{ type: i1.DataXportService }, { type: i2.FormBuilder }], propDecorators: { data: [{
|
|
317
335
|
type: Input
|
|
318
336
|
}], columns: [{
|
|
@@ -326,4 +344,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
326
344
|
}], exportDataRangeEvent: [{
|
|
327
345
|
type: Output
|
|
328
346
|
}] } });
|
|
329
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS14cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVM5RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7QUFRdEQsTUFBTSxPQUFPLGtCQUFrQjtJQStDbkI7SUFDQTtJQS9DRCxJQUFJLENBQU87SUFDWCxPQUFPLENBQXlCO0lBQ3pDOztPQUVHO0lBQ00sWUFBWSxHQUFZLEtBQUssQ0FBQztJQUN2QywwRkFBMEY7SUFDakYscUJBQXFCLEdBQVksSUFBSSxDQUFDO0lBQy9DLFlBQVksR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUMvQixtQkFBbUIsR0FBRyxLQUFLLEVBQXlCLENBQUM7SUFDckQsaUJBQWlCLEdBQ2YsS0FBSyxFQUE0RCxDQUFDO0lBQzFELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUM1RCxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFHN0MsQ0FBQztJQUVMLFFBQVEsR0FBOEMsRUFBRSxDQUFDO0lBQ3pELFVBQVUsR0FBMkMsRUFBRSxDQUFDO0lBQ3hELFlBQVksQ0FBWTtJQUN4QixZQUFZLEdBQXVCO1FBQ2pDLEVBQUUsRUFBRSxFQUFF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QU0sQ0FBQyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQzt3R0EvV1Usa0JBQWtCOzRGQUFsQixrQkFBa0IsNnFDQ25CL0IsOGdTQWlTQTs7NEZEOVFhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7K0dBS2pCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBS0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFyaXRobWV0aWNPcGVyYXRpb24sXG4gIEV4cG9ydEl0ZW0sXG4gIEV4cG9ydFByb2ZpbGUsXG4gIE9wZXJhdGlvbixcbiAgU3RyaW5nT3BlcmF0aW9uLFxufSBmcm9tICcuL2RhdGEteHBvcnQudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YVhwb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS14cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzUHJpbnRhYmxlVmFsdWUgfSBmcm9tICcuL2RhdGEteHBvcnQudXRpbHMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS14cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEteHBvcnQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFYcG9ydENvbXBvbmVudDxUPiB7XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlXG4gICAqL1xuICBASW5wdXQoKSB1c2VJbXBvcnRLZXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEFwcGVuZCBhIGZvb3Rlci9zdW1tYXJ5IHJvdyAoZnJvbSBlYWNoIGNvbHVtbidzIGBmb290ZXJgL2Bmb290ZXJGbmApIHRvIHRoZSBleHBvcnQuICovXG4gIEBJbnB1dCgpIGluY2x1ZGVGb290ZXJJbkV4cG9ydDogYm9vbGVhbiA9IHRydWU7XG4gIGRhdGFGZXRjaFVybCA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0YVF1ZXJ5UGFyYW1ldGVycyA9IGlucHV0PFNlYXJjaFByb3BlcnR5VmFsdWVbXT4oKTtcbiAgZGF0YVF1ZXJ5RnVuY3Rpb24gPVxuICAgIGlucHV0PChyYW5nZTogeyBza2lwOiBudW1iZXI7IGxpbWl0OiBudW1iZXIgfSkgPT4gUHJvbWlzZTxUW10+PigpO1xuICBAT3V0cHV0KCkgZXhwb3J0RGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnREYXRhUmFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNraXA6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9PigpO1xuXG4gIHByb2ZpbGVzOiAoRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXSA9IFtdO1xuICBncm91cEl0ZW1zOiAoRXhwb3J0SXRlbSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXSA9IFtdO1xuICBuZXdHcm91cEZvcm06IEZvcm1Hcm91cDtcbiAgbmV3T3BlcmF0aW9uOiBQYXJ0aWFsPE9wZXJhdGlvbj4gPSB7XG4gICAgaWQ6ICcnLFxuICAgIG5hbWU6ICcnLFxuICAgIGZpZWxkMTogJycsXG4gICAgZmllbGQyOiAnJyxcbiAgICB0eXBlOiAnYXJpdGhtZXRpYycsXG4gIH0gYXMgQXJpdGhtZXRpY09wZXJhdGlvbjtcblxuICBudW1lcmljQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIHN0cmluZ0NvbHVtbnM6IENvbHVtbkRlZmluaXRpb248VD5bXSA9IFtdO1xuICBpc0VkaXRpbmdPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FsbFByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBbGxHcm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBhcml0aG1ldGljT3BlcmF0b3JzID0gW1xuICAgIHsgdmFsdWU6ICdhZGQnLCBsYWJlbDogJysnIH0sXG4gICAgeyB2YWx1ZTogJ3N1YnRyYWN0JywgbGFiZWw6ICctJyB9LFxuICAgIHsgdmFsdWU6ICdtdWx0aXBseScsIGxhYmVsOiAnw5cnIH0sXG4gICAgeyB2YWx1ZTogJ2RpdmlkZScsIGxhYmVsOiAnw7cnIH0sXG4gIF07XG5cbiAgc2tpcDogbnVsbCB8IG51bWJlciA9IG51bGw7XG4gIGxpbWl0OiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IERhdGFYcG9ydFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5uZXdHcm91cEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9maWxlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlUHJvZmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbFByb2ZpbGVzID8gdGhpcy5wcm9maWxlcyA6IHRoaXMucHJvZmlsZXMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsR3JvdXBzID8gdGhpcy5ncm91cEl0ZW1zIDogdGhpcy5ncm91cEl0ZW1zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgdmFsaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+XG4gICAgICAgIGNvbC5leHBvcnRCeSB8fFxuICAgICAgICAoY29sLmNhbkV4cG9ydCAhPT0gZmFsc2UgJiYgKGNvbC5hY2Nlc3NvcktleSB8fCBjb2wuYWNjZXNzb3JGbikpIHx8XG4gICAgICAgICh0aGlzLnVzZUltcG9ydEtleSAmJiBjb2wuaW1wb3J0S2V5KVxuICAgICk7XG4gICAgaWYgKHZhbGlkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2V0Q29sdW1ucyh2YWxpZENvbHVtbnMpO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5UeXBlcygpO1xuICAgICAgdGhpcy51cGRhdGVHcm91cEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5UeXBlcygpIHtcbiAgICBpZiAodGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNhbXBsZURhdGEgPSB0aGlzLmRhdGFbMF07XG5cbiAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSB0aGUgZW50aXJlIGZpcnN0IHBhcnQgb2YgdGhlIHRlbmVyeSBvbiBkZXByZWNhdGlvbiBvZiB0aGlzLnVzZUltcG9ydEtleVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIGlmIChjb2wuYWNjZXNzb3JLZXkgJiYgaXNQcmludGFibGVWYWx1ZShzYW1wbGVEYXRhW2NvbC5hY2Nlc3NvcktleV0pKSB7XG4gICAgICAgICAgdmFsdWUgPSBzYW1wbGVEYXRhW2NvbC5hY2Nlc3NvcktleV07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY29sLmFjY2Vzc29yRm4gJiZcbiAgICAgICAgICBpc1ByaW50YWJsZVZhbHVlKGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMudXNlSW1wb3J0S2V5ICYmXG4gICAgICAgICAgY29sLmltcG9ydEtleSAmJlxuICAgICAgICAgIGlzUHJpbnRhYmxlVmFsdWUoc2FtcGxlRGF0YVtjb2wuaW1wb3J0S2V5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBzYW1wbGVEYXRhW2NvbC5pbXBvcnRLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy51c2VJbXBvcnRLZXlcbiAgICAgICAgLy8gICA/IGNvbC5hY2Nlc3NvckZuICYmIHR5cGVvZiBjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKSA9PT0gJ251bWJlcidcbiAgICAgICAgLy8gICAgID8gY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSlcbiAgICAgICAgLy8gICAgIDogY29sLmltcG9ydEtleVxuICAgICAgICAvLyAgICAgPyBzYW1wbGVEYXRhW2NvbC5pbXBvcnRLZXldXG4gICAgICAgIC8vICAgICA6IG51bGxcbiAgICAgICAgLy8gICA6IGNvbC5hY2Nlc3NvckZuXG4gICAgICAgIC8vICAgPyBjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKVxuICAgICAgICAvLyAgIDogY29sLmFjY2Vzc29yS2V5XG4gICAgICAgIC8vICAgPyBzYW1wbGVEYXRhW2NvbC5hY2Nlc3NvcktleV1cbiAgICAgICAgLy8gICA6IG51bGw7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3RyaW5nQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlIHRoZSBlbnRpcmUgZmlyc3QgcGFydCBvZiB0aGUgdGVuZXJ5IG9uIGRlcHJlY2F0aW9uIG9mIHRoaXMudXNlSW1wb3J0S2V5XG4gICAgICAgICAqL1xuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbC5hY2Nlc3NvcktleSAmJiBpc1ByaW50YWJsZVZhbHVlKHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjb2wuYWNjZXNzb3JGbiAmJlxuICAgICAgICAgIGlzUHJpbnRhYmxlVmFsdWUoY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXkgJiZcbiAgICAgICAgICBjb2wuaW1wb3J0S2V5ICYmXG4gICAgICAgICAgaXNQcmludGFibGVWYWx1ZShzYW1wbGVEYXRhW2NvbC5pbXBvcnRLZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IHNhbXBsZURhdGFbY29sLmltcG9ydEtleV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgdmFsdWUgPSB0aGlzLnVzZUltcG9ydEtleVxuICAgICAgICAvLyAgID8gY29sLmFjY2Vzc29yRm4gJiYgdHlwZW9mIGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpID09PSAnc3RyaW5nJ1xuICAgICAgICAvLyAgICAgPyBjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKVxuICAgICAgICAvLyAgICAgOiBjb2wuaW1wb3J0S2V5XG4gICAgICAgIC8vICAgICA/IHNhbXBsZURhdGFbY29sLmltcG9ydEtleV1cbiAgICAgICAgLy8gICAgIDogbnVsbFxuICAgICAgICAvLyAgIDogY29sLmFjY2Vzc29yRm5cbiAgICAgICAgLy8gICA/IGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpXG4gICAgICAgIC8vICAgOiBjb2wuYWNjZXNzb3JLZXlcbiAgICAgICAgLy8gICA/IHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XVxuICAgICAgICAvLyAgIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9maWxlcygpIHtcbiAgICB0aGlzLnByb2ZpbGVzID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldFByb2ZpbGVzKCkubWFwKChwcm9maWxlKSA9PiAoe1xuICAgICAgLi4ucHJvZmlsZSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB1cGRhdGVHcm91cEl0ZW1zKCkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcyA9IHRoaXMuZXhwb3J0U2VydmljZS5nZXRBbGxJdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgYWRkR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMubmV3R3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5ncm91cEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1Byb2ZpbGU6IEV4cG9ydFByb2ZpbGUgPSB7XG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiB0aGlzLm5ld0dyb3VwRm9ybS5nZXQoJ25hbWUnKT8udmFsdWUsXG4gICAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5hZGRQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWRpdFByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gcHJvZmlsZS5pdGVtcy5zb21lKFxuICAgICAgICAocHJvZmlsZUl0ZW0pID0+IHByb2ZpbGVJdGVtLmlkID09PSBpdGVtLmlkXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlUHJvZmlsZShwcm9maWxlKTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVQcm9maWxlKHByb2ZpbGUuaWQpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIGFkZE9yVXBkYXRlT3BlcmF0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLm5hbWUgJiZcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSAmJlxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyXG4gICAgKSB7XG4gICAgICBjb25zdCBvcGVyYXRpb246IE9wZXJhdGlvbiA9XG4gICAgICAgIHRoaXMubmV3T3BlcmF0aW9uLnR5cGUgPT09ICdhcml0aG1ldGljJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5pc0VkaXRpbmdPcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHRoaXMubmV3T3BlcmF0aW9uLmlkIVxuICAgICAgICAgICAgICAgIDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld09wZXJhdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDE6IHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSxcbiAgICAgICAgICAgICAgZmllbGQyOiB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIsXG4gICAgICAgICAgICAgIHR5cGU6ICdhcml0aG1ldGljJyxcbiAgICAgICAgICAgICAgb3BlcmF0b3I6XG4gICAgICAgICAgICAgICAgKHRoaXMubmV3T3BlcmF0aW9uIGFzIEFyaXRobWV0aWNPcGVyYXRpb24pLm9wZXJhdG9yIHx8ICdhZGQnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpZDogdGhpcy5pc0VkaXRpbmdPcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHRoaXMubmV3T3BlcmF0aW9uLmlkIVxuICAgICAgICAgICAgICAgIDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld09wZXJhdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDE6IHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSxcbiAgICAgICAgICAgICAgZmllbGQyOiB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIsXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBqb2luQnk6ICh0aGlzLm5ld09wZXJhdGlvbiBhcyBTdHJpbmdPcGVyYXRpb24pLmpvaW5CeSB8fCAnICcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5pc0VkaXRpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnVwZGF0ZU9wZXJhdGlvbihvcGVyYXRpb24uaWQsIG9wZXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICAgIHRoaXMucmVzZXRPcGVyYXRpb25Gb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdE9wZXJhdGlvbihvcGVyYXRpb246IEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBmb3VuZE9wZXJhdGlvbiA9IHRoaXMuZXhwb3J0U2VydmljZVxuICAgICAgLmdldE9wZXJhdGlvbnMoKVxuICAgICAgLmZpbmQoKG9wKSA9PiBvcC5pZCA9PT0gb3BlcmF0aW9uLmlkKTtcbiAgICBpZiAoZm91bmRPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uID0geyAuLi5mb3VuZE9wZXJhdGlvbiB9O1xuICAgICAgdGhpcy5pc0VkaXRpbmdPcGVyYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU9wZXJhdGlvbihvcGVyYXRpb246IEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVtb3ZlT3BlcmF0aW9uKG9wZXJhdGlvbi5pZCk7XG4gICAgdGhpcy51cGRhdGVHcm91cEl0ZW1zKCk7XG4gIH1cblxuICByZXNldE9wZXJhdGlvbkZvcm0oKSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24gPSB7XG4gICAgICBpZDogJycsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGZpZWxkMTogJycsXG4gICAgICBmaWVsZDI6ICcnLFxuICAgICAgdHlwZTogJ2FyaXRobWV0aWMnLFxuICAgICAgb3BlcmF0b3I6ICdhZGQnLFxuICAgIH0gYXMgQXJpdGhtZXRpY09wZXJhdGlvbjtcbiAgICB0aGlzLmlzRWRpdGluZ09wZXJhdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnJlc2V0QWxsKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgICB0aGlzLnJlc2V0T3BlcmF0aW9uRm9ybSgpO1xuICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gIH1cblxuICBleHBvcnREYXRhKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmZpbHRlcihcbiAgICAgIChwcm9maWxlKSA9PiBwcm9maWxlLnNlbGVjdGVkXG4gICAgKTtcbiAgICBjb25zdCBkYXRhUXVlcnlGdW5jdGlvbiA9IHRoaXMuZGF0YVF1ZXJ5RnVuY3Rpb24oKTtcblxuICAgIGlmIChzZWxlY3RlZFByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLnNraXAgIT09IG51bGwgJiYgdGhpcy5saW1pdCAhPT0gbnVsbCAmJiBkYXRhUXVlcnlGdW5jdGlvbikge1xuICAgICAgICAvLyB0aGlzLmV4cG9ydERhdGFSYW5nZUV2ZW50LmVtaXQoeyBza2lwOiB0aGlzLnNraXAsIGxpbWl0OiB0aGlzLmxpbWl0IH0pO1xuICAgICAgICBkYXRhUXVlcnlGdW5jdGlvbih7IHNraXA6IHRoaXMuc2tpcCwgbGltaXQ6IHRoaXMubGltaXQgfSkudGhlbihcbiAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEoXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFByb2ZpbGVzLFxuICAgICAgICAgICAgICAgIHRoaXMudXNlSW1wb3J0S2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaW5jbHVkZUZvb3RlckluRXhwb3J0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEoXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUHJvZmlsZXMsXG4gICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXksXG4gICAgICAgICAgdGhpcy5pbmNsdWRlRm9vdGVySW5FeHBvcnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0FueVByb2ZpbGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlcy5zb21lKChwcm9maWxlKSA9PiBwcm9maWxlLnNlbGVjdGVkKTtcbiAgfVxuXG4gIG9uRmllbGQxQ2hhbmdlKCkge1xuICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMiA9ICcnO1xuICAgIGNvbnN0IGlzTnVtZXJpYyA9IHRoaXMubnVtZXJpY0NvbHVtbnMuc29tZShcbiAgICAgIChjb2wpID0+IGNvbC5pZCA9PT0gdGhpcy5uZXdPcGVyYXRpb24uZmllbGQxXG4gICAgKTtcbiAgICB0aGlzLm5ld09wZXJhdGlvbi50eXBlID0gaXNOdW1lcmljID8gJ2FyaXRobWV0aWMnIDogJ3N0cmluZyc7XG4gICAgaWYgKGlzTnVtZXJpYykge1xuICAgICAgKHRoaXMubmV3T3BlcmF0aW9uIGFzIEFyaXRobWV0aWNPcGVyYXRpb24pLm9wZXJhdG9yID0gJ2FkZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICh0aGlzLm5ld09wZXJhdGlvbiBhcyBTdHJpbmdPcGVyYXRpb24pLmpvaW5CeSA9ICcgJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbHVtblRvT3B0aW9uKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogY29sdW1uLmlkLFxuICAgICAgbGFiZWw6XG4gICAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IGNvbHVtbixcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbHVtbk9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm51bWVyaWNDb2x1bW5zLCAuLi50aGlzLnN0cmluZ0NvbHVtbnNdLm1hcCgoY29sKSA9PlxuICAgICAgdGhpcy50cmFuc2Zvcm1Db2x1bW5Ub09wdGlvbihjb2wpXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVGaWVsZHMyKCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPVxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24udHlwZSA9PT0gJ2FyaXRobWV0aWMnXG4gICAgICAgID8gdGhpcy5udW1lcmljQ29sdW1uc1xuICAgICAgICA6IHRoaXMuc3RyaW5nQ29sdW1ucztcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gdGhpcy50cmFuc2Zvcm1Db2x1bW5Ub09wdGlvbihjb2wpKTtcbiAgfVxuXG4gIHRvZ2dsZVNob3dBbGxQcm9maWxlcygpIHtcbiAgICB0aGlzLnNob3dBbGxQcm9maWxlcyA9ICF0aGlzLnNob3dBbGxQcm9maWxlcztcbiAgfVxuXG4gIHRvZ2dsZVNob3dBbGxHcm91cHMoKSB7XG4gICAgdGhpcy5zaG93QWxsR3JvdXBzID0gIXRoaXMuc2hvd0FsbEdyb3VwcztcbiAgfVxuXG4gIGdldENvbHVtbkhlYWRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgY29sdW1uLmhlYWRlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBjb2x1bW4uaGVhZGVyKHt9KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiXG4gIGJnQ29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itc3VyZmFjZSlcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+RXhwb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvZmlsZXM8L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIHZpc2libGVQcm9maWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtpZF09XCIncHJvZmlsZS0nICsgaVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb2ZpbGUuc2VsZWN0ZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Byb2ZpbGUtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBwcm9maWxlLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiXG4gICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0UHJvZmlsZShwcm9maWxlKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItZXJyb3IpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9maWxlKHByb2ZpbGUpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByb2ZpbGVzLmxlbmd0aCA+IDNcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FsbFByb2ZpbGVzKClcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxQcm9maWxlcyA/IFwiU2hvdyBsZXNzXCIgOiBcIlNob3cgbW9yZVwiIH19PC9zcGFuPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJjaGV2cm9uXCJcbiAgICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Hcm91cDwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibmV3R3JvdXBGb3JtXCIgKG5nU3VibWl0KT1cImFkZEdyb3VwKClcIj5cbiAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkdyb3VwIG5hbWVcIlxuICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgICBwZD1cIjJweCA0cHggIWltcG9ydGFudFwiXG4gICAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8L2Zvcm0+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVHcm91cHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiJ2dyb3VwLScgKyBpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZ3JvdXAtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiICpuZ0lmPVwiaXRlbS50eXBlID09PSAnb3BlcmF0aW9uJ1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiXG4gICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0T3BlcmF0aW9uKGl0ZW0pXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXZibi1jb2xvci1lcnJvcilcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU9wZXJhdGlvbihpdGVtKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJncm91cEl0ZW1zLmxlbmd0aCA+IDNcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsR3JvdXBzKClcIlxuICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPnt7IHNob3dBbGxHcm91cHMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fTwvc3Bhbj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjhcIlxuICAgICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgc3Ryb2tlPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b25cIiAoY2xpY2spPVwiYWRkR3JvdXAoKVwiPisgQWRkPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPk9wZXJhdGlvbjwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3BlcmF0aW9uIG5hbWVcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgcGQ9XCIycHggNnB4XCJcbiAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLm5hbWVcIlxuICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPGRpdiBjbGFzcz1cIm9wZXJhdGlvbi1ncmlkXCI+XG4gICAgICAgIDwhLS0gRmlyc3QgRmllbGQgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIGZvbnRTaXplPVwiMTFweFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZmllbGRcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbk9wdGlvbnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLmZpZWxkMVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZDFDaGFuZ2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDwhLS0gT3BlcmF0b3IvSm9pbiBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuZXdPcGVyYXRpb24udHlwZSA9PT0gJ2FyaXRobWV0aWMnXCI+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJhcml0aG1ldGljT3BlcmF0b3JzXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5vcGVyYXRvclwiXG4gICAgICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmV3T3BlcmF0aW9uLnR5cGUgPT09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSm9pbiBieVwiXG4gICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgICAgICBiZ0NvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5qb2luQnlcIlxuICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gU2Vjb25kIEZpZWxkIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmaWVsZFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlRmllbGRzMlwiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdPcGVyYXRpb24uZmllbGQyXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uIG1sLWF1dG9cIiAoY2xpY2spPVwiYWRkT3JVcGRhdGVPcGVyYXRpb24oKVwiPlxuICAgICAgICB7eyBpc0VkaXRpbmdPcGVyYXRpb24gPyBcIlVwZGF0ZVwiIDogXCIrIEFkZFwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UmVjb3JkIFNpemU8L2gzPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2tpcFwiXG4gICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJza2lwXCJcbiAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgICA8c3Bhbj4tPC9zcGFuPlxuXG4gICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJMaW1pdFwiXG4gICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsaW1pdFwiXG4gICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImV4cG9ydC1idXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FueVByb2ZpbGVTZWxlY3RlZCgpXCJcbiAgICAgIChjbGljayk9XCJleHBvcnREYXRhKClcIlxuICAgID5cbiAgICAgIEV4cG9ydFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG4iXX0=
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS14cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVM5RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FBUXRELE1BQU0sT0FBTyxrQkFBa0I7SUErQ25CO0lBQ0E7SUEvQ0QsSUFBSSxDQUFPO0lBQ1gsT0FBTyxDQUF5QjtJQUN6Qzs7T0FFRztJQUNNLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDdkMsMEZBQTBGO0lBQ2pGLHFCQUFxQixHQUFZLElBQUksQ0FBQztJQUMvQyxZQUFZLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDL0IsbUJBQW1CLEdBQUcsS0FBSyxFQUF5QixDQUFDO0lBQ3JELGlCQUFpQixHQUNmLEtBQUssRUFBNEQsQ0FBQztJQUMxRCxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFDNUQsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBRzdDLENBQUM7SUFFTCxRQUFRLEdBQThDLEVBQUUsQ0FBQztJQUN6RCxVQUFVLEdBQTJDLEVBQUUsQ0FBQztJQUN4RCxZQUFZLENBQVk7SUFDeEIsWUFBWSxHQUF1QjtRQUNqQyxFQUFFLEVBQUUsRUFB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WTtzQkFBcEIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBS0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFyaXRobWV0aWNPcGVyYXRpb24sXG4gIEV4cG9ydEl0ZW0sXG4gIEV4cG9ydFByb2ZpbGUsXG4gIE9wZXJhdGlvbixcbiAgU3RyaW5nT3BlcmF0aW9uLFxufSBmcm9tICcuL2RhdGEteHBvcnQudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YVhwb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS14cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzUHJpbnRhYmxlVmFsdWUgfSBmcm9tICcuL2RhdGEteHBvcnQudXRpbHMnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS14cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEteHBvcnQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFYcG9ydENvbXBvbmVudDxUPiB7XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlXG4gICAqL1xuICBASW5wdXQoKSB1c2VJbXBvcnRLZXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEFwcGVuZCBhIGZvb3Rlci9zdW1tYXJ5IHJvdyAoZnJvbSBlYWNoIGNvbHVtbidzIGBmb290ZXJgL2Bmb290ZXJGbmApIHRvIHRoZSBleHBvcnQuICovXG4gIEBJbnB1dCgpIGluY2x1ZGVGb290ZXJJbkV4cG9ydDogYm9vbGVhbiA9IHRydWU7XG4gIGRhdGFGZXRjaFVybCA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0YVF1ZXJ5UGFyYW1ldGVycyA9IGlucHV0PFNlYXJjaFByb3BlcnR5VmFsdWVbXT4oKTtcbiAgZGF0YVF1ZXJ5RnVuY3Rpb24gPVxuICAgIGlucHV0PChyYW5nZTogeyBza2lwOiBudW1iZXI7IGxpbWl0OiBudW1iZXIgfSkgPT4gUHJvbWlzZTxUW10+PigpO1xuICBAT3V0cHV0KCkgZXhwb3J0RGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnREYXRhUmFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNraXA6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9PigpO1xuXG4gIHByb2ZpbGVzOiAoRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXSA9IFtdO1xuICBncm91cEl0ZW1zOiAoRXhwb3J0SXRlbSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXSA9IFtdO1xuICBuZXdHcm91cEZvcm06IEZvcm1Hcm91cDtcbiAgbmV3T3BlcmF0aW9uOiBQYXJ0aWFsPE9wZXJhdGlvbj4gPSB7XG4gICAgaWQ6ICcnLFxuICAgIG5hbWU6ICcnLFxuICAgIGZpZWxkMTogJycsXG4gICAgZmllbGQyOiAnJyxcbiAgICB0eXBlOiAnYXJpdGhtZXRpYycsXG4gIH0gYXMgQXJpdGhtZXRpY09wZXJhdGlvbjtcblxuICBudW1lcmljQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIHN0cmluZ0NvbHVtbnM6IENvbHVtbkRlZmluaXRpb248VD5bXSA9IFtdO1xuICBpc0VkaXRpbmdPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FsbFByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBbGxHcm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBhcml0aG1ldGljT3BlcmF0b3JzID0gW1xuICAgIHsgdmFsdWU6ICdhZGQnLCBsYWJlbDogJysnIH0sXG4gICAgeyB2YWx1ZTogJ3N1YnRyYWN0JywgbGFiZWw6ICctJyB9LFxuICAgIHsgdmFsdWU6ICdtdWx0aXBseScsIGxhYmVsOiAnw5cnIH0sXG4gICAgeyB2YWx1ZTogJ2RpdmlkZScsIGxhYmVsOiAnw7cnIH0sXG4gIF07XG5cbiAgc2tpcDogbnVsbCB8IG51bWJlciA9IG51bGw7XG4gIGxpbWl0OiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IERhdGFYcG9ydFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICkge1xuICAgIHRoaXMubmV3R3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmlzaWJsZVByb2ZpbGVzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxQcm9maWxlcyA/IHRoaXMucHJvZmlsZXMgOiB0aGlzLnByb2ZpbGVzLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVHcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbEdyb3VwcyA/IHRoaXMuZ3JvdXBJdGVtcyA6IHRoaXMuZ3JvdXBJdGVtcy5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIGluaXRpYWxpemVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHZhbGlkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sKSA9PlxuICAgICAgICBjb2wuZXhwb3J0QnkgfHxcbiAgICAgICAgKGNvbC5jYW5FeHBvcnQgIT09IGZhbHNlICYmIChjb2wuYWNjZXNzb3JLZXkgfHwgY29sLmFjY2Vzc29yRm4pKSB8fFxuICAgICAgICAodGhpcy51c2VJbXBvcnRLZXkgJiYgY29sLmltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAodmFsaWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5zZXRDb2x1bW5zKHZhbGlkQ29sdW1ucyk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtblR5cGVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtblR5cGVzKCkge1xuICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2FtcGxlRGF0YSA9IHRoaXMuZGF0YVswXTtcblxuICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlIHRoZSBlbnRpcmUgZmlyc3QgcGFydCBvZiB0aGUgdGVuZXJ5IG9uIGRlcHJlY2F0aW9uIG9mIHRoaXMudXNlSW1wb3J0S2V5XG4gICAgICAgICAqL1xuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbC5hY2Nlc3NvcktleSAmJiBpc1ByaW50YWJsZVZhbHVlKHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjb2wuYWNjZXNzb3JGbiAmJlxuICAgICAgICAgIGlzUHJpbnRhYmxlVmFsdWUoY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXkgJiZcbiAgICAgICAgICBjb2wuaW1wb3J0S2V5ICYmXG4gICAgICAgICAgaXNQcmludGFibGVWYWx1ZShzYW1wbGVEYXRhW2NvbC5pbXBvcnRLZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IHNhbXBsZURhdGFbY29sLmltcG9ydEtleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLnVzZUltcG9ydEtleVxuICAgICAgICAvLyAgID8gY29sLmFjY2Vzc29yRm4gJiYgdHlwZW9mIGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpID09PSAnbnVtYmVyJ1xuICAgICAgICAvLyAgICAgPyBjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKVxuICAgICAgICAvLyAgICAgOiBjb2wuaW1wb3J0S2V5XG4gICAgICAgIC8vICAgICA/IHNhbXBsZURhdGFbY29sLmltcG9ydEtleV1cbiAgICAgICAgLy8gICAgIDogbnVsbFxuICAgICAgICAvLyAgIDogY29sLmFjY2Vzc29yRm5cbiAgICAgICAgLy8gICA/IGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpXG4gICAgICAgIC8vICAgOiBjb2wuYWNjZXNzb3JLZXlcbiAgICAgICAgLy8gICA/IHNhbXBsZURhdGFbY29sLmFjY2Vzc29yS2V5XVxuICAgICAgICAvLyAgIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdHJpbmdDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmUgdGhlIGVudGlyZSBmaXJzdCBwYXJ0IG9mIHRoZSB0ZW5lcnkgb24gZGVwcmVjYXRpb24gb2YgdGhpcy51c2VJbXBvcnRLZXlcbiAgICAgICAgICovXG4gICAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgICBpZiAoY29sLmFjY2Vzc29yS2V5ICYmIGlzUHJpbnRhYmxlVmFsdWUoc2FtcGxlRGF0YVtjb2wuYWNjZXNzb3JLZXldKSkge1xuICAgICAgICAgIHZhbHVlID0gc2FtcGxlRGF0YVtjb2wuYWNjZXNzb3JLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNvbC5hY2Nlc3NvckZuICYmXG4gICAgICAgICAgaXNQcmludGFibGVWYWx1ZShjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBjb2wuYWNjZXNzb3JGbihzYW1wbGVEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLnVzZUltcG9ydEtleSAmJlxuICAgICAgICAgIGNvbC5pbXBvcnRLZXkgJiZcbiAgICAgICAgICBpc1ByaW50YWJsZVZhbHVlKHNhbXBsZURhdGFbY29sLmltcG9ydEtleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gc2FtcGxlRGF0YVtjb2wuaW1wb3J0S2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCB2YWx1ZSA9IHRoaXMudXNlSW1wb3J0S2V5XG4gICAgICAgIC8vICAgPyBjb2wuYWNjZXNzb3JGbiAmJiB0eXBlb2YgY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSkgPT09ICdzdHJpbmcnXG4gICAgICAgIC8vICAgICA/IGNvbC5hY2Nlc3NvckZuKHNhbXBsZURhdGEpXG4gICAgICAgIC8vICAgICA6IGNvbC5pbXBvcnRLZXlcbiAgICAgICAgLy8gICAgID8gc2FtcGxlRGF0YVtjb2wuaW1wb3J0S2V5XVxuICAgICAgICAvLyAgICAgOiBudWxsXG4gICAgICAgIC8vICAgOiBjb2wuYWNjZXNzb3JGblxuICAgICAgICAvLyAgID8gY29sLmFjY2Vzc29yRm4oc2FtcGxlRGF0YSlcbiAgICAgICAgLy8gICA6IGNvbC5hY2Nlc3NvcktleVxuICAgICAgICAvLyAgID8gc2FtcGxlRGF0YVtjb2wuYWNjZXNzb3JLZXldXG4gICAgICAgIC8vICAgOiBudWxsO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVByb2ZpbGVzKCkge1xuICAgIHRoaXMucHJvZmlsZXMgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2V0UHJvZmlsZXMoKS5tYXAoKHByb2ZpbGUpID0+ICh7XG4gICAgICAuLi5wcm9maWxlLFxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgIH0pKTtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwSXRlbXMoKSB7XG4gICAgdGhpcy5ncm91cEl0ZW1zID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldEFsbEl0ZW1zKCkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICBhZGRHcm91cCgpIHtcbiAgICBpZiAodGhpcy5uZXdHcm91cEZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdyb3VwSXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkKTtcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV3UHJvZmlsZTogRXhwb3J0UHJvZmlsZSA9IHtcbiAgICAgICAgICBpZDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICAgIG5hbWU6IHRoaXMubmV3R3JvdXBGb3JtLmdldCgnbmFtZScpPy52YWx1ZSxcbiAgICAgICAgICBpdGVtczogc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmFkZFByb2ZpbGUobmV3UHJvZmlsZSk7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgICAgICAgdGhpcy5ncm91cEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5uZXdHcm91cEZvcm0ucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0UHJvZmlsZShwcm9maWxlOiBFeHBvcnRQcm9maWxlICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5ncm91cEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBwcm9maWxlLml0ZW1zLnNvbWUoXG4gICAgICAgIChwcm9maWxlSXRlbSkgPT4gcHJvZmlsZUl0ZW0uaWQgPT09IGl0ZW0uaWQsXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlUHJvZmlsZShwcm9maWxlKTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVQcm9maWxlKHByb2ZpbGUuaWQpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIGFkZE9yVXBkYXRlT3BlcmF0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLm5hbWUgJiZcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSAmJlxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyXG4gICAgKSB7XG4gICAgICBjb25zdCBvcGVyYXRpb246IE9wZXJhdGlvbiA9XG4gICAgICAgIHRoaXMubmV3T3BlcmF0aW9uLnR5cGUgPT09ICdhcml0aG1ldGljJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5pc0VkaXRpbmdPcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHRoaXMubmV3T3BlcmF0aW9uLmlkIVxuICAgICAgICAgICAgICAgIDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld09wZXJhdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDE6IHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSxcbiAgICAgICAgICAgICAgZmllbGQyOiB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIsXG4gICAgICAgICAgICAgIHR5cGU6ICdhcml0aG1ldGljJyxcbiAgICAgICAgICAgICAgb3BlcmF0b3I6XG4gICAgICAgICAgICAgICAgKHRoaXMubmV3T3BlcmF0aW9uIGFzIEFyaXRobWV0aWNPcGVyYXRpb24pLm9wZXJhdG9yIHx8ICdhZGQnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpZDogdGhpcy5pc0VkaXRpbmdPcGVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHRoaXMubmV3T3BlcmF0aW9uLmlkIVxuICAgICAgICAgICAgICAgIDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld09wZXJhdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDE6IHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSxcbiAgICAgICAgICAgICAgZmllbGQyOiB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIsXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBqb2luQnk6ICh0aGlzLm5ld09wZXJhdGlvbiBhcyBTdHJpbmdPcGVyYXRpb24pLmpvaW5CeSB8fCAnICcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5pc0VkaXRpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnVwZGF0ZU9wZXJhdGlvbihvcGVyYXRpb24uaWQsIG9wZXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICAgIHRoaXMucmVzZXRPcGVyYXRpb25Gb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdE9wZXJhdGlvbihvcGVyYXRpb246IEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBmb3VuZE9wZXJhdGlvbiA9IHRoaXMuZXhwb3J0U2VydmljZVxuICAgICAgLmdldE9wZXJhdGlvbnMoKVxuICAgICAgLmZpbmQoKG9wKSA9PiBvcC5pZCA9PT0gb3BlcmF0aW9uLmlkKTtcbiAgICBpZiAoZm91bmRPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uID0geyAuLi5mb3VuZE9wZXJhdGlvbiB9O1xuICAgICAgdGhpcy5pc0VkaXRpbmdPcGVyYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU9wZXJhdGlvbihvcGVyYXRpb246IEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVtb3ZlT3BlcmF0aW9uKG9wZXJhdGlvbi5pZCk7XG4gICAgdGhpcy51cGRhdGVHcm91cEl0ZW1zKCk7XG4gIH1cblxuICByZXNldE9wZXJhdGlvbkZvcm0oKSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24gPSB7XG4gICAgICBpZDogJycsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGZpZWxkMTogJycsXG4gICAgICBmaWVsZDI6ICcnLFxuICAgICAgdHlwZTogJ2FyaXRobWV0aWMnLFxuICAgICAgb3BlcmF0b3I6ICdhZGQnLFxuICAgIH0gYXMgQXJpdGhtZXRpY09wZXJhdGlvbjtcbiAgICB0aGlzLmlzRWRpdGluZ09wZXJhdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnJlc2V0QWxsKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgICB0aGlzLnJlc2V0T3BlcmF0aW9uRm9ybSgpO1xuICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gIH1cblxuICBleHBvcnREYXRhKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmZpbHRlcihcbiAgICAgIChwcm9maWxlKSA9PiBwcm9maWxlLnNlbGVjdGVkLFxuICAgICk7XG4gICAgY29uc3QgZGF0YVF1ZXJ5RnVuY3Rpb24gPSB0aGlzLmRhdGFRdWVyeUZ1bmN0aW9uKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRQcm9maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5za2lwICE9PSBudWxsICYmIHRoaXMubGltaXQgIT09IG51bGwgJiYgZGF0YVF1ZXJ5RnVuY3Rpb24pIHtcbiAgICAgICAgLy8gdGhpcy5leHBvcnREYXRhUmFuZ2VFdmVudC5lbWl0KHsgc2tpcDogdGhpcy5za2lwLCBsaW1pdDogdGhpcy5saW1pdCB9KTtcbiAgICAgICAgZGF0YVF1ZXJ5RnVuY3Rpb24oeyBza2lwOiB0aGlzLnNraXAsIGxpbWl0OiB0aGlzLmxpbWl0IH0pLnRoZW4oXG4gICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnREYXRhKFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9maWxlcyxcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUltcG9ydEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmluY2x1ZGVGb290ZXJJbkV4cG9ydCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEoXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUHJvZmlsZXMsXG4gICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXksXG4gICAgICAgICAgdGhpcy5pbmNsdWRlRm9vdGVySW5FeHBvcnQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0QWxsRGF0YSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFByb2ZpbGVzID0gdGhpcy5wcm9maWxlcy5maWx0ZXIoXG4gICAgICAocHJvZmlsZSkgPT4gcHJvZmlsZS5zZWxlY3RlZCxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFRdWVyeUZ1bmN0aW9uID0gdGhpcy5kYXRhUXVlcnlGdW5jdGlvbigpO1xuXG4gICAgaWYgKHNlbGVjdGVkUHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGRhdGFRdWVyeUZ1bmN0aW9uKSB7XG4gICAgICAgIC8vIHRoaXMuZXhwb3J0RGF0YVJhbmdlRXZlbnQuZW1pdCh7IHNraXA6IHRoaXMuc2tpcCwgbGltaXQ6IHRoaXMubGltaXQgfSk7XG4gICAgICAgIGRhdGFRdWVyeUZ1bmN0aW9uKHsgc2tpcDogMCwgbGltaXQ6IDAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YShcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9maWxlcyxcbiAgICAgICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXksXG4gICAgICAgICAgICAgIHRoaXMuaW5jbHVkZUZvb3RlckluRXhwb3J0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEoXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUHJvZmlsZXMsXG4gICAgICAgICAgdGhpcy51c2VJbXBvcnRLZXksXG4gICAgICAgICAgdGhpcy5pbmNsdWRlRm9vdGVySW5FeHBvcnQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNBbnlQcm9maWxlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZXMuc29tZSgocHJvZmlsZSkgPT4gcHJvZmlsZS5zZWxlY3RlZCk7XG4gIH1cblxuICBvbkZpZWxkMUNoYW5nZSgpIHtcbiAgICB0aGlzLm5ld09wZXJhdGlvbi5maWVsZDIgPSAnJztcbiAgICBjb25zdCBpc051bWVyaWMgPSB0aGlzLm51bWVyaWNDb2x1bW5zLnNvbWUoXG4gICAgICAoY29sKSA9PiBjb2wuaWQgPT09IHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSxcbiAgICApO1xuICAgIHRoaXMubmV3T3BlcmF0aW9uLnR5cGUgPSBpc051bWVyaWMgPyAnYXJpdGhtZXRpYycgOiAnc3RyaW5nJztcbiAgICBpZiAoaXNOdW1lcmljKSB7XG4gICAgICAodGhpcy5uZXdPcGVyYXRpb24gYXMgQXJpdGhtZXRpY09wZXJhdGlvbikub3BlcmF0b3IgPSAnYWRkJztcbiAgICB9IGVsc2Uge1xuICAgICAgKHRoaXMubmV3T3BlcmF0aW9uIGFzIFN0cmluZ09wZXJhdGlvbikuam9pbkJ5ID0gJyAnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29sdW1uVG9PcHRpb24oY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICBsYWJlbDpcbiAgICAgICAgdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb2x1bW4uaGVhZGVyKHt9KSA6IGNvbHVtbi5oZWFkZXIsXG4gICAgICBvcmlnaW5hbENvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICBnZXQgY29sdW1uT3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubnVtZXJpY0NvbHVtbnMsIC4uLnRoaXMuc3RyaW5nQ29sdW1uc10ubWFwKChjb2wpID0+XG4gICAgICB0aGlzLnRyYW5zZm9ybUNvbHVtblRvT3B0aW9uKGNvbCksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVGaWVsZHMyKCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPVxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24udHlwZSA9PT0gJ2FyaXRobWV0aWMnXG4gICAgICAgID8gdGhpcy5udW1lcmljQ29sdW1uc1xuICAgICAgICA6IHRoaXMuc3RyaW5nQ29sdW1ucztcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gdGhpcy50cmFuc2Zvcm1Db2x1bW5Ub09wdGlvbihjb2wpKTtcbiAgfVxuXG4gIHRvZ2dsZVNob3dBbGxQcm9maWxlcygpIHtcbiAgICB0aGlzLnNob3dBbGxQcm9maWxlcyA9ICF0aGlzLnNob3dBbGxQcm9maWxlcztcbiAgfVxuXG4gIHRvZ2dsZVNob3dBbGxHcm91cHMoKSB7XG4gICAgdGhpcy5zaG93QWxsR3JvdXBzID0gIXRoaXMuc2hvd0FsbEdyb3VwcztcbiAgfVxuXG4gIGdldENvbHVtbkhlYWRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgY29sdW1uLmhlYWRlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBjb2x1bW4uaGVhZGVyKHt9KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLXByaW1hcnkpJ1wiXG4gIGJnQ29sb3I9XCJ2YXIoLS12Ym4tY29sb3Itc3VyZmFjZSlcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+RXhwb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvZmlsZXM8L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIHZpc2libGVQcm9maWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtpZF09XCIncHJvZmlsZS0nICsgaVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb2ZpbGUuc2VsZWN0ZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Byb2ZpbGUtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBwcm9maWxlLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiXG4gICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0UHJvZmlsZShwcm9maWxlKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItZXJyb3IpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9maWxlKHByb2ZpbGUpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByb2ZpbGVzLmxlbmd0aCA+IDNcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FsbFByb2ZpbGVzKClcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxQcm9maWxlcyA/IFwiU2hvdyBsZXNzXCIgOiBcIlNob3cgbW9yZVwiIH19PC9zcGFuPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJjaGV2cm9uXCJcbiAgICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Hcm91cDwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibmV3R3JvdXBGb3JtXCIgKG5nU3VibWl0KT1cImFkZEdyb3VwKClcIj5cbiAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkdyb3VwIG5hbWVcIlxuICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgICBwZD1cIjJweCA0cHggIWltcG9ydGFudFwiXG4gICAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8L2Zvcm0+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVHcm91cHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiJ2dyb3VwLScgKyBpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZ3JvdXAtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiICpuZ0lmPVwiaXRlbS50eXBlID09PSAnb3BlcmF0aW9uJ1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKVwiXG4gICAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0T3BlcmF0aW9uKGl0ZW0pXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXZibi1jb2xvci1lcnJvcilcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU9wZXJhdGlvbihpdGVtKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJncm91cEl0ZW1zLmxlbmd0aCA+IDNcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsR3JvdXBzKClcIlxuICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuPnt7IHNob3dBbGxHcm91cHMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fTwvc3Bhbj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjhcIlxuICAgICAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgc3Ryb2tlPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b25cIiAoY2xpY2spPVwiYWRkR3JvdXAoKVwiPisgQWRkPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPk9wZXJhdGlvbjwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3BlcmF0aW9uIG5hbWVcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgICAgcGQ9XCIycHggNnB4XCJcbiAgICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLm5hbWVcIlxuICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPGRpdiBjbGFzcz1cIm9wZXJhdGlvbi1ncmlkXCI+XG4gICAgICAgIDwhLS0gRmlyc3QgRmllbGQgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIGZvbnRTaXplPVwiMTFweFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZmllbGRcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbk9wdGlvbnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLmZpZWxkMVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZDFDaGFuZ2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDwhLS0gT3BlcmF0b3IvSm9pbiBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuZXdPcGVyYXRpb24udHlwZSA9PT0gJ2FyaXRobWV0aWMnXCI+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJhcml0aG1ldGljT3BlcmF0b3JzXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5vcGVyYXRvclwiXG4gICAgICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmV3T3BlcmF0aW9uLnR5cGUgPT09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSm9pbiBieVwiXG4gICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICBmb250U2l6ZT1cIjExcHhcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgICAgICBiZ0NvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5qb2luQnlcIlxuICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gU2Vjb25kIEZpZWxkIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmaWVsZFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlRmllbGRzMlwiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdPcGVyYXRpb24uZmllbGQyXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uIG1sLWF1dG9cIiAoY2xpY2spPVwiYWRkT3JVcGRhdGVPcGVyYXRpb24oKVwiPlxuICAgICAgICB7eyBpc0VkaXRpbmdPcGVyYXRpb24gPyBcIlVwZGF0ZVwiIDogXCIrIEFkZFwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UmVjb3JkIFNpemU8L2gzPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2tpcFwiXG4gICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJza2lwXCJcbiAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgICA8c3Bhbj4tPC9zcGFuPlxuXG4gICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJMaW1pdFwiXG4gICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgZm9udFNpemU9XCIxMXB4XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsaW1pdFwiXG4gICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXIgZmxleCBnYXAtMlwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEoKVwiXG4gICAgICBzdHlsZVR5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgdGV4dD1cIkV4cG9ydFwiXG4gICAgICBbZGlzYWJsZV09XCIhaXNBbnlQcm9maWxlU2VsZWN0ZWQoKVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAoY2xpY2spPVwiZXhwb3J0QWxsRGF0YSgpXCJcbiAgICAgIHN0eWxlVHlwZT1cInNlY29uZGFyeVwiXG4gICAgICB0ZXh0PVwiRXhwb3J0IEFsbFwiXG4gICAgICBbZGlzYWJsZV09XCIhaXNBbnlQcm9maWxlU2VsZWN0ZWQoKVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgPCEtLSA8YnV0dG9uXG4gICAgICBjbGFzcz1cImV4cG9ydC1idXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0FueVByb2ZpbGVTZWxlY3RlZCgpXCJcbiAgICAgIChjbGljayk9XCJleHBvcnREYXRhKClcIlxuICAgID5cbiAgICAgIEV4cG9ydFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQW55UHJvZmlsZVNlbGVjdGVkKClcIlxuICAgICAgKGNsaWNrKT1cImV4cG9ydEFsbERhdGEoKVwiXG4gICAgPlxuICAgICAgRXhwb3J0IEFsbFxuICAgIDwvYnV0dG9uPiAtLT5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
|
|
@@ -8,6 +8,7 @@ import { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';
|
|
|
8
8
|
import { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';
|
|
9
9
|
import { DataXportService } from './data-xport.service';
|
|
10
10
|
import { DataXportComponent } from './data-xport.component';
|
|
11
|
+
import { VerbenaButtonModule } from 'verben-ng-ui/src/lib/verbena-button';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
export class DataXportModule {
|
|
13
14
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataXportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -18,7 +19,8 @@ export class DataXportModule {
|
|
|
18
19
|
CardModule,
|
|
19
20
|
DropDownModule,
|
|
20
21
|
TooltipModule,
|
|
21
|
-
VerbenaInputModule
|
|
22
|
+
VerbenaInputModule,
|
|
23
|
+
VerbenaButtonModule], exports: [DataXportComponent] });
|
|
22
24
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataXportModule, providers: [DataXportService], imports: [CommonModule,
|
|
23
25
|
FormsModule,
|
|
24
26
|
ReactiveFormsModule,
|
|
@@ -26,7 +28,8 @@ export class DataXportModule {
|
|
|
26
28
|
CardModule,
|
|
27
29
|
DropDownModule,
|
|
28
30
|
TooltipModule,
|
|
29
|
-
VerbenaInputModule
|
|
31
|
+
VerbenaInputModule,
|
|
32
|
+
VerbenaButtonModule] });
|
|
30
33
|
}
|
|
31
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataXportModule, decorators: [{
|
|
32
35
|
type: NgModule,
|
|
@@ -41,9 +44,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
41
44
|
DropDownModule,
|
|
42
45
|
TooltipModule,
|
|
43
46
|
VerbenaInputModule,
|
|
47
|
+
VerbenaButtonModule,
|
|
44
48
|
],
|
|
45
49
|
providers: [DataXportService],
|
|
46
50
|
exports: [DataXportComponent],
|
|
47
51
|
}]
|
|
48
52
|
}] });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS14cG9ydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFrQjFFLE1BQU0sT0FBTyxlQUFlO3dHQUFmLGVBQWU7eUdBQWYsZUFBZSxpQkFmWCxrQkFBa0IsYUFFL0IsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsU0FBUztZQUNULFVBQVU7WUFDVixjQUFjO1lBQ2QsYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixtQkFBbUIsYUFHWCxrQkFBa0I7eUdBRWpCLGVBQWUsYUFIZixDQUFDLGdCQUFnQixDQUFDLFlBVjNCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLFNBQVM7WUFDVCxVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsbUJBQW1COzs0RkFLVixlQUFlO2tCQWhCM0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixtQkFBbUI7cUJBQ3BCO29CQUNELFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ZnTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9zdmcnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZCc7XG5pbXBvcnQgeyBEcm9wRG93bk1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcC1kb3duJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVmVyYmVuYUlucHV0TW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS1pbnB1dCc7XG5pbXBvcnQgeyBEYXRhWHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVhwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLXhwb3J0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWZXJiZW5hQnV0dG9uTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS1idXR0b24nO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtEYXRhWHBvcnRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU3ZnTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgRHJvcERvd25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBWZXJiZW5hSW5wdXRNb2R1bGUsXG4gICAgVmVyYmVuYUJ1dHRvbk1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGF0YVhwb3J0U2VydmljZV0sXG4gIGV4cG9ydHM6IFtEYXRhWHBvcnRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhWHBvcnRNb2R1bGUge31cbiJdfQ==
|