@cqa-lib/cqa-ui 1.1.353 → 1.1.355
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/step-builder/step-builder-action/step-builder-action.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +7 -3
- package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +9 -4
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +9 -4
- package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +9 -4
- package/esm2020/lib/test-case-details/scroll-step/scroll-step.component.mjs +69 -10
- package/fesm2015/cqa-lib-cqa-ui.mjs +119 -25
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +119 -25
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +3 -1
- package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +3 -1
- package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +3 -1
- package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +3 -1
- package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +3 -1
- package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +3 -1
- package/lib/step-builder/step-builder-group/step-builder-group.component.d.ts +3 -1
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +3 -1
- package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +3 -1
- package/lib/test-case-details/scroll-step/scroll-step.component.d.ts +19 -2
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -8,7 +8,8 @@ import * as i4 from "../../custom-input/custom-input.component";
|
|
|
8
8
|
import * as i5 from "@angular/material/icon";
|
|
9
9
|
import * as i6 from "../advanced-variables-form/advanced-variables-form.component";
|
|
10
10
|
import * as i7 from "../../button/button.component";
|
|
11
|
-
import * as i8 from "
|
|
11
|
+
import * as i8 from "../../badge/badge.component";
|
|
12
|
+
import * as i9 from "@angular/common";
|
|
12
13
|
export class StepBuilderAiAgentComponent {
|
|
13
14
|
constructor(fb) {
|
|
14
15
|
this.fb = fb;
|
|
@@ -27,6 +28,8 @@ export class StepBuilderAiAgentComponent {
|
|
|
27
28
|
/** Options for other locators dropdown */
|
|
28
29
|
this.otherLocatorsOptions = [];
|
|
29
30
|
this.editMode = false;
|
|
31
|
+
/** True while parent is creating the step (API in progress); show loader on Create/Update Step button */
|
|
32
|
+
this.isCreatingStep = false;
|
|
30
33
|
/** Emit when step is created */
|
|
31
34
|
this.createStep = new EventEmitter();
|
|
32
35
|
/** Emit when cancelled */
|
|
@@ -385,10 +388,10 @@ export class StepBuilderAiAgentComponent {
|
|
|
385
388
|
}
|
|
386
389
|
}
|
|
387
390
|
StepBuilderAiAgentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
388
|
-
StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
391
|
+
StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", isCreatingStep: "isCreatingStep", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i8.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
389
392
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, decorators: [{
|
|
390
393
|
type: Component,
|
|
391
|
-
args: [{ selector: 'cqa-step-builder-ai-agent', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
|
|
394
|
+
args: [{ selector: 'cqa-step-builder-ai-agent', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
392
395
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { typeOptions: [{
|
|
393
396
|
type: Input
|
|
394
397
|
}], environmentOptions: [{
|
|
@@ -425,6 +428,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
425
428
|
type: Input
|
|
426
429
|
}], editMode: [{
|
|
427
430
|
type: Input
|
|
431
|
+
}], isCreatingStep: [{
|
|
432
|
+
type: Input
|
|
428
433
|
}], createStep: [{
|
|
429
434
|
type: Output
|
|
430
435
|
}], cancelled: [{
|
|
@@ -436,4 +441,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
436
441
|
}], advancedSettingsVariables: [{
|
|
437
442
|
type: Input
|
|
438
443
|
}] } });
|
|
439
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBdUIvRSxNQUFNLE9BQU8sMkJBQTJCO0lBa0R0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWpEbkMsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDL0IsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUNqRCwrREFBK0Q7UUFDdEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHFDQUFxQztRQUM1QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFaEQsdUNBQXVDO1FBQzlCLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFFaEQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFFbkQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFhMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRTNELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZ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c0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFNRSx5QkFBeUI7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50Rm9ybURhdGEge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50czogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlDb3VudD86IHN0cmluZztcbiAgaWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciB0eXBlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBlbnZpcm9ubWVudHMgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgZW52aXJvbm1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0Vudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPcHRpb25zIGZvciByZXRyeSBjb3VudCBkcm9wZG93biAqL1xuICBASW5wdXQoKSByZXRyeUNvdW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgaWZyYW1lIGxvY2F0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaWZyYW1lTG9jYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIG90aGVyIGxvY2F0b3JzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG90aGVyTG9jYXRvcnNPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxRdWVyeT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFR5cGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50cz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGlzYWJsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFJldHJ5Q291bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGluaXRpYWxJZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsT3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50cyAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTG9hZGVkSW5pdGlhbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIChjYW4gYmUgcHJvdmlkZWQgZnJvbSBwYXJlbnQgb3IgaW5pdGlhbGl6ZWQgZnJvbSBmb3JtKVxuICBASW5wdXQoKSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuYWlBZ2VudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudmlyb25tZW50czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IFtmYWxzZV0sXG4gICAgICBkaXNhYmxlZDogW2ZhbHNlXSxcbiAgICAgIHJldHJ5Q291bnQ6IFsnJ10sXG4gICAgICBpZnJhbWVMb2NhdG9yOiBbJyddLFxuICAgICAgb3RoZXJMb2NhdG9yczogWycnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIHByb3ZpZGVkIChlZGl0IG1vZGUpXG4gICAgaWYgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2hlbiBwcm92aWRlZCBieSBwYXJlbnQsIGFwcGx5IHRvIGZvcm0gYW5kIGJ1aWxkIGNvbnRyb2xzXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZGVyaXZlIGZyb20gY3VycmVudCBmb3JtIHZhbHVlc1xuICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgaW5pdGlhbCB2YWx1ZSBpbnB1dHMgY2hhbmdlZFxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUtleXMgPSBbXG4gICAgICAnaW5pdGlhbFF1ZXJ5JywgJ2luaXRpYWxUeXBlJywgJ2luaXRpYWxEZXNjcmlwdGlvbicsICdpbml0aWFsRW52aXJvbm1lbnRzJyxcbiAgICAgICdpbml0aWFsTWV0YWRhdGEnLCAnaW5pdGlhbERpc2FibGVkJywgJ2luaXRpYWxDb250aW51ZU9uRXJyb3InLFxuICAgICAgJ2luaXRpYWxSZXRyeUNvdW50JywgJ2luaXRpYWxJZnJhbWVMb2NhdG9yJywgJ2luaXRpYWxPdGhlckxvY2F0b3JzJywgJ2VkaXRNb2RlJ1xuICAgIF07XG4gICAgXG4gICAgY29uc3QgaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyA9IGluaXRpYWxWYWx1ZUtleXMuc29tZShrZXkgPT4gXG4gICAgICBjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZVxuICAgICk7XG4gICAgXG4gICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgaXQncyBzZXQgYWZ0ZXIgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIG9yIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZWRcbiAgICBpZiAoaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyB8fCAodGhpcy5oYXNJbml0aWFsRGF0YSgpICYmICF0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB3aGVuIGluaXRpYWwgdmFsdWVzIGNoYW5nZSAodW5sZXNzIHBhcmVudCBwcm92aWRlZCB0aGVtKVxuICAgICAgaWYgKCF0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgfHwgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwYXJlbnQgdXBkYXRlcyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLCByZWJ1aWxkIGZvcm0gYW5kIHN5bmMgdG8gYWlBZ2VudEZvcm1cbiAgICBpZiAoY2hhbmdlc1snYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyddICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNsZWFyZWQsIHJlYnVpbGQgZnJvbSBmb3JtIHZhbHVlc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbml0aWFsRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pbml0aWFsUXVlcnkgfHwgdGhpcy5pbml0aWFsVHlwZSB8fCB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzIHx8IHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJbml0aWFsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbG9hZEluaXRpYWxEYXRhOiBMb2FkaW5nIEFJLWFnZW50IGRhdGEnLCB7XG4gICAgICBpbml0aWFsUXVlcnk6IHRoaXMuaW5pdGlhbFF1ZXJ5LFxuICAgICAgaW5pdGlhbFR5cGU6IHRoaXMuaW5pdGlhbFR5cGUsXG4gICAgICBpbml0aWFsRGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uLFxuICAgICAgaW5pdGlhbEVudmlyb25tZW50czogdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzLFxuICAgICAgaW5pdGlhbE1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSxcbiAgICAgIGluaXRpYWxEaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQsXG4gICAgICBpbml0aWFsQ29udGludWVPbkVycm9yOiB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IsXG4gICAgICBpbml0aWFsUmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCxcbiAgICAgIGluaXRpYWxJZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yLFxuICAgICAgaW5pdGlhbE90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMsXG4gICAgICBlZGl0TW9kZTogdGhpcy5lZGl0TW9kZVxuICAgIH0pO1xuXG4gICAgLy8gUG9wdWxhdGUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5haUFnZW50Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSB8fCAnJyxcbiAgICAgIHR5cGU6IHRoaXMuaW5pdGlhbFR5cGUgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBlbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB8fCAnJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsRGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgOiB0cnVlLFxuICAgICAgcmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHRoaXMuaW5pdGlhbFJldHJ5Q291bnQpIDogJycsXG4gICAgICBpZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgb3RoZXJMb2NhdG9yczogdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyB8fCAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFkdmFuY2VkIHNlY3Rpb24gaWYgYW55IGFkdmFuY2VkIGZpZWxkcyBoYXZlIHZhbHVlc1xuICAgIGlmICh0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8IFxuICAgICAgICB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzKSB7XG4gICAgICB0aGlzLnNob3dBZHZhbmNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGJhc2VkIG9uIGN1cnJlbnQgZm9ybSB2YWx1ZXMgd2hlblxuICAgKiBwYXJlbnQgaGFzIG5vdCBwcm92aWRlZCBhbnkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcblxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lzU3RlcE9wdGlvbmFsJyxcbiAgICAgICAgbGFiZWw6IFwiRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXCIsXG4gICAgICAgIHZhbHVlOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkU2tpcCcsXG4gICAgICAgIGxhYmVsOiAnU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi4nLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuZGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHdMb2NhdG9yJyxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBMb2NhdG9ycycsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyksXG4gICAgICAgIHR5cGU6ICdzdHJfbGlzdCdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGluY29taW5nIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9scy5cbiAgICogVXNlZCB3aGVuIHBhcmVudCBwYXNzZXMgYWR2YW5jZWQgdmFyaWFibGVzIChlLmcuIGZyb20gU3RlcEJ1aWxkZXJTZXJ2aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YXJpYWJsZS52YWx1ZSB8fCAnJykpO1xuICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG90aGVyTG9jYXRvcnMgZm9ybSB2YWx1ZSB0byBhIHN0cmluZyBhcnJheSBmb3Igc3RyX2xpc3QuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8gU3BsaXQgYnkgY29tbWEgYW5kIHRyaW0gd2hpdGVzcGFjZVxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoc2FtZSBwYXR0ZXJuIGFzIGFjdGlvbiBzdGVwKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3R5cGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgdHlwZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMudHlwZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW52aXJvbm1lbnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnZW52aXJvbm1lbnRzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGVudmlyb25tZW50JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmVudmlyb25tZW50T3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMsXG4gICAgICBvblNlYXJjaDogKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaEVudmlyb25tZW50cy5lbWl0KHNlYXJjaFRlcm0pO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyAmJiAhdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb3JlRW52aXJvbm1lbnRzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRSZXRyeUNvdW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3JldHJ5Q291bnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLnJldHJ5Q291bnRPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldElmcmFtZUxvY2F0b3JDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnaWZyYW1lTG9jYXRvcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuaWZyYW1lTG9jYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdvdGhlckxvY2F0b3JzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5vdGhlckxvY2F0b3JzT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZCA9ICF0aGlzLnNob3dBZHZhbmNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2VzIGFuZCBzeW5jIHRvIGZvcm0uXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbHNcbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtIGluIHN5bmNcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KHZhcmlhYmxlSW5kZXgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIG5vbi1ib29sZWFuIHZhbHVlIGNoYW5nZXMgKGUuZy4gcHdMb2NhdG9yKSBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgLy8gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nW10gZnJvbSBzdHJfbGlzdFxuICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YWx1ZSB8fCAnJykpO1xuICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KTtcbiAgICAgIGNvbnN0IGlzU3RyTGlzdCA9IHZhcmlhYmxlICYmIHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCc7XG4gICAgICBpZiAoIWlzU3RyTGlzdCkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5haUFnZW50Rm9ybS52YWxpZCkge1xuICAgICAgLy8gRW5zdXJlIGFkdmFuY2VkIHZhcmlhYmxlIHZhbHVlcyBhcmUgc3luY2VkIGJhY2sgdG8gdGhlIGZvcm0gYmVmb3JlIGVtaXR0aW5nXG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgICAgPyB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFyaWFibGUudmFsdWUgfHwgJycpKTtcbiAgICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmFpQWdlbnRGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEFpQWdlbnRGb3JtRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IGZvcm1WYWx1ZS5xdWVyeSB8fCAnJyxcbiAgICAgICAgdHlwZTogZm9ybVZhbHVlLnR5cGUgfHwgJycsXG4gICAgICAgIGVudmlyb25tZW50czogZm9ybVZhbHVlLmVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgY29udGludWVPbkVycm9yOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIHx8IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZm9ybVZhbHVlLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICByZXRyeUNvdW50OiBmb3JtVmFsdWUucmV0cnlDb3VudCB8fCAnJyxcbiAgICAgICAgaWZyYW1lTG9jYXRvcjogZm9ybVZhbHVlLmlmcmFtZUxvY2F0b3IgfHwgJycsXG4gICAgICAgIG90aGVyTG9jYXRvcnM6IGZvcm1WYWx1ZS5vdGhlckxvY2F0b3JzIHx8ICcnLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yIGNxYS1oLWZ1bGwgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgQUkgU3RlcCcgOiAnQ3JlYXRlIEFJIFN0ZXAnIH19XG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIFwiPlxuICAgIDwhLS0gV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/PHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItYWktYWdlbnQtdGV4dGFyZWFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1doYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPydcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdxdWVyeScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgICBbdGV4dGFyZWFJbmxpbmVTdHlsZV09XCIncmVzaXplOiB2ZXJ0aWNhbDttYXgtaGVpZ2h0OiA0MDBweDsnXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgncXVlcnknKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMwQTBBMEFdIFwiPlxuICAgICAgICBUaXA6IFVzZSBudW1iZXJlZCBzdGVwcyBvciBidWxsZXQgcG9pbnRzIGZvciBjb21wbGV4IHRhc2tzLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1jdXN0b20tZm9ybS1maWVsZHNcIj5cbiAgICA8IS0tIFR5cGUgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02IGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBUeXBlPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS13LWZ1bGxcIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0VHlwZUNvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRW52aXJvbm1lbnRzIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRW52aW9yb25tZW50czxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldEVudmlyb25tZW50Q29uZmlnKClcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTIgY3FhLXctMS8yIGNxYS1wci0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIE1ldGFkYXRhXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctMS8yIGNxYS1wbC0yIFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBBZHZhbmNlZCBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLXB5LTIgY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwic2hvd0FkdmFuY2VkXCI+XG4gICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dBZHZhbmNlZFwiIGNsYXNzPVwiIGNxYS1jdXN0b20tZm9ybS1maWVsZHMgY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0gXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPC9jcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0+XG4gICAgICAgIDwhLS0gQ29udGludWUgb24gRXJyb3IgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1tYi0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzczNzM3M11cIj5Db250aW51ZSBvbiBFcnJvcjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtYnVpbGRlci10b2dnbGUtc2VjdGlvblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdXCI+XG4gICAgICAgICAgICAgIERvbid0IGZhaWwgdGhlIHRlc3QgaWYgdGhpcyBzdGVwIGZhaWxzLlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gRGlzYWJsZWQgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1tYi0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM3MzczNzNdXCI+RGlzYWJsZWQ8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItdG9nZ2xlLXNlY3Rpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV1cIj5cbiAgICAgICAgICAgICAgU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIFJldHJ5IENvdW50IC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBSZXRyeSBDb3VudFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0UmV0cnlDb3VudENvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIElmcmFtZSBsb2NhdG9yIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBJZnJhbWUgbG9jYXRvclxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS10ZXh0LVsjNDE0MTQ2XVwiIFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRJZnJhbWVMb2NhdG9yQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gT3RoZXIgTG9jYXRvcnMgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWItMVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgICAgIE90aGVyIExvY2F0b3JzXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRPdGhlckxvY2F0b3JzQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtYXV0byBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1yb3VuZGVkLVsxMHB4XVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0NyZWF0ZSBTdGVwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWFpQWdlbnRGb3JtLnZhbGlkXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQXVCL0UsTUFBTSxPQUFPLDJCQUEyQjtJQXFEdEMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFwRG5DLGdDQUFnQztRQUN2QixnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFFMUMsd0NBQXdDO1FBQy9CLHVCQUFrQixHQUFtQixFQUFFLENBQUM7UUFDakQsK0RBQStEO1FBQ3RELHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUM5QyxxQ0FBcUM7UUFDNUIsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhELHVDQUF1QztRQUM5QixzQkFBaUIsR0FBbUIsRUFBRSxDQUFDO1FBRWhELDBDQUEwQztRQUNqQyx5QkFBb0IsR0FBbUIsRUFBRSxDQUFDO1FBRW5ELDBDQUEwQztRQUNqQyx5QkFBb0IsR0FBbUIsRUFBRSxDQUFDO1FBYTFDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFbkMseUdBQXlHO1FBQ2hHLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRXpDLGdDQUFnQztRQUN0QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1C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dkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBTUUseUJBQXlCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWlBZ2VudEZvcm1EYXRhIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudHM6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJldHJ5Q291bnQ/OiBzdHJpbmc7XG4gIGlmcmFtZUxvY2F0b3I/OiBzdHJpbmc7XG4gIG90aGVyTG9jYXRvcnM/OiBzdHJpbmc7XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM/OiBhbnlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1haS1hZ2VudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJBaUFnZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogT3B0aW9ucyBmb3IgdHlwZSBkcm9wZG93biAqL1xuICBASW5wdXQoKSB0eXBlT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgZW52aXJvbm1lbnRzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcbiAgLyoqIEluZGljYXRlcyBpZiBtb3JlIGVudmlyb25tZW50cyBhcmUgYXZhaWxhYmxlIGZvciBsb2FkaW5nICovXG4gIEBJbnB1dCgpIGhhc01vcmVFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIExvYWRpbmcgc3RhdGUgZm9yIGVudmlyb25tZW50cyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3B0aW9ucyBmb3IgcmV0cnkgY291bnQgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgcmV0cnlDb3VudE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIGlmcmFtZSBsb2NhdG9yIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGlmcmFtZUxvY2F0b3JPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBvdGhlciBsb2NhdG9ycyBkcm9wZG93biAqL1xuICBASW5wdXQoKSBvdGhlckxvY2F0b3JzT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5pdGlhbCB2YWx1ZXMgZm9yIGVkaXQgbW9kZSAqL1xuICBASW5wdXQoKSBpbml0aWFsUXVlcnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxUeXBlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxFbnZpcm9ubWVudHM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxNZXRhZGF0YT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbERpc2FibGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbENvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluaXRpYWxSZXRyeUNvdW50PzogbnVtYmVyO1xuICBASW5wdXQoKSBpbml0aWFsSWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE90aGVyTG9jYXRvcnM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUvVXBkYXRlIFN0ZXAgYnV0dG9uICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRpbmdTdGVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPEFpQWdlbnRGb3JtRGF0YT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdCB3aGVuIHVzZXIgc2VhcmNoZXMgZm9yIGVudmlyb25tZW50cyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBlbnZpcm9ubWVudHMgKi9cbiAgQE91dHB1dCgpIGxvYWRNb3JlRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGFpQWdlbnRGb3JtOiBGb3JtR3JvdXA7XG4gIHNob3dBZHZhbmNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGhhc0xvYWRlZEluaXRpYWxEYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoY2FuIGJlIHByb3ZpZGVkIGZyb20gcGFyZW50IG9yIGluaXRpYWxpemVkIGZyb20gZm9ybSlcbiAgQElucHV0KCkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtOiBGb3JtQXJyYXk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmFpQWdlbnRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBxdWVyeTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHR5cGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBlbnZpcm9ubWVudHM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBtZXRhZGF0YTogWycnXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgY29udGludWVPbkVycm9yOiBbZmFsc2VdLFxuICAgICAgZGlzYWJsZWQ6IFtmYWxzZV0sXG4gICAgICByZXRyeUNvdW50OiBbJyddLFxuICAgICAgaWZyYW1lTG9jYXRvcjogWycnXSxcbiAgICAgIG90aGVyTG9jYXRvcnM6IFsnJ11cbiAgICB9KTtcblxuICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtID0gdGhpcy5mYi5hcnJheShbXSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBMb2FkIGluaXRpYWwgZGF0YSBpZiBwcm92aWRlZCAoZWRpdCBtb2RlKVxuICAgIGlmICh0aGlzLmhhc0luaXRpYWxEYXRhKCkpIHtcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XG4gICAgICB0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlc1xuICAgIGlmICh0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgJiYgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdoZW4gcHJvdmlkZWQgYnkgcGFyZW50LCBhcHBseSB0byBmb3JtIGFuZCBidWlsZCBjb250cm9sc1xuICAgICAgdGhpcy5hcHBseUFkdmFuY2VkU2V0dGluZ3NUb0Zvcm0oKTtcbiAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2s6IGRlcml2ZSBmcm9tIGN1cnJlbnQgZm9ybSB2YWx1ZXNcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgYW55IGluaXRpYWwgdmFsdWUgaW5wdXRzIGNoYW5nZWRcbiAgICBjb25zdCBpbml0aWFsVmFsdWVLZXlzID0gW1xuICAgICAgJ2luaXRpYWxRdWVyeScsICdpbml0aWFsVHlwZScsICdpbml0aWFsRGVzY3JpcHRpb24nLCAnaW5pdGlhbEVudmlyb25tZW50cycsXG4gICAgICAnaW5pdGlhbE1ldGFkYXRhJywgJ2luaXRpYWxEaXNhYmxlZCcsICdpbml0aWFsQ29udGludWVPbkVycm9yJyxcbiAgICAgICdpbml0aWFsUmV0cnlDb3VudCcsICdpbml0aWFsSWZyYW1lTG9jYXRvcicsICdpbml0aWFsT3RoZXJMb2NhdG9ycycsICdlZGl0TW9kZSdcbiAgICBdO1xuICAgIFxuICAgIGNvbnN0IGhhc0luaXRpYWxWYWx1ZUNoYW5nZXMgPSBpbml0aWFsVmFsdWVLZXlzLnNvbWUoa2V5ID0+IFxuICAgICAgY2hhbmdlc1trZXldICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2VcbiAgICApO1xuICAgIFxuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIGl0J3Mgc2V0IGFmdGVyIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiBvciBpZiBpbml0aWFsIHZhbHVlcyBjaGFuZ2VkXG4gICAgaWYgKGhhc0luaXRpYWxWYWx1ZUNoYW5nZXMgfHwgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSAmJiAhdGhpcy5oYXNMb2FkZWRJbml0aWFsRGF0YSkpIHtcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XG4gICAgICB0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhID0gdHJ1ZTtcbiAgICAgIC8vIFJlLWluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3Mgd2hlbiBpbml0aWFsIHZhbHVlcyBjaGFuZ2UgKHVubGVzcyBwYXJlbnQgcHJvdmlkZWQgdGhlbSlcbiAgICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gcGFyZW50IHVwZGF0ZXMgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcywgcmVidWlsZCBmb3JtIGFuZCBzeW5jIHRvIGFpQWdlbnRGb3JtXG4gICAgaWYgKGNoYW5nZXNbJ2FkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMnXSAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMpIHtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBjbGVhcmVkLCByZWJ1aWxkIGZyb20gZm9ybSB2YWx1ZXNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzSW5pdGlhbERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuaW5pdGlhbFF1ZXJ5IHx8IHRoaXMuaW5pdGlhbFR5cGUgfHwgdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCB0aGlzLmluaXRpYWxNZXRhZGF0YSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbERpc2FibGVkICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbElmcmFtZUxvY2F0b3IgfHwgXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkSW5pdGlhbERhdGEoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2xvYWRJbml0aWFsRGF0YTogTG9hZGluZyBBSS1hZ2VudCBkYXRhJywge1xuICAgICAgaW5pdGlhbFF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSxcbiAgICAgIGluaXRpYWxUeXBlOiB0aGlzLmluaXRpYWxUeXBlLFxuICAgICAgaW5pdGlhbERlc2NyaXB0aW9uOiB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbixcbiAgICAgIGluaXRpYWxFbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyxcbiAgICAgIGluaXRpYWxNZXRhZGF0YTogdGhpcy5pbml0aWFsTWV0YWRhdGEsXG4gICAgICBpbml0aWFsRGlzYWJsZWQ6IHRoaXMuaW5pdGlhbERpc2FibGVkLFxuICAgICAgaW5pdGlhbENvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yLFxuICAgICAgaW5pdGlhbFJldHJ5Q291bnQ6IHRoaXMuaW5pdGlhbFJldHJ5Q291bnQsXG4gICAgICBpbml0aWFsSWZyYW1lTG9jYXRvcjogdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvcixcbiAgICAgIGluaXRpYWxPdGhlckxvY2F0b3JzOiB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzLFxuICAgICAgZWRpdE1vZGU6IHRoaXMuZWRpdE1vZGVcbiAgICB9KTtcblxuICAgIC8vIFBvcHVsYXRlIGZvcm0gd2l0aCBpbml0aWFsIHZhbHVlc1xuICAgIHRoaXMuYWlBZ2VudEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBxdWVyeTogdGhpcy5pbml0aWFsUXVlcnkgfHwgJycsXG4gICAgICB0eXBlOiB0aGlzLmluaXRpYWxUeXBlIHx8ICcnLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgZW52aXJvbm1lbnRzOiB0aGlzLmluaXRpYWxFbnZpcm9ubWVudHMgfHwgJycsXG4gICAgICBtZXRhZGF0YTogdGhpcy5pbml0aWFsTWV0YWRhdGEgfHwgJycsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCA/IHRoaXMuaW5pdGlhbERpc2FibGVkIDogZmFsc2UsXG4gICAgICBjb250aW51ZU9uRXJyb3I6IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgIHJldHJ5Q291bnQ6IHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCA/IFN0cmluZyh0aGlzLmluaXRpYWxSZXRyeUNvdW50KSA6ICcnLFxuICAgICAgaWZyYW1lTG9jYXRvcjogdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCAnJyxcbiAgICAgIG90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMgfHwgJydcbiAgICB9KTtcblxuICAgIC8vIEV4cGFuZCBhZHZhbmNlZCBzZWN0aW9uIGlmIGFueSBhZHZhbmNlZCBmaWVsZHMgaGF2ZSB2YWx1ZXNcbiAgICBpZiAodGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycykge1xuICAgICAgdGhpcy5zaG93QWR2YW5jZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyBiYXNlZCBvbiBjdXJyZW50IGZvcm0gdmFsdWVzIHdoZW5cbiAgICogcGFyZW50IGhhcyBub3QgcHJvdmlkZWQgYW55IGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuYWlBZ2VudEZvcm0udmFsdWU7XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpc1N0ZXBPcHRpb25hbCcsXG4gICAgICAgIGxhYmVsOiBcIkRvbid0IGZhaWwgdGhlIHRlc3QgaWYgdGhpcyBzdGVwIGZhaWxzLlwiLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmNvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkID8gZm9ybVZhbHVlLmNvbnRpbnVlT25FcnJvciA6IHRydWUsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Nob3VsZFNraXAnLFxuICAgICAgICBsYWJlbDogJ1NraXAgdGhpcyBzdGVwIGR1cmluZyBleGVjdXRpb24uJyxcbiAgICAgICAgdmFsdWU6IGZvcm1WYWx1ZS5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gZm9ybVZhbHVlLmRpc2FibGVkIDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3B3TG9jYXRvcicsXG4gICAgICAgIGxhYmVsOiAnT3RoZXIgTG9jYXRvcnMnLFxuICAgICAgICB2YWx1ZTogdGhpcy5jb252ZXJ0T3RoZXJMb2NhdG9yc1RvQXJyYXkoZm9ybVZhbHVlLm90aGVyTG9jYXRvcnMpLFxuICAgICAgICB0eXBlOiAnc3RyX2xpc3QnXG4gICAgICB9XG4gICAgXTtcblxuICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBpbmNvbWluZyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHRvIHRoZSB1bmRlcmx5aW5nIGZvcm0gY29udHJvbHMuXG4gICAqIFVzZWQgd2hlbiBwYXJlbnQgcGFzc2VzIGFkdmFuY2VkIHZhcmlhYmxlcyAoZS5nLiBmcm9tIFN0ZXBCdWlsZGVyU2VydmljZSkuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyB8fCB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLm5hbWUgPT09ICdpc1N0ZXBPcHRpb25hbCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSlcbiAgICAgICAgICA/IHZhcmlhYmxlLnZhbHVlXG4gICAgICAgICAgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFyaWFibGUudmFsdWUgfHwgJycpKTtcbiAgICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ290aGVyTG9jYXRvcnMnKT8uc2V0VmFsdWUoam9pbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBvdGhlckxvY2F0b3JzIGZvcm0gdmFsdWUgdG8gYSBzdHJpbmcgYXJyYXkgZm9yIHN0cl9saXN0LlxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0T3RoZXJMb2NhdG9yc1RvQXJyYXkodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIFNwbGl0IGJ5IGNvbW1hIGFuZCB0cmltIHdoaXRlc3BhY2VcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGl0ZW0gPT4gaXRlbS50cmltKCkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCByZWFjdGl2ZSBmb3JtIGZvciBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgKHNhbWUgcGF0dGVybiBhcyBhY3Rpb24gc3RlcCkuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIGZvcm0gYXJyYXlcbiAgICB3aGlsZSAodGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZm9ybSBncm91cHMgZm9yIGVhY2ggYWR2YW5jZWQgdmFyaWFibGVcbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBsZXQgZGVmYXVsdFZhbHVlOiBhbnk7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0Jykge1xuICAgICAgICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSkgPyB2YXJpYWJsZS52YWx1ZSA6IFtdO1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KFxuICAgICAgICAgIHZhbHVlQXJyYXkubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB2YWx1ZUFycmF5Lm1hcCgoaXRlbTogc3RyaW5nKSA9PiB0aGlzLmZiLmNvbnRyb2woaXRlbSkpXG4gICAgICAgICAgICA6IFt0aGlzLmZiLmNvbnRyb2woJycpXSAvLyBTdGFydCB3aXRoIG9uZSBlbXB0eSBjb250cm9sXG4gICAgICAgICk7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZvcm1BcnJheTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGUubmFtZV0sXG4gICAgICAgIHZhbHVlOiB2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnID8gZGVmYXVsdFZhbHVlIDogW2RlZmF1bHRWYWx1ZV0sXG4gICAgICAgIHR5cGU6IFt2YXJpYWJsZS50eXBlIHx8ICdzdHJpbmcnXSxcbiAgICAgICAgbGFiZWw6IFt2YXJpYWJsZS5sYWJlbCB8fCAnJ11cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VHlwZUNvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICd0eXBlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IHR5cGUnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLnR5cGVPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudmlyb25tZW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2Vudmlyb25tZW50cycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBlbnZpcm9ubWVudCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgc2VydmVyU2VhcmNoOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5lbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVFbnZpcm9ubWVudHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nRW52aXJvbm1lbnRzLFxuICAgICAgb25TZWFyY2g6IChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hFbnZpcm9ubWVudHMuZW1pdChzZWFyY2hUZXJtKTtcbiAgICAgIH0sXG4gICAgICBvbkxvYWRNb3JlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc01vcmVFbnZpcm9ubWVudHMgJiYgIXRoaXMuaXNMb2FkaW5nRW52aXJvbm1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkTW9yZUVudmlyb25tZW50cy5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0UmV0cnlDb3VudENvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdyZXRyeUNvdW50JyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5yZXRyeUNvdW50T3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBnZXRJZnJhbWVMb2NhdG9yQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2lmcmFtZUxvY2F0b3InLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmlmcmFtZUxvY2F0b3JPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldE90aGVyTG9jYXRvcnNDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnb3RoZXJMb2NhdG9ycycsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3RoZXJMb2NhdG9yc09wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWR2YW5jZWQgPSAhdGhpcy5zaG93QWR2YW5jZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIGJvb2xlYW4gdmFyaWFibGUgY2hhbmdlcyBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY29ycmVzcG9uZGluZyBmb3JtIGNvbnRyb2xzXG4gICAgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YXJpYWJsZU5hbWUgPT09ICdzaG91bGRTa2lwJykge1xuICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIGFkdmFuY2VkVmFyaWFibGVzRm9ybSBpbiBzeW5jXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZHZhbmNlZCBub24tYm9vbGVhbiB2YWx1ZSBjaGFuZ2VzIChlLmcuIHB3TG9jYXRvcikgYW5kIHN5bmMgdG8gZm9ybS5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgIC8vIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZ1tdIGZyb20gc3RyX2xpc3RcbiAgICAgIGNvbnN0IHZhbHVlc0FycmF5OiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFsdWUgfHwgJycpKTtcbiAgICAgIGNvbnN0IGpvaW5lZCA9IHZhbHVlc0FycmF5LmpvaW4oJywgJyk7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCk7XG4gICAgICBjb25zdCBpc1N0ckxpc3QgPSB2YXJpYWJsZSAmJiB2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnO1xuICAgICAgaWYgKCFpc1N0ckxpc3QpIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBvbkNyZWF0ZVN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWlBZ2VudEZvcm0udmFsaWQpIHtcbiAgICAgIC8vIEVuc3VyZSBhZHZhbmNlZCB2YXJpYWJsZSB2YWx1ZXMgYXJlIHN5bmNlZCBiYWNrIHRvIHRoZSBmb3JtIGJlZm9yZSBlbWl0dGluZ1xuICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLm5hbWUgPT09ICdwd0xvY2F0b3InKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSlcbiAgICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICAgIDogdGhpcy5jb252ZXJ0T3RoZXJMb2NhdG9yc1RvQXJyYXkoU3RyaW5nKHZhcmlhYmxlLnZhbHVlIHx8ICcnKSk7XG4gICAgICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBBaUFnZW50Rm9ybURhdGEgPSB7XG4gICAgICAgIHF1ZXJ5OiBmb3JtVmFsdWUucXVlcnkgfHwgJycsXG4gICAgICAgIHR5cGU6IGZvcm1WYWx1ZS50eXBlIHx8ICcnLFxuICAgICAgICBlbnZpcm9ubWVudHM6IGZvcm1WYWx1ZS5lbnZpcm9ubWVudHMgfHwgJycsXG4gICAgICAgIG1ldGFkYXRhOiBmb3JtVmFsdWUubWV0YWRhdGEgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIGNvbnRpbnVlT25FcnJvcjogZm9ybVZhbHVlLmNvbnRpbnVlT25FcnJvciB8fCBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZvcm1WYWx1ZS5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgcmV0cnlDb3VudDogZm9ybVZhbHVlLnJldHJ5Q291bnQgfHwgJycsXG4gICAgICAgIGlmcmFtZUxvY2F0b3I6IGZvcm1WYWx1ZS5pZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgICBvdGhlckxvY2F0b3JzOiBmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyB8fCAnJyxcbiAgICAgICAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLW1iLTRcIj5cbiAgICB7eyBlZGl0TW9kZSA/ICdFZGl0IEFJIFN0ZXAnIDogJ0NyZWF0ZSBBSSBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBcIj5cbiAgICA8IS0tIFdoYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgIFdoYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPzxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhXG4gICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50LXRleHRhcmVhXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT8nXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgncXVlcnknKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbcm93c109XCI0XCJcbiAgICAgICAgW3RleHRhcmVhSW5saW5lU3R5bGVdPVwiJ3Jlc2l6ZTogdmVydGljYWw7bWF4LWhlaWdodDogNDAwcHg7J1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ3F1ZXJ5Jyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBcIj5cbiAgICAgICAgVGlwOiBVc2UgbnVtYmVyZWQgc3RlcHMgb3IgYnVsbGV0IHBvaW50cyBmb3IgY29tcGxleCB0YXNrcy5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtY3VzdG9tLWZvcm0tZmllbGRzXCI+XG4gICAgPCEtLSBUeXBlIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgVHlwZTxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdy1mdWxsXCIgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFR5cGVDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVudmlyb25tZW50cyBEcm9wZG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTYgY3FhLXctMS8yIGNxYS1wbC0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIEVudmlvcm9ubWVudHM8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRFbnZpcm9ubWVudENvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yIGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBNZXRhZGF0YVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdtZXRhZGF0YScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVzY3JpcHRpb24gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcGwtMiBcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RleHQgSW5wdXQnXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDwhLS0gQWR2YW5jZWQgU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cInNob3dBZHZhbmNlZFwiPlxuICAgICAgICAgIGV4cGFuZF9tb3JlXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWR2YW5jZWRcIiBjbGFzcz1cIiBjcWEtY3VzdG9tLWZvcm0tZmllbGRzIGNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgICA8Y3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIFxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlc109XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXCJcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZUZvcm1dPVwiYWR2YW5jZWRWYXJpYWJsZXNGb3JtXCJcbiAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8IS0tIENvbnRpbnVlIG9uIEVycm9yIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyM3MzczNzNdXCI+Q29udGludWUgb24gRXJyb3I8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItdG9nZ2xlLXNlY3Rpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgICBEb24ndCBmYWlsIHRoZSB0ZXN0IGlmIHRoaXMgc3RlcCBmYWlscy5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIERpc2FibGVkIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiPkRpc2FibGVkPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLXRvZ2dsZS1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdXCI+XG4gICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIGR1cmluZyBleGVjdXRpb24uXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBSZXRyeSBDb3VudCAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgUmV0cnkgQ291bnRcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFJldHJ5Q291bnRDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgbG9jYXRvciAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgSWZyYW1lIGxvY2F0b3JcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdGV4dC1bIzQxNDE0Nl1cIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0SWZyYW1lTG9jYXRvckNvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIE90aGVyIExvY2F0b3JzIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBPdGhlciBMb2NhdG9yc1xuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0NyZWF0ZSBTdGVwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWFpQWdlbnRGb3JtLnZhbGlkXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxkaXYgKm5nSWY9XCJpc0NyZWF0aW5nU3RlcFwiIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1mbGV4LTEgY3FhLW1pbi1oLVszOHB4XSBjcWEtcm91bmRlZC1bOHB4XVwiPlxuICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkNyZWF0aW5n4oCmXCIgaWNvbj1cImF1dG9yZW5ld1wiIFtpc0xvYWRpbmddPVwidHJ1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICBbaW5saW5lU3R5bGVzXT1cIidtaW4taGVpZ2h0OiAzOHB4OyBoZWlnaHQ6IDM4cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOydcIlxuICAgICAgICB2YXJpYW50PVwiaW5mb1wiIHNpemU9XCJtZWRpdW1cIj48L2NxYS1iYWRnZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|