@cqa-lib/cqa-ui 1.1.515 → 1.1.516
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/export-code-modal/export-code-modal.component.mjs +8 -7
- package/esm2020/lib/templates/table-template.component.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +8 -6
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +8 -6
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/export-code-modal/export-code-modal.component.d.ts +2 -0
- package/lib/templates/table-template.component.d.ts +2 -0
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -16,6 +16,7 @@ export class ExportCodeModalComponent {
|
|
|
16
16
|
this.closeModal = new EventEmitter();
|
|
17
17
|
this.export = new EventEmitter();
|
|
18
18
|
this.exportOnLocal = true;
|
|
19
|
+
this.framework = 'WEBDRIVER_IO';
|
|
19
20
|
this.emailList = [];
|
|
20
21
|
this.showEmailError = false;
|
|
21
22
|
this.isDialogMode = false;
|
|
@@ -47,6 +48,7 @@ export class ExportCodeModalComponent {
|
|
|
47
48
|
}
|
|
48
49
|
// Reset form when closing
|
|
49
50
|
this.exportOnLocal = true;
|
|
51
|
+
this.framework = 'WEBDRIVER_IO';
|
|
50
52
|
this.emailList = [];
|
|
51
53
|
this.emailInputControl.reset();
|
|
52
54
|
this.showEmailError = false;
|
|
@@ -107,10 +109,9 @@ export class ExportCodeModalComponent {
|
|
|
107
109
|
return;
|
|
108
110
|
}
|
|
109
111
|
// Emit export event with appropriate data
|
|
110
|
-
const result = this.exportOnLocal
|
|
111
|
-
type: '
|
|
112
|
-
emails: this.emailList
|
|
113
|
-
};
|
|
112
|
+
const result = this.exportOnLocal
|
|
113
|
+
? { type: 'local', framework: this.framework }
|
|
114
|
+
: { type: 'email', emails: this.emailList, framework: this.framework };
|
|
114
115
|
if (this.isDialogMode && this.dialogRef) {
|
|
115
116
|
this.dialogRef.close(result);
|
|
116
117
|
}
|
|
@@ -120,10 +121,10 @@ export class ExportCodeModalComponent {
|
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
ExportCodeModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }, { token: i1.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
-
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose how you want to export the test case code:</p>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Export Options -->\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
124
|
+
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Framework Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n (click)=\"framework = 'WEBDRIVER_IO'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'WEBDRIVER_IO'\"\n (click)=\"$event.stopPropagation()\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n (click)=\"framework = 'SELENIUM_JAVA'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'SELENIUM_JAVA'\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Export Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
124
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, decorators: [{
|
|
125
126
|
type: Component,
|
|
126
|
-
args: [{ selector: 'cqa-export-code-modal', template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose
|
|
127
|
+
args: [{ selector: 'cqa-export-code-modal', template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Framework Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n (click)=\"framework = 'WEBDRIVER_IO'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'WEBDRIVER_IO'\"\n (click)=\"$event.stopPropagation()\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n (click)=\"framework = 'SELENIUM_JAVA'\">\n <div class=\"cqa-flex cqa-items-center\">\n <input\n type=\"radio\"\n [checked]=\"framework === 'SELENIUM_JAVA'\"\n name=\"framework\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Export Options -->\n <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div\n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
127
128
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
128
129
|
type: Optional
|
|
129
130
|
}, {
|
|
@@ -142,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
142
143
|
}], export: [{
|
|
143
144
|
type: Output
|
|
144
145
|
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWNvZGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leHBvcnQtY29kZS1tb2RhbC9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4cG9ydC1jb2RlLW1vZGFsL2V4cG9ydC1jb2RlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWtCekUsTUFBTSxPQUFPLHdCQUF3QjtJQWNuQyxZQUM4QyxTQUErQixFQUN2RCxTQUFrRDtRQUQxQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQWYvRCxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUV6QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtELENBQUM7UUFFL0Usa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQU1uQyxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxVQUFVLENBQUMsS0FBSztT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QUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7O3FIQWxJVSx3QkFBd0Isa0JBZWIsZUFBZTt5R0FmMUIsd0JBQXdCLDBMQ3BCckMsczFOQTRKQTsyRkR4SWEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1Qjs7MEJBbUI5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzRDQWZGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZSB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvZGVNb2RhbERhdGEge1xuICBjb3VudD86IG51bWJlcjtcbiAgY2FzZXM/OiBUZXN0Q2FzZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1leHBvcnQtY29kZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29kZU1vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNhc2VzOiBUZXN0Q2FzZVtdID0gW107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdIH0+KCk7XG5cbiAgcHVibGljIGV4cG9ydE9uTG9jYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZW1haWxMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZW1haWxJbnB1dENvbnRyb2w6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgc2hvd0VtYWlsRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRGlhbG9nTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgbW9kYWxEYXRhPzogRXhwb3J0Q29kZU1vZGFsRGF0YSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxFeHBvcnRDb2RlTW9kYWxDb21wb25lbnQ+XG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgZW1haWwgaW5wdXQgY29udHJvbCB3aXRoIHZhbGlkYXRpb25cbiAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgICBWYWxpZGF0b3JzLmVtYWlsXG4gICAgXSk7XG5cbiAgICAvLyBJZiB1c2VkIHdpdGggTWF0RGlhbG9nLCBpbml0aWFsaXplIGZyb20gbW9kYWxEYXRhXG4gICAgaWYgKG1vZGFsRGF0YSkge1xuICAgICAgdGhpcy5pc0RpYWxvZ01vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5jYXNlcyA9IG1vZGFsRGF0YS5jYXNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBtb2RhbERhdGEuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtYmFja2Ryb3AnKSkge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUgJiYgdGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGZvcm0gd2hlbiBjbG9zaW5nXG4gICAgdGhpcy5leHBvcnRPbkxvY2FsID0gdHJ1ZTtcbiAgICB0aGlzLmVtYWlsTGlzdCA9IFtdO1xuICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wucmVzZXQoKTtcbiAgICB0aGlzLnNob3dFbWFpbEVycm9yID0gZmFsc2U7XG4gIH1cblxuICBhZGRFbWFpbCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZW1haWxJbnB1dENvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcbiAgICBpZiAodGhpcy5lbWFpbExpc3QuaW5jbHVkZXMoZW1haWwpKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCBlbWFpbCB0byBsaXN0XG4gICAgdGhpcy5lbWFpbExpc3QucHVzaChlbWFpbCk7XG4gICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuc2hvd0VtYWlsRXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUVtYWlsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuZW1haWxMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWFpbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5wdXRDb250cm9sLnRvdWNoZWQgfHwgIXRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgIGVycm9ycy5wdXNoKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbWFpbElucHV0Q29udHJvbC5lcnJvcnM/LlsnZW1haWwnXSkge1xuICAgICAgZXJyb3JzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ2R1cGxpY2F0ZSddKSB7XG4gICAgICBlcnJvcnMucHVzaCgnVGhpcyBlbWFpbCBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlzRXhwb3J0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZXhwb3J0T25Mb2NhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGb3IgZW1haWwgZXhwb3J0LCBhdCBsZWFzdCBvbmUgdmFsaWQgZW1haWwgaXMgcmVxdWlyZWRcbiAgICByZXR1cm4gdGhpcy5lbWFpbExpc3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBvcnRPbkxvY2FsICYmIHRoaXMuZW1haWxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93RW1haWxFcnJvciA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW1pdCBleHBvcnQgZXZlbnQgd2l0aCBhcHByb3ByaWF0ZSBkYXRhXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5leHBvcnRPbkxvY2FsID8geyB0eXBlOiAnbG9jYWwnIGFzIGNvbnN0IH0gOiB7XG4gICAgICB0eXBlOiAnZW1haWwnIGFzIGNvbnN0LFxuICAgICAgZW1haWxzOiB0aGlzLmVtYWlsTGlzdFxuICAgIH07XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlICYmIHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydC5lbWl0KHJlc3VsdCk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgKm5nSWY9XCJpc09wZW4gfHwgaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLm1vZGFsLWJhY2tkcm9wXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWZpeGVkXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWluc2V0LTBdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctYmxhY2tdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctb3BhY2l0eS01MF09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1mbGV4XT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWl0ZW1zLWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1qdXN0aWZ5LWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1wLTRdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmIG9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LXhsIGNxYS13LWZ1bGwgY3FhLW1heC13LVs2MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1heC1oLVs5MHZoXVwiXG4gICAgW3N0eWxlLmJveC1zaGFkb3ddPVwiJzBweCA4cHggOHB4IC00cHggIzEwMTgyODA4J1wiIFxuICAgIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBTdGlja3kgSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RpY2t5IGNxYS10b3AtMCBjcWEtYmctd2hpdGUgY3FhLW10LTIgY3FhLXotMTAgY3FhLXB4LTQgY3FhLXB0LTIgY3FhLXBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTNcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMENdXCI+XG4gICAgICAgICAgRXhwb3J0IENvZGVcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICBbYnRuU2l6ZV09XCInbWQnXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjNEE1NTY1XVwiPkNob29zZSBob3cgeW91IHdhbnQgdG8gZXhwb3J0IHRoZSB0ZXN0IGNhc2UgY29kZTo8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHgtNCBjcWEtcGItNFwiPlxuICAgICAgPCEtLSBFeHBvcnQgT3B0aW9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLW1iLTJcIj5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWJvcmRlciBjcWEtcm91bmRlZC1sZyBjcWEtcHgtNCBjcWEtcHktMSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNmNDNlZV1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1iZy1bI0YwRjBGRl1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiIWV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRPbkxvY2FsID0gdHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJleHBvcnRPbkxvY2FsXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbXItMiBjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWJsb2NrIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzBCMEIwQ11cIj5Eb3dubG9hZCBpbiBMb2NhbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1ib3JkZXIgY3FhLXJvdW5kZWQtbGcgY3FhLXB4LTQgY3FhLXB5LTEgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzZjQzZWVdXT1cIiFleHBvcnRPbkxvY2FsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRjBGMEZGXV09XCIhZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImV4cG9ydE9uTG9jYWwgPSBmYWxzZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhZXhwb3J0T25Mb2NhbFwiIFxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1yLTIgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ibG9jayBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwQjBCMENdXCI+VmlhIEVtYWlsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRW1haWwgSW5wdXQgU2VjdGlvbiAob25seSBzaG93biB3aGVuIFZpYSBFbWFpbCBpcyBzZWxlY3RlZCkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTJcIiAqbmdJZj1cIiFleHBvcnRPbkxvY2FsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtYmctZ3JheS01MCBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtc20gY3FhLXRleHQtWyMwQjBCMENdIGNxYS1tYi0yXCI+RW1haWwgQWRkcmVzc2VzOjwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMlwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVHlwZSBlbWFpbCBhbmQgcHJlc3MgRW50ZXIgb3IgQWRkIGJ1dHRvbidcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZW1haWxJbnB1dENvbnRyb2wudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZXJyb3JzXT1cImdldEVtYWlsRXJyb3JzKClcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZW1haWxJbnB1dENvbnRyb2wuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChlbnRlclByZXNzZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cIidvdXRsaW5lZCdcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInYWRkJ1wiXG4gICAgICAgICAgICAgIFtidG5TaXplXT1cIidsZydcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVtYWlsSW5wdXRDb250cm9sLnZhbGlkIHx8ICFlbWFpbElucHV0Q29udHJvbC52YWx1ZT8udHJpbSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBWYWxpZGF0aW9uIEVycm9yIGZvciBFbXB0eSBMaXN0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNjAwIGNxYS10ZXh0LXhzIGNxYS1tYi0yXCIgKm5nSWY9XCIhZXhwb3J0T25Mb2NhbCAmJiBlbWFpbExpc3QubGVuZ3RoID09PSAwICYmIHNob3dFbWFpbEVycm9yXCI+XG4gICAgICAgICAgICBBdCBsZWFzdCBvbmUgZW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZFxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBDaGlwcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTIgY3FhLW10LTJcIiAqbmdJZj1cImVtYWlsTGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbWFpbCBvZiBlbWFpbExpc3Q7IGxldCBpID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyNERkRGRkRdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0RGREZGRF0gY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNjM2NkYxXSBjcWEtdGV4dC1bMTJweF1cIj57e2VtYWlsfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICAgICAgW2J0blNpemVdPVwiJ3NtJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Db2xvcl09XCInIzYzNjZGMSdcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZUVtYWlsKGkpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhc2VzIExpc3QgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTFcIiAqbmdJZj1cImNhc2VzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTQgY3FhLWJnLWdyYXktNTAgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEIwQjBDXSBjcWEtbWItMlwiPlRlc3QgQ2FzZXMgdG8gRXhwb3J0ICh7e2Nhc2VzLmxlbmd0aH19KTo8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1heC1oLVsxNTBweF0gY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHItNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWItWzFweF0gY3FhLWJvcmRlci10LVswcHhdIGNxYS1ib3JkZXItbC1bMHB4XSBjcWEtYm9yZGVyLXItWzBweF0gIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiICpuZ0Zvcj1cImxldCBjYXNlIG9mIGNhc2VzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzNmNDNlZV0gY3FhLW1pbi13LVsyNHB4XVwiPnt7aSArIDF9fS48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMwQjBCMENdXCI+e3tjYXNlLm5hbWUgfHwgJ1VubmFtZWQgVGVzdCBDYXNlJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJjYXNlLmlkXCI+KEMte3tjYXNlLmlkfX0pPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTMgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtM1wiPlxuICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgIFt2YXJpYW50XT1cIidvdXRsaW5lZCdcIlxuICAgICAgICBbdGV4dF09XCInQ2FuY2VsJ1wiXG4gICAgICAgIChjbGlja2VkKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgIFt2YXJpYW50XT1cIidmaWxsZWQnXCJcbiAgICAgICAgW3RleHRdPVwiZXhwb3J0T25Mb2NhbCA/ICdFeHBvcnQnIDogJ1NlbmQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGlzRXhwb3J0RGlzYWJsZWQoKVwiXG4gICAgICAgIChjbGlja2VkKT1cImhhbmRsZUV4cG9ydCgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWNvZGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leHBvcnQtY29kZS1tb2RhbC9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4cG9ydC1jb2RlLW1vZGFsL2V4cG9ydC1jb2RlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWtCekUsTUFBTSxPQUFPLHdCQUF3QjtJQWVuQyxZQUM4QyxTQUErQixFQUN2RCxTQUFrRDtRQUQxQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQWhCL0QsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFekIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUErRixDQUFDO1FBRTVILGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGNBQVMsR0FBcUMsY0FBYyxDQUFDO1FBQzdELGNBQVMsR0FBYSxFQUFFLENBQUM7UUFFekIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFNbkMsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFF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Q0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVsRixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOztxSEFuSVUsd0JBQXdCLGtCQWdCYixlQUFlO3lHQWhCMUIsd0JBQXdCLDBMQ3BCckMsNDBSQXdNQTsyRkRwTGEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1Qjs7MEJBb0I5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzRDQWhCRixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENhc2Uge1xuICBpZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb2RlTW9kYWxEYXRhIHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGNhc2VzPzogVGVzdENhc2VbXTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZXhwb3J0LWNvZGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhwb3J0LWNvZGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEV4cG9ydENvZGVNb2RhbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjYXNlczogVGVzdENhc2VbXSA9IFtdO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZXhwb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHR5cGU6ICdsb2NhbCcgfCAnZW1haWwnOyBlbWFpbHM/OiBzdHJpbmdbXTsgZnJhbWV3b3JrOiAnV0VCRFJJVkVSX0lPJyB8ICdTRUxFTklVTV9KQVZBJyB9PigpO1xuXG4gIHB1YmxpYyBleHBvcnRPbkxvY2FsOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGZyYW1ld29yazogJ1dFQkRSSVZFUl9JTycgfCAnU0VMRU5JVU1fSkFWQScgPSAnV0VCRFJJVkVSX0lPJztcbiAgcHVibGljIGVtYWlsTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGVtYWlsSW5wdXRDb250cm9sOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIHNob3dFbWFpbEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0RpYWxvZ01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIG1vZGFsRGF0YT86IEV4cG9ydENvZGVNb2RhbERhdGEsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2dSZWY/OiBNYXREaWFsb2dSZWY8RXhwb3J0Q29kZU1vZGFsQ29tcG9uZW50PlxuICApIHtcbiAgICAvLyBJbml0aWFsaXplIGVtYWlsIGlucHV0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uXG4gICAgdGhpcy5lbWFpbElucHV0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1xuICAgICAgVmFsaWRhdG9ycy5lbWFpbFxuICAgIF0pO1xuXG4gICAgLy8gSWYgdXNlZCB3aXRoIE1hdERpYWxvZywgaW5pdGlhbGl6ZSBmcm9tIG1vZGFsRGF0YVxuICAgIGlmIChtb2RhbERhdGEpIHtcbiAgICAgIHRoaXMuaXNEaWFsb2dNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FzZXMgPSBtb2RhbERhdGEuY2FzZXMgfHwgW107XG4gICAgICB0aGlzLmRpc2FibGVkID0gbW9kYWxEYXRhLmRpc2FibGVkIHx8IGZhbHNlO1xuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQmFja2Ryb3BDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBcbiAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0IHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21vZGFsLWJhY2tkcm9wJykpIHtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlICYmIHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCgpO1xuICAgIH1cbiAgICAvLyBSZXNldCBmb3JtIHdoZW4gY2xvc2luZ1xuICAgIHRoaXMuZXhwb3J0T25Mb2NhbCA9IHRydWU7XG4gICAgdGhpcy5mcmFtZXdvcmsgPSAnV0VCRFJJVkVSX0lPJztcbiAgICB0aGlzLmVtYWlsTGlzdCA9IFtdO1xuICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wucmVzZXQoKTtcbiAgICB0aGlzLnNob3dFbWFpbEVycm9yID0gZmFsc2U7XG4gIH1cblxuICBhZGRFbWFpbCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZW1haWxJbnB1dENvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcbiAgICBpZiAodGhpcy5lbWFpbExpc3QuaW5jbHVkZXMoZW1haWwpKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCBlbWFpbCB0byBsaXN0XG4gICAgdGhpcy5lbWFpbExpc3QucHVzaChlbWFpbCk7XG4gICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuc2hvd0VtYWlsRXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUVtYWlsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuZW1haWxMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWFpbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5wdXRDb250cm9sLnRvdWNoZWQgfHwgIXRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgIGVycm9ycy5wdXNoKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbWFpbElucHV0Q29udHJvbC5lcnJvcnM/LlsnZW1haWwnXSkge1xuICAgICAgZXJyb3JzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ2R1cGxpY2F0ZSddKSB7XG4gICAgICBlcnJvcnMucHVzaCgnVGhpcyBlbWFpbCBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlzRXhwb3J0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZXhwb3J0T25Mb2NhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGb3IgZW1haWwgZXhwb3J0LCBhdCBsZWFzdCBvbmUgdmFsaWQgZW1haWwgaXMgcmVxdWlyZWRcbiAgICByZXR1cm4gdGhpcy5lbWFpbExpc3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBvcnRPbkxvY2FsICYmIHRoaXMuZW1haWxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93RW1haWxFcnJvciA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW1pdCBleHBvcnQgZXZlbnQgd2l0aCBhcHByb3ByaWF0ZSBkYXRhXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5leHBvcnRPbkxvY2FsXG4gICAgICA/IHsgdHlwZTogJ2xvY2FsJyBhcyBjb25zdCwgZnJhbWV3b3JrOiB0aGlzLmZyYW1ld29yayB9XG4gICAgICA6IHsgdHlwZTogJ2VtYWlsJyBhcyBjb25zdCwgZW1haWxzOiB0aGlzLmVtYWlsTGlzdCwgZnJhbWV3b3JrOiB0aGlzLmZyYW1ld29yayB9O1xuXG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlICYmIHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydC5lbWl0KHJlc3VsdCk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgKm5nSWY9XCJpc09wZW4gfHwgaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLm1vZGFsLWJhY2tkcm9wXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWZpeGVkXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWluc2V0LTBdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctYmxhY2tdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctb3BhY2l0eS01MF09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1mbGV4XT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWl0ZW1zLWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1qdXN0aWZ5LWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1wLTRdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmIG9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LXhsIGNxYS13LWZ1bGwgY3FhLW1heC13LVs2MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1heC1oLVs5MHZoXVwiXG4gICAgW3N0eWxlLmJveC1zaGFkb3ddPVwiJzBweCA4cHggOHB4IC00cHggIzEwMTgyODA4J1wiIFxuICAgIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBTdGlja3kgSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RpY2t5IGNxYS10b3AtMCBjcWEtYmctd2hpdGUgY3FhLW10LTIgY3FhLXotMTAgY3FhLXB4LTQgY3FhLXB0LTIgY3FhLXBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTNcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMENdXCI+XG4gICAgICAgICAgRXhwb3J0IENvZGVcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICBbYnRuU2l6ZV09XCInbWQnXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHgtNCBjcWEtcGItNFwiPlxuICAgICAgPCEtLSBGcmFtZXdvcmsgT3B0aW9ucyAtLT5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tYi0yXCI+Q2hvb3NlIGF1dG9tYXRpb24gZnJhbWV3b3JrOjwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLW1iLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtYm9yZGVyIGNxYS1yb3VuZGVkLWxnIGNxYS1weC00IGNxYS1weS0xIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLVsjM2Y0M2VlXV09XCJmcmFtZXdvcmsgPT09ICdXRUJEUklWRVJfSU8nXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRjBGMEZGXV09XCJmcmFtZXdvcmsgPT09ICdXRUJEUklWRVJfSU8nXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1ncmF5LTMwMF09XCJmcmFtZXdvcmsgIT09ICdXRUJEUklWRVJfSU8nXCJcbiAgICAgICAgICAoY2xpY2spPVwiZnJhbWV3b3JrID0gJ1dFQkRSSVZFUl9JTydcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImZyYW1ld29yayA9PT0gJ1dFQkRSSVZFUl9JTydcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImZyYW1ld29ya1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbXItMiBjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWJsb2NrIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzBCMEIwQ11cIj5XZWJkcml2ZXJJTzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1ib3JkZXIgY3FhLXJvdW5kZWQtbGcgY3FhLXB4LTQgY3FhLXB5LTEgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzZjQzZWVdXT1cImZyYW1ld29yayA9PT0gJ1NFTEVOSVVNX0pBVkEnXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRjBGMEZGXV09XCJmcmFtZXdvcmsgPT09ICdTRUxFTklVTV9KQVZBJ1wiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiZnJhbWV3b3JrICE9PSAnU0VMRU5JVU1fSkFWQSdcIlxuICAgICAgICAgIChjbGljayk9XCJmcmFtZXdvcmsgPSAnU0VMRU5JVU1fSkFWQSdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImZyYW1ld29yayA9PT0gJ1NFTEVOSVVNX0pBVkEnXCJcbiAgICAgICAgICAgICAgbmFtZT1cImZyYW1ld29ya1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1yLTIgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ibG9jayBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwQjBCMENdXCI+U2VsZW5pdW0gSmF2YTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEV4cG9ydCBPcHRpb25zIC0tPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW1iLTIgY3FhLW10LTNcIj5DaG9vc2UgaG93IHlvdSB3YW50IHRvIGV4cG9ydCB0aGUgdGVzdCBjYXNlIGNvZGU6PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtNCBjcWEtbWItMlwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1ib3JkZXIgY3FhLXJvdW5kZWQtbGcgY3FhLXB4LTQgY3FhLXB5LTEgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzZjQzZWVdXT1cImV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYmctWyNGMEYwRkZdXT1cImV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLWdyYXktMzAwXT1cIiFleHBvcnRPbkxvY2FsXCJcbiAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0T25Mb2NhbCA9IHRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZXhwb3J0T25Mb2NhbFwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImV4cG9ydFR5cGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1yLTIgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ibG9jayBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwQjBCMENdXCI+RG93bmxvYWQgaW4gTG9jYWw8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IFxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtYm9yZGVyIGNxYS1yb3VuZGVkLWxnIGNxYS1weC00IGNxYS1weS0xIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLVsjM2Y0M2VlXV09XCIhZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1iZy1bI0YwRjBGRl1dPVwiIWV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLWdyYXktMzAwXT1cImV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRPbkxvY2FsID0gZmFsc2VcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiIWV4cG9ydE9uTG9jYWxcIiBcbiAgICAgICAgICAgICAgbmFtZT1cImV4cG9ydFR5cGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1tci0yIGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYmxvY2sgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEIwQjBDXVwiPlZpYSBFbWFpbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVtYWlsIElucHV0IFNlY3Rpb24gKG9ubHkgc2hvd24gd2hlbiBWaWEgRW1haWwgaXMgc2VsZWN0ZWQpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tdC0yXCIgKm5nSWY9XCIhZXhwb3J0T25Mb2NhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWJnLWdyYXktNTAgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEIwQjBDXSBjcWEtbWItMlwiPkVtYWlsIEFkZHJlc3Nlczo8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTJcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1R5cGUgZW1haWwgYW5kIHByZXNzIEVudGVyIG9yIEFkZCBidXR0b24nXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVtYWlsSW5wdXRDb250cm9sLnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2Vycm9yc109XCJnZXRFbWFpbEVycm9ycygpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImVtYWlsSW5wdXRDb250cm9sLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAoZW50ZXJQcmVzc2VkKT1cImFkZEVtYWlsKClcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICBbdmFyaWFudF09XCInb3V0bGluZWQnXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FkZCdcIlxuICAgICAgICAgICAgICBbYnRuU2l6ZV09XCInbGcnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbWFpbElucHV0Q29udHJvbC52YWxpZCB8fCAhZW1haWxJbnB1dENvbnRyb2wudmFsdWU/LnRyaW0oKVwiXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZEVtYWlsKClcIj5cbiAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRW1haWwgVmFsaWRhdGlvbiBFcnJvciBmb3IgRW1wdHkgTGlzdCAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtcmVkLTYwMCBjcWEtdGV4dC14cyBjcWEtbWItMlwiICpuZ0lmPVwiIWV4cG9ydE9uTG9jYWwgJiYgZW1haWxMaXN0Lmxlbmd0aCA9PT0gMCAmJiBzaG93RW1haWxFcnJvclwiPlxuICAgICAgICAgICAgQXQgbGVhc3Qgb25lIGVtYWlsIGFkZHJlc3MgaXMgcmVxdWlyZWRcbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRW1haWwgQ2hpcHMgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yIGNxYS1tdC0yXCIgKm5nSWY9XCJlbWFpbExpc3QubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZW1haWwgb2YgZW1haWxMaXN0OyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjREZERkZEXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNERkRGRkRdIGNxYS1yb3VuZGVkLW1kIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzYzNjZGMV0gY3FhLXRleHQtWzEycHhdXCI+e3tlbWFpbH19PC9zcGFuPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiBcbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidjbG9zZSdcIlxuICAgICAgICAgICAgICAgIFtidG5TaXplXT1cIidzbSdcIlxuICAgICAgICAgICAgICAgIFtpY29uQ29sb3JdPVwiJyM2MzY2RjEnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVFbWFpbChpKVwiPlxuICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDYXNlcyBMaXN0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tdC0xXCIgKm5nSWY9XCJjYXNlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC00IGNxYS1iZy1ncmF5LTUwIGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzBCMEIwQ10gY3FhLW1iLTJcIj5UZXN0IENhc2VzIHRvIEV4cG9ydCAoe3tjYXNlcy5sZW5ndGh9fSk6PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYXgtaC1bMTUwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLXByLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHktMiBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1iLVsxcHhdIGNxYS1ib3JkZXItdC1bMHB4XSBjcWEtYm9yZGVyLWwtWzBweF0gY3FhLWJvcmRlci1yLVswcHhdICBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIiAqbmdGb3I9XCJsZXQgY2FzZSBvZiBjYXNlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMzZjQzZWVdIGNxYS1taW4tdy1bMjRweF1cIj57e2kgKyAxfX0uPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEIwQjBDXVwiPnt7Y2FzZS5uYW1lIHx8ICdVbm5hbWVkIFRlc3QgQ2FzZSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMFwiICpuZ0lmPVwiY2FzZS5pZFwiPihDLXt7Y2FzZS5pZH19KTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC00IGNxYS1weS0zIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCBjcWEtZ2FwLTNcIj5cbiAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICBbdmFyaWFudF09XCInb3V0bGluZWQnXCJcbiAgICAgICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICBbdmFyaWFudF09XCInZmlsbGVkJ1wiXG4gICAgICAgIFt0ZXh0XT1cImV4cG9ydE9uTG9jYWwgPyAnRXhwb3J0JyA6ICdTZW5kJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBpc0V4cG9ydERpc2FibGVkKClcIlxuICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVFeHBvcnQoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -529,6 +529,7 @@ export class TableTemplateComponent {
|
|
|
529
529
|
this.onExportClick.emit({
|
|
530
530
|
type: result.type,
|
|
531
531
|
emails: result.emails,
|
|
532
|
+
framework: result.framework,
|
|
532
533
|
selectedItems: this.currentSelectedItems
|
|
533
534
|
});
|
|
534
535
|
}
|
|
@@ -660,4 +661,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
660
661
|
type: ViewChild,
|
|
661
662
|
args: [DynamicFilterComponent]
|
|
662
663
|
}] } });
|
|
663
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFLWix1QkFBdUIsRUFHdkIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsc0JBQXNCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUsvRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM3RSxNQUFNLE9BQU8sc0JBQXNCO0lBaUpqQyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWhKMUMsb0JBQW9CO1FBQ1gsc0JBQWlCLEdBQVcsbUJBQW1CLENBQUM7UUFDaEQsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDdEMscUJBQXFCO1FBQ1gsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQStFLENBQUM7UUFDMUgsaUJBQWlCO1FBQ1AsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzlDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxJ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O3NCQUExQixLQUFLO2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFZSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDNEIsc0JBQXNCO3NCQUF4RCxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0ZpbHRlckl0ZW0sIER5bmFtaWNGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb2x1bW4gfSBmcm9tICcuLi90YWJsZS9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblZpc2liaWxpdHlDb25maWcgfSBmcm9tICcuLi9jb2x1bW4tdmlzaWJpbGl0eS9jb2x1bW4tdmlzaWJpbGl0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVBY3Rpb24gfSBmcm9tICcuLi90YWJsZS1hY3Rpb24tdG9vbGJhci90YWJsZS1hY3Rpb24tdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbmZpZyB9IGZyb20gJy4uL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRU1QVFlfU1RBVEVfSU1BR0VTIH0gZnJvbSAnLi4vYXNzZXRzL2ltYWdlcy9pbWFnZS1hc3NldHMuY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRhYmxlLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIFNlYXJjaCBiYXIgaW5wdXRzXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIGNvbXBvbmVudHMnO1xuICBASW5wdXQoKSBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRXhwb3J0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIFNlYXJjaCBiYXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25TZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uRXhwb3J0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdOyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSB9IHwgdm9pZD4oKTtcbiAgLy8gRmlsdGVyIG91dHB1dHNcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25SZXNldEZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25DbGVhckFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNoaXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBGaWx0ZXIgaW5wdXRzXG4gIEBJbnB1dCgpIGZpbHRlckNvbmZpZzogRHluYW1pY0ZpbHRlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBmaWx0ZXJNb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBASW5wdXQoKSBzaG93RmlsdGVyUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gT3RoZXIgYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gT3RoZXIgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckRyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBzZWxlY3QgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2Ygc2VsZWN0IGRyb3Bkb3duIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gTGVnYWN5IHNpbmdsZSBidXR0b24gaW5wdXRzIChkZXByZWNhdGVkLCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uTGFiZWw6IHN0cmluZyA9ICdPdGhlciBCdXR0b24nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uVmFyaWFudDogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnIHwgJ3RleHQnIHwgJ2VsZXZhdGVkJyB8ICd0b25hbCcgfCAnZ3JleS1zb2xpZCcgPSAnZmlsbGVkJztcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBzaG93T3RoZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBcbiAgLy8gQWN0aW9uIG1lbnUgYnV0dG9uICh0aHJlZS1kb3QgbWVudSBpbiB0YWJsZSByb3dzKVxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBTZXR0aW5ncyBhbmQgcmVmcmVzaCBidXR0b25zXG4gIEBJbnB1dCgpIHNob3dTZXR0aW5nc0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBdXRvUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gRGF0YSBpbnB1dFxuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuXG4gIC8vIEVtcHR5IHN0YXRlIGlucHV0c1xuICBASW5wdXQoKSBpc0VtcHR5U3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZUNvbmZpZzogRW1wdHlTdGF0ZUNvbmZpZyA9IHtcbiAgICB0aXRsZTogJ05vIERhdGEgQXZhaWxhYmxlIFlldCcsXG4gICAgZGVzY3JpcHRpb246ICdSdW4gb3IgdXBsb2FkIHlvdXIgZmlyc3QgdGVzdCB0byBzZWUgeW91ciBhbmFseXRpY3MgYW5kIHRyZW5kcyBoZXJlLiBXYXRjaCB5b3VyIHF1YWxpdHkgbWV0cmljcyBjb21lIHRvIGxpZmUgd2l0aCByZWFsLXRpbWUgaW5zaWdodHMuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkRBU0hCT0FSRCxcbiAgICBhY3Rpb25zOiBbeyBsYWJlbDogJ1J1biBUZXN0IFN1aXRlJywgdmFyaWFudDogJ2ZpbGxlZCcgfV0sXG4gIH07XG5cbiAgLy8gQWN0aW9uIGJhciBpbnB1dHNcbiAgQElucHV0KCkgYWN0aW9uczogVGFibGVBY3Rpb25bXSA9IFtcbiAgICB7IFxuICAgICAgaWQ6ICdkZWxldGUnLCBcbiAgICAgIGxhYmVsOiAnRGVsZXRlJywgXG4gICAgICBpY29uOiAnZGVsZXRlJywgXG4gICAgICB0b29sdGlwOiAnRGVsZXRlIHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdEZWxldGUgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IFxuICAgICAgaWQ6ICdlZGl0JywgXG4gICAgICBsYWJlbDogJ0VkaXQnLCBcbiAgICAgIGljb246ICdlZGl0JywgXG4gICAgICB0b29sdGlwOiAnRWRpdCBzZWxlY3RlZCcsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRWRpdCBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2FkZC10YWcnLCBcbiAgICAgIGxhYmVsOiAnQWRkIFRhZycsIFxuICAgICAgaWNvbjogJ2xvY2FsX29mZmVyJywgXG4gICAgICB0b29sdGlwOiAnQWRkIHRhZ3MnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZCB0YWcgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IFxuICAgICAgaWQ6ICdyZW1vdmUtdGFnJywgXG4gICAgICBsYWJlbDogJ1JlbW92ZSBUYWcnLCBcbiAgICAgIGljb246ICdsYWJlbF9vZmYnLCBcbiAgICAgIHRvb2x0aXA6ICdSZW1vdmUgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZlIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICBdO1xuXG4gIC8vIENoaXBzIGlucHV0c1xuICBASW5wdXQoKSBjaGlwczogQXJyYXk8eyBrZXk/OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IGZ1bGxUZXh0Pzogc3RyaW5nOyBoYXNNb3JlPzogYm9vbGVhbiB9PiA9IFtdO1xuICBASW5wdXQoKSBmaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVGFibGUgaW5wdXRzXG4gIEBJbnB1dCgpIGNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGU/OiAocm93OiBhbnkpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCA0MCwgNjAsIDgwXTtcbiAgQElucHV0KCkgcGFnZVNpemVNZW51RGlyZWN0aW9uOiAnYXV0bycgfCAndXAnIHwgJ2Rvd24nID0gJ2F1dG8nO1xuICAvLyBTZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIGNvbnRyb2xzXG4gIEBJbnB1dCgpIHNlcnZlclNpZGVQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsRWxlbWVudHM6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0+KCk7XG4gIC8qKlxuICAgKiBXaGVuIGZhbHNlLCBoZWFkZXIgc29ydCBkb2VzIG5vdCByZW9yZGVyIHJvd3MgbG9jYWxseSAodXNlIHdpdGggc2VydmVyU2lkZVBhZ2luYXRpb24gKyBzb3J0Q2hhbmdlKS5cbiAgICogRGVmYXVsdCB0cnVlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlTG9jYWxTb3J0OiBib29sZWFuID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBmaWVsZElkOiBzdHJpbmc7XG4gICAgZmllbGRWYWx1ZT86IHN0cmluZztcbiAgICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbDtcbiAgfT4oKTtcbiAgLy8gTG9hZGVyIGNvbnRyb2xzIChwYXNzZWQgZG93biB0byBkeW5hbWljIHRhYmxlKVxuICBASW5wdXQoKSBpc1RhYmxlTG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzVGFibGVEYXRhTG9hZGluZz86IGJvb2xlYW47XG4gIC8vIEJhY2t3YXJkLWNvbXBhdGliaWxpdHkgZmxhZzsgaWYgcHJvdmlkZWQsIGR5bmFtaWMgdGFibGUgd2lsbCB1c2UgaXQgd2hlbiBzcGVjaWZpYyBmbGFncyBhcmUgdW5kZWZpbmVkXG5cbiAgLy8gT3B0aW9uYWwgZ2V0dGVyIGZvciBKU09OIHBhdGggcGVyIGNlbGwuIFdoZW4gcHJvdmlkZWQsIGRvdWJsZS1jbGlja2luZyBhIGNlbGwgY29waWVzIHRoZSBwYXRoLlxuICBASW5wdXQoKSBjZWxsSnNvblBhdGhHZXR0ZXI/OiAocm93SW5kZXg6IG51bWJlciwgY29sSWQ6IHN0cmluZywgcm93OiBhbnkpID0+IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgSlNPTiBwYXRoIGlzIGNvcGllZCBmcm9tIGEgdGFibGUgY2VsbFxuICBASW5wdXQoKSBvbkpzb25QYXRoQ29waWVkSGFuZGxlcj86IChldmVudDogeyBwYXRoOiBzdHJpbmc7IHNvdXJjZTogc3RyaW5nIH0pID0+IHZvaWQ7XG5cbiAgLy8gU2VsZWN0ZWQgaXRlbXMgKGZ1bGwgb2JqZWN0cykgZm9yIG1haW50YWluaW5nIHNlbGVjdGlvbiBhY3Jvc3MgcGFnaW5hdGlvbiAoc2VydmVyLXNpZGUpXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgZm9yIGNvbHVtbiB2aXNpYmlsaXR5XG4gIHByaXZhdGUgX2NvbHVtblZpc2liaWxpdHk6IENvbHVtblZpc2liaWxpdHlDb25maWcgPSB7fTtcbiAgcHJpdmF0ZSBfY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xuICBmaWx0ZXJlZFJvd3M6IGFueVtdID0gW107XG4gIHBhZ2VkUm93czogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG4gIHByaXZhdGUgcGVuZGluZ0ZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhcHBsaWVkRmlsdGVyczogYW55O1xuICBwcml2YXRlIGF1dG9SZWZyZXNoVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQXV0b1JlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZChEeW5hbWljRmlsdGVyQ29tcG9uZW50KSBkeW5hbWljRmlsdGVyQ29tcG9uZW50PzogRHluYW1pY0ZpbHRlckNvbXBvbmVudDtcblxuICAvLyBEZXJpdmVkIGNvbHVtbnMgd2l0aCB2aXNpYmlsaXR5IGFwcGxpZWQuXG4gIGNvbXB1dGVkQ29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgLy8gQXV0by1nZW5lcmF0ZWQgdmlzaWJpbGl0eSBjb2x1bW5zIGZyb20gY29sdW1ucyBpbnB1dFxuICB2aXNpYmlsaXR5Q29sdW1uczogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+ID0gW107XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb21wdXRlZENvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJpbGl0eSA9IHRoaXMuX2NvbHVtblZpc2liaWxpdHkgfHwge307XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5jb2x1bW5zIHx8IFtdO1xuICAgIHRoaXMuY29tcHV0ZWRDb2x1bW5zID0gc291cmNlLm1hcChjb2wgPT4ge1xuICAgICAgaWYgKFsnY2hlY2tib3gnLCAnYWN0aW9ucyddLmluY2x1ZGVzKGNvbC5maWVsZElkKSkge1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdyA9IHZpc2liaWxpdHlbY29sLmZpZWxkSWRdO1xuICAgICAgcmV0dXJuIHsgLi4uY29sLCBpc1Nob3c6IHNob3cgIT09IGZhbHNlIH07XG4gICAgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZpc2liaWxpdHlDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIHRoaXMudmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucztcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGNvbHVtbiB2aXNpYmlsaXR5IHN0YXRlXG4gIGdldCBjb2x1bW5WaXNpYmlsaXR5KCk6IENvbHVtblZpc2liaWxpdHlDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5O1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snaXNFbXB0eVN0YXRlJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRJdGVtcyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCBhc3N1bWUgaW5jb21pbmcgZGF0YSBpcyBhbHJlYWR5IGEgcGFnZSBzbGljZVxuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgSURzIGZyb20gc2VsZWN0ZWRJdGVtcyAob2JqZWN0cylcbiAgICovXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJZHMoKTogU2V0PG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiBOdW1iZXIoaXRlbS5pZCkpLmZpbHRlcihpZCA9PiAhaXNOYU4oaWQpKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZElkc1NldCA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcblxuICAgIGlmIChzZWxlY3RlZElkc1NldC5zaXplID09PSAwKSB7XG4gICAgICAvLyBJZiBubyBzZWxlY3RlZCBJRHMsIGNsZWFyIGFsbCBzZWxlY3Rpb24gc3RhdGVzXG4gICAgICBpZiAodGhpcy5wYWdlZFJvd3MpIHtcbiAgICAgICAgdGhpcy5wYWdlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIChyb3cgYXMgYW55KS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHNlbGVjdGlvbiBzdGF0ZSBiYXNlZCBvbiBzZWxlY3RlZEl0ZW1zXG4gICAgaWYgKHRoaXMucGFnZWRSb3dzKSB7XG4gICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAocm93IGFzIGFueSkuaXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzU2V0LmhhcyhOdW1iZXIocm93LmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsc28gdXBkYXRlIGZpbHRlcmVkUm93cyBmb3IgY29uc2lzdGVuY3lcbiAgICBpZiAodGhpcy5maWx0ZXJlZFJvd3MpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChyb3cgYXMgYW55KS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHNTZXQuaGFzKE51bWJlcihyb3cuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIC8vIENhY2hlIHZpc2liaWxpdHkgY29sdW1ucyB0byBhdm9pZCBjcmVhdGluZyBuZXcgYXJyYXlzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMubWFwVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICAvLyBJbml0aWFsaXplIHZpc2liaWxpdHkgc3RhdGUgZm9yIGFsbCB2aXNpYmlsaXR5IGNvbHVtbnMgKGRlZmF1bHQgdG8gdHJ1ZSlcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuX2NvbHVtblZpc2liaWxpdHlbY29sLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHlbY29sLmlkXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFueVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0ZWQgaXRlbXMgKGVpdGhlciBvbiBjdXJyZW50IHBhZ2Ugb3IgYWNyb3NzIGFsbCBwYWdlcyB2aWEgc2VsZWN0ZWRJdGVtcylcbiAgICBjb25zdCBoYXNTZWxlY3RlZE9uUGFnZSA9ICEhKHRoaXMucGFnZWRSb3dzICYmIHRoaXMucGFnZWRSb3dzLnNvbWUociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCkpO1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuICAgIGNvbnN0IGhhc1NlbGVjdGVkQWNyb3NzUGFnZXMgPSBzZWxlY3RlZElkc1NldC5zaXplID4gMDtcbiAgICByZXR1cm4gaGFzU2VsZWN0ZWRPblBhZ2UgfHwgaGFzU2VsZWN0ZWRBY3Jvc3NQYWdlcztcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XG4gICAgLy8gSWYgc2VsZWN0ZWRJdGVtcyAoZnVsbCBvYmplY3RzKSBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGRpcmVjdGx5XG4gICAgLy8gVGhpcyBlbnN1cmVzIGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgcmV0dXJuZWQsIGluY2x1ZGluZyB0aG9zZSBmcm9tIG90aGVyIHBhZ2VzXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IEZvciBjbGllbnQtc2lkZSBwYWdpbmF0aW9uIG9yIHdoZW4gc2VsZWN0ZWRJdGVtcyBpcyBub3QgcHJvdmlkZWQsXG4gICAgLy8gZmlsdGVyIHBhZ2VkUm93cyB0byBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBjdXJyZW50IHBhZ2Ugb25seVxuICAgIGlmICghdGhpcy5wYWdlZFJvd3MgfHwgdGhpcy5wYWdlZFJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG4gICAgXG4gICAgLy8gRmlsdGVyIHJvd3MgdGhhdCBhcmUgc2VsZWN0ZWRcbiAgICByZXR1cm4gdGhpcy5wYWdlZFJvd3NcbiAgICAgIC5maWx0ZXIociA9PiB7XG4gICAgICAgIGlmICghciB8fCByLmlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSBOdW1iZXIoci5pZCk7XG4gICAgICAgIC8vIEluY2x1ZGUgaWYgZWl0aGVyOlxuICAgICAgICAvLyAxLiBUaGUgcm93IGhhcyBpc1NlbGVjdGVkID0gdHJ1ZSAoY3VycmVudCBwYWdlIHNlbGVjdGlvbilcbiAgICAgICAgLy8gMi4gVGhlIHJvdydzIElEIGlzIGluIHNlbGVjdGVkSXRlbXMgKHNlbGVjdGVkIG9uIG90aGVyIHBhZ2VzIG9yIHJlc3RvcmVkIHNlbGVjdGlvbilcbiAgICAgICAgcmV0dXJuICEhKHIgYXMgYW55KS5pc1NlbGVjdGVkIHx8IHNlbGVjdGVkSWRzU2V0Lmhhcyhyb3dJZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFjdGlvbkNsaWNrKGRhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdhY3Rpb24gdG9vbGJhcicsIGRhdGEpO1xuICB9XG5cbiAgdmlldyhpZDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZpZXcnLCBpZCk7XG4gIH1cblxuICBlZGl0KHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0VkaXQnLCByb3cpO1xuICB9XG5cbiAgZGVsZXRlKHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0RlbGV0ZScsIHJvdyk7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmlsdGVyUGFuZWwgPSAhdGhpcy5zaG93RmlsdGVyUGFuZWw7XG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY2ZnOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eSA9IHsgLi4uY2ZnIH07XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQXV0b1JlZnJlc2hDaGFuZ2UoaW50ZXJ2YWxNczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWwgPSBpbnRlcnZhbE1zO1xuICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnVmFsdWUgY2hhbmdlZCcsIHZhbHVlKTtcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU2VhcmNoJywgdmFsdWUpO1xuICB9XG5cbiAgY2xlYXJlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnQ2xlYXJlZCcpO1xuICB9XG5cbiAgb25FbXB0eUFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIGlmIChhY3Rpb24/LmxhYmVsID09PSAnU2hvdyBmaWx0ZXJzJykge1xuICAgICAgdGhpcy50b2dnbGVGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlcnNDaGFuZ2VkKGN1cnJlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIERlZmVyIGFwcGx5aW5nIGZpbHRlcnMgYW5kIHVwZGF0aW5nIGNoaXBzIHVudGlsIEFwcGx5IEZpbHRlciBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IGN1cnJlbnQ7XG4gIH1cblxuICBvbkZpbHRlcnNBcHBsaWVkKGFwcGxpZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gZmFsc2U7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gYXBwbGllZCA/PyB0aGlzLnBlbmRpbmdGaWx0ZXJzID8/IHt9O1xuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMgPSBlZmZlY3RpdmU7XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gdGhpcy5wYXNzRmlsdGVycyhlZmZlY3RpdmUsIHIpKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICBjb25zdCBjaGlwczogQXJyYXk8eyBrZXk/OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IGZ1bGxUZXh0Pzogc3RyaW5nOyBoYXNNb3JlPzogYm9vbGVhbiB9PiA9IFtdO1xuICAgIGlmIChlZmZlY3RpdmUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVmZmVjdGl2ZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlZmZlY3RpdmVba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpbmQgdGhlIGZpbHRlciBjb25maWcgaXRlbSBmb3IgdGhpcyBrZXlcbiAgICAgICAgY29uc3QgZmlsdGVyQ29uZmlnSXRlbSA9IHRoaXMuZmlsdGVyQ29uZmlnPy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWx0ZXJDb25maWdJdGVtPy5vcHRpb25zIHx8IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGlzcGxheSB0ZXh0IGZyb20gb3B0aW9uc1xuICAgICAgICBjb25zdCBnZXREaXNwbGF5VGV4dCA9ICh2YWw6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYWxyZWFkeSBhbiBvYmplY3Qgd2l0aCBuYW1lL2xhYmVsLCB1c2UgaXRcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICh2YWwubmFtZSB8fCB2YWwubGFiZWwgfHwgdmFsLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5uYW1lID8/IHZhbC5sYWJlbCA/PyBTdHJpbmcodmFsLnZhbHVlID8/IHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIExvb2sgdXAgdGhlIG9wdGlvbiBpbiB0aGUgY29uZmlnXG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0SWQgPSBvcHQuaWQgPz8gb3B0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgb3B0VmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB2YWxTdHIgPSBTdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0SWQpID09PSB2YWxTdHIgfHwgU3RyaW5nKG9wdFZhbHVlKSA9PT0gdmFsU3RyO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24ubmFtZSA/PyBvcHRpb24ubGFiZWwgPz8gU3RyaW5nKG9wdGlvbi52YWx1ZSA/PyB2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byB0aGUgcmF3IHZhbHVlXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgbGV0IGxhYmVsID0gZmlsdGVyQ29uZmlnSXRlbT8ubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB0ZXh0ID0gdmFsdWUubWFwKCh2OiBhbnkpID0+IGdldERpc3BsYXlUZXh0KHYpKS5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoJ3N0YXJ0JyBpbiB2YWx1ZSB8fCAnZW5kJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcyA9IHZhbHVlLnN0YXJ0ID8gbmV3IERhdGUodmFsdWUuc3RhcnQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICBjb25zdCBlID0gdmFsdWUuZW5kID8gbmV3IERhdGUodmFsdWUuZW5kKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgdGV4dCA9IFtzLCBlXS5maWx0ZXIoQm9vbGVhbikuam9pbignIC0gJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSBnZXREaXNwbGF5VGV4dCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSBnZXREaXNwbGF5VGV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpcHMucHVzaCh7IGtleSwgbGFiZWwsIHRleHQsIGZ1bGxUZXh0OiB0ZXh0LCBoYXNNb3JlOiB0ZXh0Lmxlbmd0aCA+IDMwIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoaXBzID0gY2hpcHM7XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gdGhpcy5jaGlwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaGFuZGxlUmVzZXRGaWx0ZXJDbGljaygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBjaGlwcyBhbmQgcmVzZXQgZmlsdGVyZWQgZGF0YSB3aGVuIHJlc2V0IGlzIGNsaWNrZWRcbiAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMub25SZXNldEZpbHRlckNsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIGhhbmRsZVJlZnJlc2hDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9uQXV0b1JlZnJlc2hDbGljay5lbWl0KCk7XG4gICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJSZWxvYWQoKTogdm9pZCB7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gdGhpcy5hcHBsaWVkRmlsdGVycyA/PyB7fTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMub25SZWxvYWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEF1dG9SZWZyZXNoKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBdXRvUmVmcmVzaCgpO1xuICAgIGlmIChpbnRlcnZhbE1zICYmIGludGVydmFsTXMgPiAwKSB7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICAgICAgfSwgaW50ZXJ2YWxNcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckF1dG9SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvUmVmcmVzaFRpbWVyKTtcbiAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgfVxuXG4gIG9uUGFnaW5hdGUoZTogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBlLnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHNpemU7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICB9XG5cbiAgb25SZW1vdmVDaGlwKGNoaXA6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSB0aGlzLmNoaXBzLmZpbHRlcihjID0+IGMgIT09IGNoaXApO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnQgKHNhbWUgcGF0dGVybiBhcyBleGVjdXRpb24gdGFiKVxuICAgIHRoaXMucmVtb3ZlQ2hpcC5lbWl0KGNoaXApO1xuICB9XG5cbiAgb25DbGVhckFsbENoaXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICAvLyBSZXNldCB0aGUgZHluYW1pYy1maWx0ZXIgY29tcG9uZW50IGZvcm0gd2hlbiBjbGVhcmluZyBhbGwgY2hpcHNcbiAgICBpZiAodGhpcy5keW5hbWljRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLmR5bmFtaWNGaWx0ZXJDb21wb25lbnQucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgLy8gU2VydmVyIG1vZGU6IHBhcmVudCBzdXBwbGllcyBhbHJlYWR5LXBhZ2luYXRlZCBkYXRhXG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMuZmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWaXNpYmlsaXR5Q29sdW1ucygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKVxuICAgICAgLmZpbHRlcihjID0+IGMuaXNEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIC5tYXAoYyA9PiAoeyBpZDogYy5maWVsZElkLCBsYWJlbDogYy5maWVsZE5hbWUgfHwgYy5maWVsZElkIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGF0ZShkOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRzID0gRGF0ZS5wYXJzZShkKTtcbiAgICByZXR1cm4gaXNOYU4odHMpID8gbnVsbCA6IHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXNzRmlsdGVycyhmaWx0ZXJzOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmlsdGVycy5zdGF0dXMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnN0YXR1cykgJiYgZmlsdGVycy5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMuc3RhdHVzLmluY2x1ZGVzKHJvdy5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnByaW9yaXR5ICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5wcmlvcml0eSkgJiYgZmlsdGVycy5wcmlvcml0eS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5wcmlvcml0eS5pbmNsdWRlcyhyb3cucHJpb3JpdHlOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy50ZXN0VHlwZSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMudGVzdFR5cGUpICYmIGZpbHRlcnMudGVzdFR5cGUubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMudGVzdFR5cGUuaW5jbHVkZXMocm93LnRlc3RUeXBlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5jcmVhdGVkX2RhdGUgJiYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0IHx8IGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQpO1xuICAgICAgY29uc3QgZW5kVHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKTtcbiAgICAgIGNvbnN0IHJvd1RzID0gdGhpcy5ub3JtYWxpemVEYXRlKHJvdy5jcmVhdGVkQXQpO1xuICAgICAgaWYgKHJvd1RzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0YXJ0VHMgIT0gbnVsbCAmJiByb3dUcyA8IHN0YXJ0VHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVuZFRzICE9IG51bGwgJiYgcm93VHMgPiBlbmRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyYWNrQnlUZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBFeHBvcnQgbW9kYWwgc3RhdGVcbiAgaXNFeHBvcnRNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBleHBvcnRDb2RlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gR2V0IHNlbGVjdGVkIGl0ZW1zXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VFeHBvcnRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkV4cG9ydE1vZGFsRXhwb3J0KHJlc3VsdDogeyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW10gfSk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB3aXRoIGV4cG9ydCByZXN1bHRcbiAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCh7IFxuICAgICAgdHlwZTogcmVzdWx0LnR5cGUsIFxuICAgICAgZW1haWxzOiByZXN1bHQuZW1haWxzLCBcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXMgXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDYXNlc0ZvckV4cG9ydCgpOiBBcnJheTx7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS50aXRsZSB8fCAnVW5uYW1lZCdcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGFycm93Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gW1xuICAgICAgJ2NxYS13LTQnLFxuICAgICAgJ2NxYS1oLTQnLFxuICAgICAgJ2NxYS1yZWxhdGl2ZScsXG4gICAgICAnY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtJ1xuICAgIF07XG5cbiAgICBpZiAodGhpcy5zaG93RmlsdGVyUGFuZWwpIHtcbiAgICAgIGJhc2VDbGFzc2VzLnB1c2goJ2NxYS1yb3RhdGUtMTgwJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VDbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtcmVsYXRpdmVcIj5cbiAgICA8ZGl2IFtjbGFzc109XCIhc2hvd1NlYXJjaEJhciA/ICdjcWEtanVzdGlmeS1lbmQnIDogJ2NxYS1qdXN0aWZ5LWJldHdlZW4nXCIgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mbGV4LXdyYXAgY3FhLW1iLTNcIj5cbiAgICAgIDxjcWEtc2VhcmNoLWJhclxuICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hCYXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIChjbGVhcmVkKT1cImNsZWFyZWQoKVwiXG4gICAgICA+PC9jcWEtc2VhcmNoLWJhcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtZmxleC13cmFwXCI+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiXG4gICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgaWNvbj1cIm9wZW5faW5fbmV3XCJcbiAgICAgICAgW3RleHRdPVwiaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRXhwb3J0aW5nXCJcbiAgICAgICAgKGNsaWNrZWQpPVwiZXhwb3J0Q29kZUNsaWNrKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57eyBpc0V4cG9ydGluZyA/ICdFeHBvcnRpbmcuLi4nIDogJ0V4cG9ydCcgfX08L3NwYW4+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgICBcbiAgICAgIDwhLS0gRXhwb3J0IENvZGUgTW9kYWwgLS0+XG4gICAgICA8Y3FhLWV4cG9ydC1jb2RlLW1vZGFsXG4gICAgICAgICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiXG4gICAgICAgIFtpc09wZW5dPVwiaXNFeHBvcnRNb2RhbE9wZW5cIlxuICAgICAgICBbY2FzZXNdPVwic2VsZWN0ZWRDYXNlc0ZvckV4cG9ydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlRXhwb3J0TW9kYWwoKVwiXG4gICAgICAgIChleHBvcnQpPVwib25FeHBvcnRNb2RhbEV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1leHBvcnQtY29kZS1tb2RhbD5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJEcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlEcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VsZWN0RHJvcGRvd25UZW1wbGF0ZSBvZiBvdGhlclNlbGVjdERyb3BEb3duQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeVNlbGVjdERyb3Bkb3duVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0RHJvcGRvd25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyQnV0dG9uXCJcbiAgICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlRmlsdGVyKClcIlxuICAgICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICBGaWx0ZXIgICAgICAgICAgXG4gICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImFycm93Q2xhc3Nlc1wiPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LTIgY3FhLWgtMSBjcWEtYWJzb2x1dGUgY3FhLWxlZnQtWzRweF0gY3FhLXRvcC1bNnB4XVwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgOCA0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTAgMEw0IDRMOCAwXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMEIwQjBDXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDxjcWEtY29sdW1uLXZpc2liaWxpdHlcbiAgICAgICAgICAqbmdJZj1cInNob3dTZXR0aW5nc0J1dHRvblwiXG4gICAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJpbGl0eUNvbHVtbnNcIlxuICAgICAgICAgIFtjb2x1bW5WaXNpYmlsaXR5XT1cImNvbHVtblZpc2liaWxpdHlcIlxuICAgICAgICAgIFtzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWxdPVwic2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAoY29sdW1uVmlzaWJpbGl0eUNoYW5nZSk9XCJvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgKGF1dG9SZWZyZXNoQ2hhbmdlKT1cIm9uQXV0b1JlZnJlc2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2NxYS1jb2x1bW4tdmlzaWJpbGl0eT5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dBdXRvUmVmcmVzaEJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVSZWZyZXNoQ2xpY2soKVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlZnJlc2gnXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvblRlbXBsYXRlIG9mIG90aGVyQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeVRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Y3FhLXNlbGVjdGVkLWZpbHRlcnMgXG4gICAgICBbZmlsdGVyQXBwbGllZF09XCJmaWx0ZXJBcHBsaWVkXCJcbiAgICAgIFtjaGlwc109XCJjaGlwc1wiXG4gICAgICAocmVtb3ZlQ2hpcCk9XCJvblJlbW92ZUNoaXAoJGV2ZW50KVwiXG4gICAgICAoY2xlYXJBbGwpPVwib25DbGVhckFsbENoaXBzKClcIlxuICAgICAgKG9uQ2xlYXJBbGwpPVwib25DbGVhckFsbC5lbWl0KClcIlxuICAgID5cbiAgICA8L2NxYS1zZWxlY3RlZC1maWx0ZXJzPlxuXG4gICAgPGNxYS1keW5hbWljLWZpbHRlclxuICAgICAgKm5nSWY9XCJzaG93RmlsdGVyUGFuZWxcIlxuICAgICAgW2NvbmZpZ109XCJmaWx0ZXJDb25maWdcIlxuICAgICAgW21vZGVsXT1cImZpbHRlck1vZGVsXCJcbiAgICAgIFtzaG93RmlsdGVyUGFuZWxdPVwic2hvd0ZpbHRlclBhbmVsXCJcbiAgICAgIChmaWx0ZXJzQ2hhbmdlZCk9XCJvbkZpbHRlcnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGZpbHRlcnNBcHBsaWVkKT1cIm9uRmlsdGVyc0FwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAob25BcHBseUZpbHRlckNsaWNrKT1cIm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKG9uUmVzZXRGaWx0ZXJDbGljayk9XCJoYW5kbGVSZXNldEZpbHRlckNsaWNrKClcIlxuICAgID5cbiAgICA8L2NxYS1keW5hbWljLWZpbHRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcm91bmRlZC1bN3B4XSBjcWEtb3ZlcmZsb3ctaGlkZGVuIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWwgY3FhLWJvcmRlci1yIGNxYS1ib3JkZXItZ3JleS0yMDAgY3FhLXJlbGF0aXZlIGNxYS1vdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNUYWJsZUxvYWRpbmcgfHwgaXNUYWJsZURhdGFMb2FkaW5nKSB8fCAoIWlzRW1wdHlTdGF0ZSAmJiBwYWdlZFJvd3MgJiYgcGFnZWRSb3dzLmxlbmd0aCA+IDApOyBlbHNlIHN0b3J5RW1wdHlUcGxcIj5cbiAgICAgICAgPGFwcC1keW5hbWljLXRhYmxlXG4gICAgICAgICAgW2NvbHVtbnNdPVwiY29tcHV0ZWRDb2x1bW5zXCJcbiAgICAgICAgICBbZGF0YV09XCJwYWdlZFJvd3NcIlxuICAgICAgICAgIFtyb3dTZWxlY3RhYmxlXT1cInJvd1NlbGVjdGFibGVcIlxuICAgICAgICAgIFtlbmFibGVMb2NhbFNvcnRdPVwiZW5hYmxlTG9jYWxTb3J0XCJcbiAgICAgICAgICBbaXNUYWJsZUxvYWRpbmddPVwiaXNUYWJsZUxvYWRpbmdcIlxuICAgICAgICAgIFtpc1RhYmxlRGF0YUxvYWRpbmddPVwiaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICBbY2VsbEpzb25QYXRoR2V0dGVyXT1cImNlbGxKc29uUGF0aEdldHRlclwiXG4gICAgICAgICAgW29uSnNvblBhdGhDb3BpZWRIYW5kbGVyXT1cIm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyXCJcbiAgICAgICAgICAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZVRwbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2lsbHVzdHJhdGlvbnMvZW1wdHktc3RhdGUuc3ZnXCIgYWx0PVwiTm8gZGF0YVwiIGNsYXNzPVwiY3FhLXctMzIgY3FhLWgtMzIgY3FhLW1iLTRcIiAvPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbWItMlwiPk5vIHRlc3QgY2FzZXM8L2gzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNTAwIGNxYS1tYi00XCI+VHJ5IGFkanVzdGluZyBmaWx0ZXJzIG9yIGNyZWF0ZSBhIG5ldyB0ZXN0IGNhc2UuPC9wPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKGNsaWNrZWQpPVwidG9nZ2xlRmlsdGVyKClcIj5TaG93IEZpbHRlcnM8L2NxYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2FwcC1keW5hbWljLXRhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3RvcnlFbXB0eVRwbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTYgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPGNxYS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJpc0VtcHR5U3RhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImVtcHR5U3RhdGVDb25maWcudGl0bGVcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImVtcHR5U3RhdGVDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgW2ltYWdlVXJsXT1cImVtcHR5U3RhdGVDb25maWcuaW1hZ2VVcmxcIlxuICAgICAgICAgICAgW2FjdGlvbnNdPVwiZW1wdHlTdGF0ZUNvbmZpZy5hY3Rpb25zXCJcbiAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkVtcHR5QWN0aW9uKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2NxYS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8Y3FhLXBhZ2luYXRpb25cbiAgICAgIFt0b3RhbEVsZW1lbnRzXT1cInNlcnZlclNpZGVQYWdpbmF0aW9uID8gdG90YWxFbGVtZW50cyA6IGZpbHRlcmVkUm93cy5sZW5ndGhcIlxuICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgIFtwYWdlU2l6ZU1lbnVEaXJlY3Rpb25dPVwicGFnZVNpemVNZW51RGlyZWN0aW9uXCJcbiAgICAgIFtwYWdlSXRlbUNvdW50XT1cInBhZ2VkUm93cy5sZW5ndGhcIlxuICAgICAgKHBhZ2luYXRlKT1cIm9uUGFnaW5hdGUoJGV2ZW50KVwiXG4gICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9jcWEtcGFnaW5hdGlvbj5cblxuICAgIDxkaXYgKm5nSWY9XCJhbnlSb3dTZWxlY3RlZFwiIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1ib3R0b20tWzE4Ljc1cHhdIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXctZnVsbCBsZzpjcWEtbWF4LXctWzY4JV0gY3FhLXNtOm1heC13LVs3NSVdIGNxYS1tYXgtdy1bOTAlXSBjcWEtei1bMV1cIiA+XG4gICAgICA8Y3FhLXRhYmxlLWFjdGlvbi10b29sYmFyXG4gICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJdGVtcyA6IGN1cnJlbnRTZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgW2FjdGlvbnNdPVwiYWN0aW9uc1wiXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2NxYS10YWJsZS1hY3Rpb24tdG9vbGJhcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
664
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFLWix1QkFBdUIsRUFHdkIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsc0JBQXNCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUsvRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM3RSxNQUFNLE9BQU8sc0JBQXNCO0lBaUpqQyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWhKMUMsb0JBQW9CO1FBQ1gsc0JBQWlCLEdBQVcsbUJBQW1CLENBQUM7UUFDaEQsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDdEMscUJBQXFCO1FBQ1gsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTZILENBQUM7UUFDeEssaUJBQWlCO1FBQ1AsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzlDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxJ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RSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBWUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQzRCLHNCQUFzQjtzQkFBeEQsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNGaWx0ZXJJdGVtLCBEeW5hbWljRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIH0gZnJvbSAnLi4vY29sdW1uLXZpc2liaWxpdHkvY29sdW1uLXZpc2liaWxpdHkuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQWN0aW9uIH0gZnJvbSAnLi4vdGFibGUtYWN0aW9uLXRvb2xiYXIvdGFibGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb25maWcgfSBmcm9tICcuLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVNUFRZX1NUQVRFX0lNQUdFUyB9IGZyb20gJy4uL2Fzc2V0cy9pbWFnZXMvaW1hZ2UtYXNzZXRzLmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10YWJsZS10ZW1wbGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvLyBTZWFyY2ggYmFyIGlucHV0c1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlYXJjaCBjb21wb25lbnRzJztcbiAgQElucHV0KCkgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzaG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93U2VhcmNoQmFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0V4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0V4cG9ydGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBTZWFyY2ggYmFyIG91dHB1dHNcbiAgQE91dHB1dCgpIG9uU2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkV4cG9ydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IHR5cGU6ICdsb2NhbCcgfCAnZW1haWwnOyBlbWFpbHM/OiBzdHJpbmdbXTsgZnJhbWV3b3JrPzogJ1dFQkRSSVZFUl9JTycgfCAnU0VMRU5JVU1fSkFWQSc7IHNlbGVjdGVkSXRlbXM6IGFueVtdIH0gfCB2b2lkPigpO1xuICAvLyBGaWx0ZXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblJlc2V0RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNsZWFyQWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlQ2hpcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBpbnB1dHNcbiAgQElucHV0KCkgZmlsdGVyQ29uZmlnOiBEeW5hbWljRmlsdGVySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGZpbHRlck1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBPdGhlciBidXR0b25zIGlucHV0IChhcnJheSBvZiBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBkcm9wZG93biBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyRHJvcERvd25CdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIE90aGVyIHNlbGVjdCBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBzZWxlY3QgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlclNlbGVjdERyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBMZWdhY3kgc2luZ2xlIGJ1dHRvbiBpbnB1dHMgKGRlcHJlY2F0ZWQsIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25MYWJlbDogc3RyaW5nID0gJ090aGVyIEJ1dHRvbic7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25WYXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgfCAndGV4dCcgfCAnZWxldmF0ZWQnIHwgJ3RvbmFsJyB8ICdncmV5LXNvbGlkJyA9ICdmaWxsZWQnO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIHNob3dPdGhlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIFxuICAvLyBBY3Rpb24gbWVudSBidXR0b24gKHRocmVlLWRvdCBtZW51IGluIHRhYmxlIHJvd3MpXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHRpbmdzIGFuZCByZWZyZXNoIGJ1dHRvbnNcbiAgQElucHV0KCkgc2hvd1NldHRpbmdzQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0F1dG9SZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBEYXRhIGlucHV0XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gRW1wdHkgc3RhdGUgaW5wdXRzXG4gIEBJbnB1dCgpIGlzRW1wdHlTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YSBBdmFpbGFibGUgWWV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biBvciB1cGxvYWQgeW91ciBmaXJzdCB0ZXN0IHRvIHNlZSB5b3VyIGFuYWx5dGljcyBhbmQgdHJlbmRzIGhlcmUuIFdhdGNoIHlvdXIgcXVhbGl0eSBtZXRyaWNzIGNvbWUgdG8gbGlmZSB3aXRoIHJlYWwtdGltZSBpbnNpZ2h0cy4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFt7IGxhYmVsOiAnUnVuIFRlc3QgU3VpdGUnLCB2YXJpYW50OiAnZmlsbGVkJyB9XSxcbiAgfTtcblxuICAvLyBBY3Rpb24gYmFyIGlucHV0c1xuICBASW5wdXQoKSBhY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW1xuICAgIHsgXG4gICAgICBpZDogJ2RlbGV0ZScsIFxuICAgICAgbGFiZWw6ICdEZWxldGUnLCBcbiAgICAgIGljb246ICdkZWxldGUnLCBcbiAgICAgIHRvb2x0aXA6ICdEZWxldGUgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2VkaXQnLCBcbiAgICAgIGxhYmVsOiAnRWRpdCcsIFxuICAgICAgaWNvbjogJ2VkaXQnLCBcbiAgICAgIHRvb2x0aXA6ICdFZGl0IHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFZGl0IGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnYWRkLXRhZycsIFxuICAgICAgbGFiZWw6ICdBZGQgVGFnJywgXG4gICAgICBpY29uOiAnbG9jYWxfb2ZmZXInLCBcbiAgICAgIHRvb2x0aXA6ICdBZGQgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ3JlbW92ZS10YWcnLCBcbiAgICAgIGxhYmVsOiAnUmVtb3ZlIFRhZycsIFxuICAgICAgaWNvbjogJ2xhYmVsX29mZicsIFxuICAgICAgdG9vbHRpcDogJ1JlbW92ZSB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIF07XG5cbiAgLy8gQ2hpcHMgaW5wdXRzXG4gIEBJbnB1dCgpIGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZSBpbnB1dHNcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgcm93U2VsZWN0YWJsZT86IChyb3c6IGFueSkgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDQwLCA2MCwgODBdO1xuICBASW5wdXQoKSBwYWdlU2l6ZU1lbnVEaXJlY3Rpb246ICdhdXRvJyB8ICd1cCcgfCAnZG93bicgPSAnYXV0byc7XG4gIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gY29udHJvbHNcbiAgQElucHV0KCkgc2VydmVyU2lkZVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG90YWxFbGVtZW50czogbnVtYmVyID0gMDtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfT4oKTtcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIGhlYWRlciBzb3J0IGRvZXMgbm90IHJlb3JkZXIgcm93cyBsb2NhbGx5ICh1c2Ugd2l0aCBzZXJ2ZXJTaWRlUGFnaW5hdGlvbiArIHNvcnRDaGFuZ2UpLlxuICAgKiBEZWZhdWx0IHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVMb2NhbFNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGZpZWxkSWQ6IHN0cmluZztcbiAgICBmaWVsZFZhbHVlPzogc3RyaW5nO1xuICAgIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCBudWxsO1xuICB9PigpO1xuICAvLyBMb2FkZXIgY29udHJvbHMgKHBhc3NlZCBkb3duIHRvIGR5bmFtaWMgdGFibGUpXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNUYWJsZURhdGFMb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gQmFja3dhcmQtY29tcGF0aWJpbGl0eSBmbGFnOyBpZiBwcm92aWRlZCwgZHluYW1pYyB0YWJsZSB3aWxsIHVzZSBpdCB3aGVuIHNwZWNpZmljIGZsYWdzIGFyZSB1bmRlZmluZWRcblxuICAvLyBPcHRpb25hbCBnZXR0ZXIgZm9yIEpTT04gcGF0aCBwZXIgY2VsbC4gV2hlbiBwcm92aWRlZCwgZG91YmxlLWNsaWNraW5nIGEgY2VsbCBjb3BpZXMgdGhlIHBhdGguXG4gIEBJbnB1dCgpIGNlbGxKc29uUGF0aEdldHRlcj86IChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nLCByb3c6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBKU09OIHBhdGggaXMgY29waWVkIGZyb20gYSB0YWJsZSBjZWxsXG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiBzdHJpbmcgfSkgPT4gdm9pZDtcblxuICAvLyBTZWxlY3RlZCBpdGVtcyAoZnVsbCBvYmplY3RzKSBmb3IgbWFpbnRhaW5pbmcgc2VsZWN0aW9uIGFjcm9zcyBwYWdpbmF0aW9uIChzZXJ2ZXItc2lkZSlcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBmb3IgY29sdW1uIHZpc2liaWxpdHlcbiAgcHJpdmF0ZSBfY29sdW1uVmlzaWJpbGl0eTogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyA9IHt9O1xuICBwcml2YXRlIF9jYWNoZWRWaXNpYmlsaXR5Q29sdW1uczogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+ID0gW107XG4gIGZpbHRlcmVkUm93czogYW55W10gPSBbXTtcbiAgcGFnZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cbiAgcHJpdmF0ZSBwZW5kaW5nRmlsdGVyczogYW55O1xuICBwcml2YXRlIGFwcGxpZWRGaWx0ZXJzOiBhbnk7XG4gIHByaXZhdGUgYXV0b1JlZnJlc2hUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbiAgQE91dHB1dCgpIG9uUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25BdXRvUmVmcmVzaENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKER5bmFtaWNGaWx0ZXJDb21wb25lbnQpIGR5bmFtaWNGaWx0ZXJDb21wb25lbnQ/OiBEeW5hbWljRmlsdGVyQ29tcG9uZW50O1xuXG4gIC8vIERlcml2ZWQgY29sdW1ucyB3aXRoIHZpc2liaWxpdHkgYXBwbGllZC5cbiAgY29tcHV0ZWRDb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICAvLyBBdXRvLWdlbmVyYXRlZCB2aXNpYmlsaXR5IGNvbHVtbnMgZnJvbSBjb2x1bW5zIGlucHV0XG4gIHZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcblxuICBwcml2YXRlIHVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmlsaXR5ID0gdGhpcy5fY29sdW1uVmlzaWJpbGl0eSB8fCB7fTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgdGhpcy5jb21wdXRlZENvbHVtbnMgPSBzb3VyY2UubWFwKGNvbCA9PiB7XG4gICAgICBpZiAoWydjaGVja2JveCcsICdhY3Rpb25zJ10uaW5jbHVkZXMoY29sLmZpZWxkSWQpKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBjb25zdCBzaG93ID0gdmlzaWJpbGl0eVtjb2wuZmllbGRJZF07XG4gICAgICByZXR1cm4geyAuLi5jb2wsIGlzU2hvdzogc2hvdyAhPT0gZmFsc2UgfTtcbiAgICB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLm1hcFZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgdGhpcy52aXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgY29sdW1uIHZpc2liaWxpdHkgc3RhdGVcbiAgZ2V0IGNvbHVtblZpc2liaWxpdHkoKTogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblZpc2liaWxpdHk7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KCk7XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlDb2x1bW5zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydpc0VtcHR5U3RhdGUnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW1zJ10gfHwgY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5U3RhdGUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gW107XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluIHNlcnZlci1zaWRlIG1vZGUsIGFzc3VtZSBpbmNvbWluZyBkYXRhIGlzIGFscmVhZHkgYSBwYWdlIHNsaWNlXG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3RlZCBJRHMgZnJvbSBzZWxlY3RlZEl0ZW1zIChvYmplY3RzKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBTZXQ8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IE51bWJlcihpdGVtLmlkKSkuZmlsdGVyKGlkID0+ICFpc05hTihpZCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZVNlbGVjdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuXG4gICAgaWYgKHNlbGVjdGVkSWRzU2V0LnNpemUgPT09IDApIHtcbiAgICAgIC8vIElmIG5vIHNlbGVjdGVkIElEcywgY2xlYXIgYWxsIHNlbGVjdGlvbiBzdGF0ZXNcbiAgICAgIGlmICh0aGlzLnBhZ2VkUm93cykge1xuICAgICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIHN0YXRlIGJhc2VkIG9uIHNlbGVjdGVkSXRlbXNcbiAgICBpZiAodGhpcy5wYWdlZFJvd3MpIHtcbiAgICAgIHRoaXMucGFnZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChyb3cgYXMgYW55KS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHNTZXQuaGFzKE51bWJlcihyb3cuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyB1cGRhdGUgZmlsdGVyZWRSb3dzIGZvciBjb25zaXN0ZW5jeVxuICAgIGlmICh0aGlzLmZpbHRlcmVkUm93cykge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZElkc1NldC5oYXMoTnVtYmVyKHJvdy5pZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJpbGl0eSBjb2x1bW5zIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBhcnJheXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIC8vIEluaXRpYWxpemUgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgYWxsIHZpc2liaWxpdHkgY29sdW1ucyAoZGVmYXVsdCB0byB0cnVlKVxuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgYW55Um93U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZWxlY3RlZCBpdGVtcyAoZWl0aGVyIG9uIGN1cnJlbnQgcGFnZSBvciBhY3Jvc3MgYWxsIHBhZ2VzIHZpYSBzZWxlY3RlZEl0ZW1zKVxuICAgIGNvbnN0IGhhc1NlbGVjdGVkT25QYWdlID0gISEodGhpcy5wYWdlZFJvd3MgJiYgdGhpcy5wYWdlZFJvd3Muc29tZShyID0+ICEhKHIgYXMgYW55KS5pc1NlbGVjdGVkKSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG4gICAgY29uc3QgaGFzU2VsZWN0ZWRBY3Jvc3NQYWdlcyA9IHNlbGVjdGVkSWRzU2V0LnNpemUgPiAwO1xuICAgIHJldHVybiBoYXNTZWxlY3RlZE9uUGFnZSB8fCBoYXNTZWxlY3RlZEFjcm9zc1BhZ2VzO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICAvLyBJZiBzZWxlY3RlZEl0ZW1zIChmdWxsIG9iamVjdHMpIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gZGlyZWN0bHlcbiAgICAvLyBUaGlzIGVuc3VyZXMgYWxsIHNlbGVjdGVkIGl0ZW1zIGFyZSByZXR1cm5lZCwgaW5jbHVkaW5nIHRob3NlIGZyb20gb3RoZXIgcGFnZXNcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjazogRm9yIGNsaWVudC1zaWRlIHBhZ2luYXRpb24gb3Igd2hlbiBzZWxlY3RlZEl0ZW1zIGlzIG5vdCBwcm92aWRlZCxcbiAgICAvLyBmaWx0ZXIgcGFnZWRSb3dzIHRvIGdldCBzZWxlY3RlZCBpdGVtcyBmcm9tIGN1cnJlbnQgcGFnZSBvbmx5XG4gICAgaWYgKCF0aGlzLnBhZ2VkUm93cyB8fCB0aGlzLnBhZ2VkUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZElkc1NldCA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcbiAgICBcbiAgICAvLyBGaWx0ZXIgcm93cyB0aGF0IGFyZSBzZWxlY3RlZFxuICAgIHJldHVybiB0aGlzLnBhZ2VkUm93c1xuICAgICAgLmZpbHRlcihyID0+IHtcbiAgICAgICAgaWYgKCFyIHx8IHIuaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByb3dJZCA9IE51bWJlcihyLmlkKTtcbiAgICAgICAgLy8gSW5jbHVkZSBpZiBlaXRoZXI6XG4gICAgICAgIC8vIDEuIFRoZSByb3cgaGFzIGlzU2VsZWN0ZWQgPSB0cnVlIChjdXJyZW50IHBhZ2Ugc2VsZWN0aW9uKVxuICAgICAgICAvLyAyLiBUaGUgcm93J3MgSUQgaXMgaW4gc2VsZWN0ZWRJdGVtcyAoc2VsZWN0ZWQgb24gb3RoZXIgcGFnZXMgb3IgcmVzdG9yZWQgc2VsZWN0aW9uKVxuICAgICAgICByZXR1cm4gISEociBhcyBhbnkpLmlzU2VsZWN0ZWQgfHwgc2VsZWN0ZWRJZHNTZXQuaGFzKHJvd0lkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYWN0aW9uQ2xpY2soZGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ2FjdGlvbiB0b29sYmFyJywgZGF0YSk7XG4gIH1cblxuICB2aWV3KGlkOiBudW1iZXIgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnVmlldycsIGlkKTtcbiAgfVxuXG4gIGVkaXQocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRWRpdCcsIHJvdyk7XG4gIH1cblxuICBkZWxldGUocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlJywgcm93KTtcbiAgfVxuXG4gIHRvZ2dsZUZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJQYW5lbCA9ICF0aGlzLnNob3dGaWx0ZXJQYW5lbDtcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZShjZmc6IENvbHVtblZpc2liaWxpdHlDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5ID0geyAuLi5jZmcgfTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BdXRvUmVmcmVzaENoYW5nZShpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbCA9IGludGVydmFsTXM7XG4gICAgdGhpcy5zZXR1cEF1dG9SZWZyZXNoKGludGVydmFsTXMpO1xuICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdWYWx1ZSBjaGFuZ2VkJywgdmFsdWUpO1xuICAgIHRoaXMub25TZWFyY2hDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBzZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTZWFyY2gnLCB2YWx1ZSk7XG4gIH1cblxuICBjbGVhcmVkKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdDbGVhcmVkJyk7XG4gIH1cblxuICBvbkVtcHR5QWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgaWYgKGFjdGlvbj8ubGFiZWwgPT09ICdTaG93IGZpbHRlcnMnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUZpbHRlcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyc0NoYW5nZWQoY3VycmVudDogYW55KTogdm9pZCB7XG4gICAgLy8gRGVmZXIgYXBwbHlpbmcgZmlsdGVycyBhbmQgdXBkYXRpbmcgY2hpcHMgdW50aWwgQXBwbHkgRmlsdGVyIGlzIGNsaWNrZWRcbiAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gY3VycmVudDtcbiAgfVxuXG4gIG9uRmlsdGVyc0FwcGxpZWQoYXBwbGllZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmlsdGVyUGFuZWwgPSBmYWxzZTtcbiAgICBjb25zdCBlZmZlY3RpdmUgPSBhcHBsaWVkID8/IHRoaXMucGVuZGluZ0ZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGVmZmVjdGl2ZTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gICAgaWYgKGVmZmVjdGl2ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZWZmZWN0aXZlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVmZmVjdGl2ZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCB0aGUgZmlsdGVyIGNvbmZpZyBpdGVtIGZvciB0aGlzIGtleVxuICAgICAgICBjb25zdCBmaWx0ZXJDb25maWdJdGVtID0gdGhpcy5maWx0ZXJDb25maWc/LmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpbHRlckNvbmZpZ0l0ZW0/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkaXNwbGF5IHRleHQgZnJvbSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGdldERpc3BsYXlUZXh0ID0gKHZhbDogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhbHJlYWR5IGFuIG9iamVjdCB3aXRoIG5hbWUvbGFiZWwsIHVzZSBpdFxuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgKHZhbC5uYW1lIHx8IHZhbC5sYWJlbCB8fCB2YWwudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm5hbWUgPz8gdmFsLmxhYmVsID8/IFN0cmluZyh2YWwudmFsdWUgPz8gdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vayB1cCB0aGUgb3B0aW9uIGluIHRoZSBjb25maWdcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRJZCA9IG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRWYWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbFN0ciA9IFN0cmluZyh2YWwpO1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRJZCkgPT09IHZhbFN0ciB8fCBTdHJpbmcob3B0VmFsdWUpID09PSB2YWxTdHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5uYW1lID8/IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlID8/IHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSByYXcgdmFsdWVcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBsZXQgbGFiZWwgPSBmaWx0ZXJDb25maWdJdGVtPy5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRleHQgPSB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gZ2V0RGlzcGxheVRleHQodikpLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICgnc3RhcnQnIGluIHZhbHVlIHx8ICdlbmQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzID0gdmFsdWUuc3RhcnQgPyBuZXcgRGF0ZSh2YWx1ZS5zdGFydCkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGUgPSB2YWx1ZS5lbmQgPyBuZXcgRGF0ZSh2YWx1ZS5lbmQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICB0ZXh0ID0gW3MsIGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgLSAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlwcy5wdXNoKHsga2V5LCBsYWJlbCwgdGV4dCwgZnVsbFRleHQ6IHRleHQsIGhhc01vcmU6IHRleHQubGVuZ3RoID4gMzAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hpcHMgPSBjaGlwcztcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYW5kbGVSZXNldEZpbHRlckNsaWNrKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGNoaXBzIGFuZCByZXNldCBmaWx0ZXJlZCBkYXRhIHdoZW4gcmVzZXQgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5vblJlc2V0RmlsdGVyQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlUmVmcmVzaENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25BdXRvUmVmcmVzaENsaWNrLmVtaXQoKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclJlbG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZmZlY3RpdmUgPSB0aGlzLmFwcGxpZWRGaWx0ZXJzID8/IHt9O1xuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gdGhpcy5kYXRhLmZpbHRlcihyID0+IHRoaXMucGFzc0ZpbHRlcnMoZWZmZWN0aXZlLCByKSk7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5vblJlbG9hZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b1JlZnJlc2goaW50ZXJ2YWxNczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoKCk7XG4gICAgaWYgKGludGVydmFsTXMgJiYgaW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gICAgICB9LCBpbnRlcnZhbE1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQXV0b1JlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9SZWZyZXNoVGltZXIpO1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBdXRvUmVmcmVzaCgpO1xuICB9XG5cbiAgb25QYWdpbmF0ZShlOiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGUucGFnZUluZGV4O1xuICAgIHRoaXMucGFnZVNpemUgPSBlLnBhZ2VTaXplO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gc2l6ZTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBvblJlbW92ZUNoaXAoY2hpcDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IHRoaXMuY2hpcHMuZmlsdGVyKGMgPT4gYyAhPT0gY2hpcCk7XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gdGhpcy5jaGlwcy5sZW5ndGggPiAwO1xuICAgIC8vIEVtaXQgZXZlbnQgdG8gcGFyZW50IGNvbXBvbmVudCAoc2FtZSBwYXR0ZXJuIGFzIGV4ZWN1dGlvbiB0YWIpXG4gICAgdGhpcy5yZW1vdmVDaGlwLmVtaXQoY2hpcCk7XG4gIH1cblxuICBvbkNsZWFyQWxsQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGlwcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IHRoZSBkeW5hbWljLWZpbHRlciBjb21wb25lbnQgZm9ybSB3aGVuIGNsZWFyaW5nIGFsbCBjaGlwc1xuICAgIGlmICh0aGlzLmR5bmFtaWNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgIHRoaXMuZHluYW1pY0ZpbHRlckNvbXBvbmVudC5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICAvLyBTZXJ2ZXIgbW9kZTogcGFyZW50IHN1cHBsaWVzIGFscmVhZHktcGFnaW5hdGVkIGRhdGFcbiAgICAgIHRoaXMucGFnZWRSb3dzID0gWy4uLnRoaXMuZmlsdGVyZWRSb3dzXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhZ2VJbmRleCAqIHRoaXMucGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMucGFnZWRSb3dzID0gdGhpcy5maWx0ZXJlZFJvd3Muc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFZpc2liaWxpdHlDb2x1bW5zKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pXG4gICAgICAuZmlsdGVyKGMgPT4gYy5pc0RlZmF1bHQgPT09IGZhbHNlKVxuICAgICAgLm1hcChjID0+ICh7IGlkOiBjLmZpZWxkSWQsIGxhYmVsOiBjLmZpZWxkTmFtZSB8fCBjLmZpZWxkSWQgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGQ6IGFueSk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICghZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdHMgPSBEYXRlLnBhcnNlKGQpO1xuICAgIHJldHVybiBpc05hTih0cykgPyBudWxsIDogdHM7XG4gIH1cblxuICBwcml2YXRlIHBhc3NGaWx0ZXJzKGZpbHRlcnM6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybiB0cnVlO1xuICAgIGlmIChmaWx0ZXJzLnN0YXR1cyAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMuc3RhdHVzKSAmJiBmaWx0ZXJzLnN0YXR1cy5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5zdGF0dXMuaW5jbHVkZXMocm93LnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcnMucHJpb3JpdHkgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnByaW9yaXR5KSAmJiBmaWx0ZXJzLnByaW9yaXR5Lmxlbmd0aCkge1xuICAgICAgaWYgKCFmaWx0ZXJzLnByaW9yaXR5LmluY2x1ZGVzKHJvdy5wcmlvcml0eU5hbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnRlc3RUeXBlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy50ZXN0VHlwZSkgJiYgZmlsdGVycy50ZXN0VHlwZS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy50ZXN0VHlwZS5pbmNsdWRlcyhyb3cudGVzdFR5cGUpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLmNyZWF0ZWRfZGF0ZSAmJiAoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQgfHwgZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKSkge1xuICAgICAgY29uc3Qgc3RhcnRUcyA9IHRoaXMubm9ybWFsaXplRGF0ZShmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5zdGFydCk7XG4gICAgICBjb25zdCBlbmRUcyA9IHRoaXMubm9ybWFsaXplRGF0ZShmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5lbmQpO1xuICAgICAgY29uc3Qgcm93VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUocm93LmNyZWF0ZWRBdCk7XG4gICAgICBpZiAocm93VHMgIT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RhcnRUcyAhPSBudWxsICYmIHJvd1RzIDwgc3RhcnRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZW5kVHMgIT0gbnVsbCAmJiByb3dUcyA+IGVuZFRzKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJhY2tCeVRlbXBsYXRlUmVmKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQnlEcm9wZG93blRlbXBsYXRlUmVmKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8vIEV4cG9ydCBtb2RhbCBzdGF0ZVxuICBpc0V4cG9ydE1vZGFsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGV4cG9ydENvZGVDbGljaygpOiB2b2lkIHtcbiAgICAvLyBHZXQgc2VsZWN0ZWQgaXRlbXNcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcztcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gcGFyZW50IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZFxuICAgICAgdGhpcy5vbkV4cG9ydENsaWNrLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUV4cG9ydE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIG9uRXhwb3J0TW9kYWxFeHBvcnQocmVzdWx0OiB7IHR5cGU6ICdsb2NhbCcgfCAnZW1haWwnOyBlbWFpbHM/OiBzdHJpbmdbXTsgZnJhbWV3b3JrOiAnV0VCRFJJVkVSX0lPJyB8ICdTRUxFTklVTV9KQVZBJyB9KTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIC8vIEVtaXQgZXZlbnQgdG8gcGFyZW50IHdpdGggZXhwb3J0IHJlc3VsdFxuICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KHtcbiAgICAgIHR5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgZW1haWxzOiByZXN1bHQuZW1haWxzLFxuICAgICAgZnJhbWV3b3JrOiByZXN1bHQuZnJhbWV3b3JrLFxuICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQ2FzZXNGb3JFeHBvcnQoKTogQXJyYXk8eyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgbmFtZTogaXRlbS5uYW1lIHx8IGl0ZW0udGl0bGUgfHwgJ1VubmFtZWQnXG4gICAgfSkpO1xuICB9XG4gIGdldCBhcnJvd0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9IFtcbiAgICAgICdjcWEtdy00JyxcbiAgICAgICdjcWEtaC00JyxcbiAgICAgICdjcWEtcmVsYXRpdmUnLFxuICAgICAgJ2NxYS10cmFuc2l0aW9uLXRyYW5zZm9ybSdcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuc2hvd0ZpbHRlclBhbmVsKSB7XG4gICAgICBiYXNlQ2xhc3Nlcy5wdXNoKCdjcWEtcm90YXRlLTE4MCcpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlQ2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJlbGF0aXZlXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiIXNob3dTZWFyY2hCYXIgPyAnY3FhLWp1c3RpZnktZW5kJyA6ICdjcWEtanVzdGlmeS1iZXR3ZWVuJ1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYi0zXCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJzaG93Q2xlYXJcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAoY2xlYXJlZCk9XCJjbGVhcmVkKClcIlxuICAgICAgPjwvY3FhLXNlYXJjaC1iYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgIGljb249XCJvcGVuX2luX25ld1wiXG4gICAgICAgIFt0ZXh0XT1cImlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0V4cG9ydGluZ1wiXG4gICAgICAgIChjbGlja2VkKT1cImV4cG9ydENvZGVDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnIH19PC9zcGFuPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgXG4gICAgICA8IS0tIEV4cG9ydCBDb2RlIE1vZGFsIC0tPlxuICAgICAgPGNxYS1leHBvcnQtY29kZS1tb2RhbFxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICBbaXNPcGVuXT1cImlzRXhwb3J0TW9kYWxPcGVuXCJcbiAgICAgICAgW2Nhc2VzXT1cInNlbGVjdGVkQ2FzZXNGb3JFeHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUV4cG9ydE1vZGFsKClcIlxuICAgICAgICAoZXhwb3J0KT1cIm9uRXhwb3J0TW9kYWxFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZXhwb3J0LWNvZGUtbW9kYWw+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkcm9wZG93blRlbXBsYXRlIG9mIG90aGVyRHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdERyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdERyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJhZGRcIlxuICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUZpbHRlcigpXCJcbiAgICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgRmlsdGVyICAgICAgICAgIFxuICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJhcnJvd0NsYXNzZXNcIj5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy0yIGNxYS1oLTEgY3FhLWFic29sdXRlIGNxYS1sZWZ0LVs0cHhdIGNxYS10b3AtWzZweF1cIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDggNFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk0wIDBMNCA0TDggMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzBCMEIwQ1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zM1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWNvbHVtbi12aXNpYmlsaXR5XG4gICAgICAgICAgKm5nSWY9XCJzaG93U2V0dGluZ3NCdXR0b25cIlxuICAgICAgICAgIFtjb2x1bW5zXT1cInZpc2liaWxpdHlDb2x1bW5zXCJcbiAgICAgICAgICBbY29sdW1uVmlzaWJpbGl0eV09XCJjb2x1bW5WaXNpYmlsaXR5XCJcbiAgICAgICAgICBbc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsXT1cInNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgKGNvbHVtblZpc2liaWxpdHlDaGFuZ2UpPVwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChhdXRvUmVmcmVzaENoYW5nZSk9XCJvbkF1dG9SZWZyZXNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jcWEtY29sdW1uLXZpc2liaWxpdHk+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93QXV0b1JlZnJlc2hCdXR0b25cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlUmVmcmVzaENsaWNrKClcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidSZWZyZXNoJ1wiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b25UZW1wbGF0ZSBvZiBvdGhlckJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGNxYS1zZWxlY3RlZC1maWx0ZXJzIFxuICAgICAgW2ZpbHRlckFwcGxpZWRdPVwiZmlsdGVyQXBwbGllZFwiXG4gICAgICBbY2hpcHNdPVwiY2hpcHNcIlxuICAgICAgKHJlbW92ZUNoaXApPVwib25SZW1vdmVDaGlwKCRldmVudClcIlxuICAgICAgKGNsZWFyQWxsKT1cIm9uQ2xlYXJBbGxDaGlwcygpXCJcbiAgICAgIChvbkNsZWFyQWxsKT1cIm9uQ2xlYXJBbGwuZW1pdCgpXCJcbiAgICA+XG4gICAgPC9jcWEtc2VsZWN0ZWQtZmlsdGVycz5cblxuICAgIDxjcWEtZHluYW1pYy1maWx0ZXJcbiAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclBhbmVsXCJcbiAgICAgIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCJcbiAgICAgIFttb2RlbF09XCJmaWx0ZXJNb2RlbFwiXG4gICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICAoZmlsdGVyc0NoYW5nZWQpPVwib25GaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlcnNBcHBsaWVkKCRldmVudClcIlxuICAgICAgKG9uQXBwbHlGaWx0ZXJDbGljayk9XCJvbkFwcGx5RmlsdGVyQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblJlc2V0RmlsdGVyQ2xpY2spPVwiaGFuZGxlUmVzZXRGaWx0ZXJDbGljaygpXCJcbiAgICA+XG4gICAgPC9jcWEtZHluYW1pYy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtWzdweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1sIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLWdyZXktMjAwIGNxYS1yZWxhdGl2ZSBjcWEtb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzVGFibGVMb2FkaW5nIHx8IGlzVGFibGVEYXRhTG9hZGluZykgfHwgKCFpc0VtcHR5U3RhdGUgJiYgcGFnZWRSb3dzICYmIHBhZ2VkUm93cy5sZW5ndGggPiAwKTsgZWxzZSBzdG9yeUVtcHR5VHBsXCI+XG4gICAgICAgIDxhcHAtZHluYW1pYy10YWJsZVxuICAgICAgICAgIFtjb2x1bW5zXT1cImNvbXB1dGVkQ29sdW1uc1wiXG4gICAgICAgICAgW2RhdGFdPVwicGFnZWRSb3dzXCJcbiAgICAgICAgICBbcm93U2VsZWN0YWJsZV09XCJyb3dTZWxlY3RhYmxlXCJcbiAgICAgICAgICBbZW5hYmxlTG9jYWxTb3J0XT1cImVuYWJsZUxvY2FsU29ydFwiXG4gICAgICAgICAgW2lzVGFibGVMb2FkaW5nXT1cImlzVGFibGVMb2FkaW5nXCJcbiAgICAgICAgICBbaXNUYWJsZURhdGFMb2FkaW5nXT1cImlzVGFibGVEYXRhTG9hZGluZ1wiXG4gICAgICAgICAgW2NlbGxKc29uUGF0aEdldHRlcl09XCJjZWxsSnNvblBhdGhHZXR0ZXJcIlxuICAgICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGFibGVUcGw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weS04XCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbGx1c3RyYXRpb25zL2VtcHR5LXN0YXRlLnN2Z1wiIGFsdD1cIk5vIGRhdGFcIiBjbGFzcz1cImNxYS13LTMyIGNxYS1oLTMyIGNxYS1tYi00XCIgLz5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLW1iLTJcIj5ObyB0ZXN0IGNhc2VzPC9oMz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTUwMCBjcWEtbWItNFwiPlRyeSBhZGp1c3RpbmcgZmlsdGVycyBvciBjcmVhdGUgYSBuZXcgdGVzdCBjYXNlLjwvcD5cbiAgICAgICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIChjbGlja2VkKT1cInRvZ2dsZUZpbHRlcigpXCI+U2hvdyBGaWx0ZXJzPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hcHAtZHluYW1pYy10YWJsZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3N0b3J5RW1wdHlUcGw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC02IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxjcWEtZW1wdHktc3RhdGVcbiAgICAgICAgICAgICpuZ0lmPVwiaXNFbXB0eVN0YXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJlbXB0eVN0YXRlQ29uZmlnLnRpdGxlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJlbXB0eVN0YXRlQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFtpbWFnZVVybF09XCJlbXB0eVN0YXRlQ29uZmlnLmltYWdlVXJsXCJcbiAgICAgICAgICAgIFthY3Rpb25zXT1cImVtcHR5U3RhdGVDb25maWcuYWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25FbXB0eUFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9jcWEtZW1wdHktc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwvZGl2PlxuXG4gICAgPGNxYS1wYWdpbmF0aW9uXG4gICAgICBbdG90YWxFbGVtZW50c109XCJzZXJ2ZXJTaWRlUGFnaW5hdGlvbiA/IHRvdGFsRWxlbWVudHMgOiBmaWx0ZXJlZFJvd3MubGVuZ3RoXCJcbiAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICBbcGFnZVNpemVNZW51RGlyZWN0aW9uXT1cInBhZ2VTaXplTWVudURpcmVjdGlvblwiXG4gICAgICBbcGFnZUl0ZW1Db3VudF09XCJwYWdlZFJvd3MubGVuZ3RoXCJcbiAgICAgIChwYWdpbmF0ZSk9XCJvblBhZ2luYXRlKCRldmVudClcIlxuICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvY3FhLXBhZ2luYXRpb24+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiYW55Um93U2VsZWN0ZWRcIiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtYm90dG9tLVsxOC43NXB4XSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS13LWZ1bGwgbGc6Y3FhLW1heC13LVs2OCVdIGNxYS1zbTptYXgtdy1bNzUlXSBjcWEtbWF4LXctWzkwJV0gY3FhLXotWzFdXCIgPlxuICAgICAgPGNxYS10YWJsZS1hY3Rpb24tdG9vbGJhclxuICAgICAgICBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBjdXJyZW50U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFthY3Rpb25zXT1cImFjdGlvbnNcIlxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9jcWEtdGFibGUtYWN0aW9uLXRvb2xiYXI+XG4gICAgPC9kaXY+XG4gICAgXG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|