@cqa-lib/cqa-ui 1.1.265 → 1.1.267

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.
@@ -150,10 +150,10 @@ export class AdvancedVariablesFormComponent {
150
150
  }
151
151
  }
152
152
  AdvancedVariablesFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AdvancedVariablesFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- AdvancedVariablesFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: { advancedVariables: "advancedVariables", advancedVariableForm: "advancedVariableForm" }, outputs: { variableBooleanChange: "variableBooleanChange", variableValueChange: "variableValueChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", components: [{ type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i2.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: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
+ AdvancedVariablesFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: { advancedVariables: "advancedVariables", advancedVariableForm: "advancedVariableForm" }, outputs: { variableBooleanChange: "variableBooleanChange", variableValueChange: "variableValueChange" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div *ngIf=\"formArray.length > 1\" class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", components: [{ type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i2.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: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AdvancedVariablesFormComponent, decorators: [{
155
155
  type: Component,
156
- args: [{ selector: 'cqa-advanced-variables-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", styles: [] }]
156
+ args: [{ selector: 'cqa-advanced-variables-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"isBooleanType(variable)\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n <mat-slide-toggle \n [checked]=\"getBooleanValue(variable, i)\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n {{ variable.label }}\n </label>\n </div>\n </ng-container>\n\n <!-- str_list variables with dynamic list -->\n <ng-container *ngIf=\"isStrListType(variable)\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n {{ variable.label }}\n </label>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n <cqa-custom-input \n [placeholder]=\"'Enter locator'\" \n [value]=\"control.value\" \n [fullWidth]=\"true\"\n (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n </cqa-custom-input>\n <div *ngIf=\"formArray.length > 1\" class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n </div>\n <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n", styles: [] }]
157
157
  }], propDecorators: { advancedVariables: [{
158
158
  type: Input
159
159
  }], advancedVariableForm: [{
@@ -163,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
163
163
  }], variableValueChange: [{
164
164
  type: Output
165
165
  }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWdCbkUsTUFBTSxPQUFPLDhCQUE4QjtJQVAzQztRQVFXLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0MseUJBQW9CLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQW9DLENBQUM7UUFDN0Usd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7S0FzSmxGO0lBcEpDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNuRSxzQ0FBc0M7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENB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cG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRWYXJpYWJsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXZhcmlhYmxlcy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFZhcmlhYmxlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhZHZhbmNlZFZhcmlhYmxlczogQWR2YW5jZWRWYXJpYWJsZVtdID0gW107XG4gIEBJbnB1dCgpIGFkdmFuY2VkVmFyaWFibGVGb3JtOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgXG4gIEBPdXRwdXQoKSB2YXJpYWJsZUJvb2xlYW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgdmFyaWFibGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGNoYW5nZXMgaWYgbmVlZGVkXG4gICAgaWYgKGNoYW5nZXNbJ2FkdmFuY2VkVmFyaWFibGVzJ10gfHwgY2hhbmdlc1snYWR2YW5jZWRWYXJpYWJsZUZvcm0nXSkge1xuICAgICAgLy8gRm9ybSBpcyBtYW5hZ2VkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGb3JtR3JvdXAgYXQgYSBzcGVjaWZpYyBpbmRleFxuICAgKi9cbiAgZ2V0Rm9ybUdyb3VwQXQoaW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtLmxlbmd0aCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZUZvcm0uYXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGZvcm0gb3IgdmFyaWFibGVcbiAgICovXG4gIGdldEJvb2xlYW5WYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgZnJvbSBmb3JtIG9yIHZhcmlhYmxlIChmb3Igbm9uLWJvb2xlYW4gdHlwZXMpXG4gICAqL1xuICBnZXRWYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXBBdChpbmRleCk7XG4gICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB2YXJpYWJsZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIGJvb2xlYW4gdHlwZVxuICAgKi9cbiAgaXNCb29sZWFuVHlwZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YXJpYWJsZS50eXBlICE9PSAnc3RyX2xpc3QnICYmIHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIHN0cl9saXN0IHR5cGVcbiAgICovXG4gIGlzU3RyTGlzdFR5cGUodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIG9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFyaWFibGVCb29sZWFuQ2hhbmdlLmVtaXQoeyBuYW1lOiB2YXJpYWJsZU5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB2YWx1ZSBjaGFuZ2UgZm9yIG5vbi1ib29sZWFuIHR5cGVzXG4gICAqL1xuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhcmlhYmxlVmFsdWVDaGFuZ2UuZW1pdCh7IG5hbWU6IHZhcmlhYmxlTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkZGluZyBhIG5ldyBpdGVtIHRvIHN0cl9saXN0XG4gICAqL1xuICBhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5wdXNoKG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4cGVjdGVkIEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGUsIGdvdDonLCB2YWx1ZUNvbnRyb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZpbmcgYW4gaXRlbSBmcm9tIHN0cl9saXN0XG4gICAqL1xuICByZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgaWYgKHZhbHVlQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB2YWx1ZUNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5yZW1vdmVBdChpdGVtSW5kZXgpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN0cl9saXN0IGl0ZW0gdmFsdWUgY2hhbmdlXG4gICAqL1xuICBvblN0ckxpc3RJdGVtQ2hhbmdlKHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlLCBpbmRleDogbnVtYmVyLCBpdGVtSW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5ICYmIGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHZhbHVlQ29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgLy8gVXNlIGVtaXRFdmVudDogZmFsc2UgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24gdGhhdCBjYXVzZXMgZm9jdXMgbG9zc1xuICAgICAgICB2YWx1ZUNvbnRyb2wuYXQoaXRlbUluZGV4KS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgZm9jdXMgaXNzdWVzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICB0aGlzLm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGVcbiAgICovXG4gIGdldFN0ckxpc3RGb3JtQXJyYXkodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUsIGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkgfCBudWxsIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSA/IGZvcm1BcnJheSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvclxuICAgKi9cbiAgdHJhY2tCeVZhcmlhYmxlKGluZGV4OiBudW1iZXIsIHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFyaWFibGUubmFtZSB8fCBpbmRleC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIHN0cl9saXN0XG4gICAqL1xuICB0cmFja0J5Q29udHJvbChpbmRleDogbnVtYmVyLCBjb250cm9sOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb250cm9sIHx8IGluZGV4O1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLXgtNiBjcWEtZ2FwLXktNCBjcWEtZmxleC13cmFwIGFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIGNxYS1tYi00XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGFkdmFuY2VkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5VmFyaWFibGVcIj5cbiAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCb29sZWFuVHlwZSh2YXJpYWJsZSlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0Qm9vbGVhblZhbHVlKHZhcmlhYmxlLCBpKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY2FwaXRhbGl6ZS1maXJzdFwiPlxuICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gc3RyX2xpc3QgdmFyaWFibGVzIHdpdGggZHluYW1pYyBsaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0ckxpc3RUeXBlKHZhcmlhYmxlKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjYXBpdGFsaXplLWZpcnN0XCI+XG4gICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RyTGlzdEZvcm1BcnJheSh2YXJpYWJsZSwgaSkgYXMgZm9ybUFycmF5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb250cm9sIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGl0ZW1JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciBsb2NhdG9yJ1wiIFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb250cm9sLnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TdHJMaXN0SXRlbUNoYW5nZSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1yZWQtNjAwIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCIgKGNsaWNrKT1cInJlbW92ZVN0ckxpc3RJdGVtKHZhcmlhYmxlLCBpLCBpdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbUluZGV4ID09PSBmb3JtQXJyYXkubGVuZ3RoIC0gMVwiIGNsYXNzPVwiY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWJsdWUtNjAwIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCIgKGNsaWNrKT1cImFkZFN0ckxpc3RJdGVtKHZhcmlhYmxlLCBpKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweDtcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0vYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWdCbkUsTUFBTSxPQUFPLDhCQUE4QjtJQVAzQztRQVFXLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0MseUJBQW9CLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQW9DLENBQUM7UUFDN0Usd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7S0FzSmxGO0lBcEpDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNuRSxzQ0FBc0M7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENB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cG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRWYXJpYWJsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXZhcmlhYmxlcy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFZhcmlhYmxlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBhZHZhbmNlZFZhcmlhYmxlczogQWR2YW5jZWRWYXJpYWJsZVtdID0gW107XG4gIEBJbnB1dCgpIGFkdmFuY2VkVmFyaWFibGVGb3JtOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcbiAgXG4gIEBPdXRwdXQoKSB2YXJpYWJsZUJvb2xlYW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgdmFyaWFibGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGNoYW5nZXMgaWYgbmVlZGVkXG4gICAgaWYgKGNoYW5nZXNbJ2FkdmFuY2VkVmFyaWFibGVzJ10gfHwgY2hhbmdlc1snYWR2YW5jZWRWYXJpYWJsZUZvcm0nXSkge1xuICAgICAgLy8gRm9ybSBpcyBtYW5hZ2VkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGb3JtR3JvdXAgYXQgYSBzcGVjaWZpYyBpbmRleFxuICAgKi9cbiAgZ2V0Rm9ybUdyb3VwQXQoaW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmFkdmFuY2VkVmFyaWFibGVGb3JtLmxlbmd0aCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZUZvcm0uYXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmcm9tIGZvcm0gb3IgdmFyaWFibGVcbiAgICovXG4gIGdldEJvb2xlYW5WYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKHZhcmlhYmxlLnZhbHVlIGFzIGJvb2xlYW4pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgZnJvbSBmb3JtIG9yIHZhcmlhYmxlIChmb3Igbm9uLWJvb2xlYW4gdHlwZXMpXG4gICAqL1xuICBnZXRWYWx1ZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXBBdChpbmRleCk7XG4gICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB2YXJpYWJsZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIGJvb2xlYW4gdHlwZVxuICAgKi9cbiAgaXNCb29sZWFuVHlwZSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YXJpYWJsZS50eXBlICE9PSAnc3RyX2xpc3QnICYmIHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhcmlhYmxlIGlzIHN0cl9saXN0IHR5cGVcbiAgICovXG4gIGlzU3RyTGlzdFR5cGUodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZSBjaGFuZ2VcbiAgICovXG4gIG9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFyaWFibGVCb29sZWFuQ2hhbmdlLmVtaXQoeyBuYW1lOiB2YXJpYWJsZU5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB2YWx1ZSBjaGFuZ2UgZm9yIG5vbi1ib29sZWFuIHR5cGVzXG4gICAqL1xuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhcmlhYmxlVmFsdWVDaGFuZ2UuZW1pdCh7IG5hbWU6IHZhcmlhYmxlTmFtZSwgdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkZGluZyBhIG5ldyBpdGVtIHRvIHN0cl9saXN0XG4gICAqL1xuICBhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5wdXNoKG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4cGVjdGVkIEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGUsIGdvdDonLCB2YWx1ZUNvbnRyb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZpbmcgYW4gaXRlbSBmcm9tIHN0cl9saXN0XG4gICAqL1xuICByZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZTogQWR2YW5jZWRWYXJpYWJsZSwgaW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgaWYgKHZhbHVlQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSAmJiBpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB2YWx1ZUNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlQ29udHJvbC5yZW1vdmVBdChpdGVtSW5kZXgpO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN0cl9saXN0IGl0ZW0gdmFsdWUgY2hhbmdlXG4gICAqL1xuICBvblN0ckxpc3RJdGVtQ2hhbmdlKHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlLCBpbmRleDogbnVtYmVyLCBpdGVtSW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwQXQoaW5kZXgpO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk7XG4gICAgICBpZiAodmFsdWVDb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5ICYmIGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHZhbHVlQ29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgLy8gVXNlIGVtaXRFdmVudDogZmFsc2UgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24gdGhhdCBjYXVzZXMgZm9jdXMgbG9zc1xuICAgICAgICB2YWx1ZUNvbnRyb2wuYXQoaXRlbUluZGV4KS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgZm9jdXMgaXNzdWVzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICB0aGlzLm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZvcm1BcnJheSBmb3Igc3RyX2xpc3QgdmFyaWFibGVcbiAgICovXG4gIGdldFN0ckxpc3RGb3JtQXJyYXkodmFyaWFibGU6IEFkdmFuY2VkVmFyaWFibGUsIGluZGV4OiBudW1iZXIpOiBGb3JtQXJyYXkgfCBudWxsIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cEF0KGluZGV4KTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSA/IGZvcm1BcnJheSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvclxuICAgKi9cbiAgdHJhY2tCeVZhcmlhYmxlKGluZGV4OiBudW1iZXIsIHZhcmlhYmxlOiBBZHZhbmNlZFZhcmlhYmxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFyaWFibGUubmFtZSB8fCBpbmRleC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIHN0cl9saXN0XG4gICAqL1xuICB0cmFja0J5Q29udHJvbChpbmRleDogbnVtYmVyLCBjb250cm9sOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb250cm9sIHx8IGluZGV4O1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLXgtNiBjcWEtZ2FwLXktNCBjcWEtZmxleC13cmFwIGFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIGNxYS1tYi00XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGFkdmFuY2VkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5VmFyaWFibGVcIj5cbiAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNCb29sZWFuVHlwZSh2YXJpYWJsZSlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0Qm9vbGVhblZhbHVlKHZhcmlhYmxlLCBpKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY2FwaXRhbGl6ZS1maXJzdFwiPlxuICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gc3RyX2xpc3QgdmFyaWFibGVzIHdpdGggZHluYW1pYyBsaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0ckxpc3RUeXBlKHZhcmlhYmxlKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjYXBpdGFsaXplLWZpcnN0XCI+XG4gICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RyTGlzdEZvcm1BcnJheSh2YXJpYWJsZSwgaSkgYXMgZm9ybUFycmF5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb250cm9sIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGl0ZW1JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciBsb2NhdG9yJ1wiIFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb250cm9sLnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TdHJMaXN0SXRlbUNoYW5nZSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1BcnJheS5sZW5ndGggPiAxXCIgY2xhc3M9XCJjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRleHQtcmVkLTYwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiIChjbGljayk9XCJyZW1vdmVTdHJMaXN0SXRlbSh2YXJpYWJsZSwgaSwgaXRlbUluZGV4KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweDtcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1JbmRleCA9PT0gZm9ybUFycmF5Lmxlbmd0aCAtIDFcIiBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1ibHVlLTYwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiIChjbGljayk9XCJhZGRTdHJMaXN0SXRlbSh2YXJpYWJsZSwgaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDI0cHg7XCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuIl19
@@ -174,10 +174,10 @@ export class StepBuilderGroupComponent {
174
174
  }
175
175
  }
176
176
  StepBuilderGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
177
- StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, 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\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\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' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.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: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
177
+ StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, 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\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\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' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.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: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'cqa-step-builder-group', 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\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\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' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
180
+ args: [{ selector: 'cqa-step-builder-group', 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\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\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' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
181
181
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { stepGroupOptions: [{
182
182
  type: Input
183
183
  }], hasMoreStepGroups: [{
@@ -205,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
205
205
  }], searchStepGroups: [{
206
206
  type: Output
207
207
  }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBMkJqRixNQUFNLE9BQU8seUJBQXlCO0lBNkNwQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTVDbkMsc0NBQXNDO1FBQzdCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQsOERBQThEO1FBQ3JELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1QyxvQ0FBb0M7UUFDM0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSzlDLDJCQUEyQjtRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBS25DLDBDQUEwQztRQUNqQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFLcEQsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsbURBQW1EO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUQsZ0RBQWdEO1FB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LE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM5RCxDQUFDOztzSEF6TVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsdW9CQzVCdEMsMnZLQTRHQTsyRkRoRmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBSXJCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuICAgIFxuICAgIGlmICh0aGlzLnJ1bnRpbWVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLnZhcmlhYmxlcyAmJiBncm91cC52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWVzOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgZ3JvdXAudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZhbHVlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHBhcmFtZXRlclZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzPy5bZ3JvdXAuaWRdPy5bdmFyaWFibGUubmFtZV07XG4gICAgICAgICAgICBncm91cFZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IGV4aXN0aW5nVmFsdWUgfHwgdmFyaWFibGUucGFyYW1ldGVyVmFsdWUgfHwgJyc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXAuaWRdID0gZ3JvdXBWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdKSB7XG4gICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXVtwYXJhbU5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShncm91cElkOiBudW1iZXIsIHBhcmFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0/LltwYXJhbU5hbWVdIHx8ICcnO1xuICB9XG5cbiAgaGFzUnVudGltZVZhcmlhYmxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJ1bnRpbWVWYXJpYWJsZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZXMuc29tZShncm91cCA9PiAhIWdyb3VwLnZhcmlhYmxlcz8ubGVuZ3RoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogU3RlcEdyb3VwRm9ybURhdGEgPSB7XG4gICAgICAgIHN0ZXBHcm91cElkOiBmb3JtVmFsdWUuc3RlcEdyb3VwSWQsXG4gICAgICAgIHN0ZXBHcm91cDogdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCxcbiAgICAgICAgcnVudGltZVZhcmlhYmxlczogdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEdyb3VwRm9ybS52YWxpZCAmJiAhIXRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWgtZnVsbFwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgU3RlcCBHcm91cCBUZXN0IFN0ZXAnIDogJ0NyZWF0ZSBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gU3RlcCBHcm91cCBTZWxlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIFNlbGVjdCBTdGVwIEdyb3VwPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICBbZm9ybV09XCJzdGVwR3JvdXBGb3JtXCJcbiAgICAgICAgW2NvbmZpZ109XCJzdGVwR3JvdXBDb25maWdcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIEdyb3VwIERlc2NyaXB0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzRiNTU2M11cIj5EZXNjcmlwdGlvbjo8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1iZy1bI2Y5ZmFmYl0gY3FhLXJvdW5kZWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZTVlN2ViXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMzc0MTUxXVwiIFtpbm5lckhUTUxdPVwiZ2V0U3RlcEdyb3VwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nU3RlcEdyb3Vwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBzdGVwIGdyb3Vwcy4uLjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1N0ZXBHcm91cHMgJiYgc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LWNlbnRlciBjcWEtcHktOCBjcWEtdGV4dC1bIzljYTNhZl0gY3FhLXRleHQtWzE0cHhdXCI+XG4gICAgICBObyBzdGVwIGdyb3VwcyBhdmFpbGFibGVcbiAgICA8L2Rpdj5cbiAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbXQtNiBjcWEtbWItNFwiPlxuICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItM1wiPlxuICAgICAgICBTZXQgUGFyYW1ldGVycyBEZWZhdWx0IFZhbHVlXG4gICAgICA8L2gzPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1wdC00XCI+XG4gICAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1J1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyIGNxYS1weS04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHJ1bnRpbWUgdmFyaWFibGVzLi4uPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUnVudGltZSBWYXJpYWJsZXMgVGFibGVzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1J1bnRpbWVWYXJpYWJsZXMgJiYgcnVudGltZVZhcmlhYmxlc1wiIGNsYXNzPVwiY3FhLXNwYWNlLXktNlwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoaWxkR3JvdXAgb2YgcnVudGltZVZhcmlhYmxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgICAgICAgKCB7e2kgKyAxfX0gKSB7eyBjaGlsZEdyb3VwLm5hbWUgfX1cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGRHcm91cC52YXJpYWJsZXMgJiYgY2hpbGRHcm91cC52YXJpYWJsZXMubGVuZ3RoID4gMDsgZWxzZSBub1ZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJvcmRlciBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLWxnIGNxYS1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImNxYS1iZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXIgTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgY2hpbGRHcm91cC52YXJpYWJsZXM7IGxldCBqID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0xMDAgbGFzdDpjcWEtYm9yZGVyLWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzE2MTYxN11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciB2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0UnVudGltZVZhcmlhYmxlVmFsdWUoY2hpbGRHcm91cC5pZCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25SdW50aW1lVmFyaWFibGVDaGFuZ2UoY2hpbGRHcm91cC5pZCwgdmFyaWFibGUubmFtZSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vVmFyaWFibGVzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLXB5LTJcIj5SdW50aW1lIHZhcmlhYmxlIG5vdCBhdmFpbGFibGU8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdJbnNlcnQgU3RlcCBHcm91cCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBMkJqRixNQUFNLE9BQU8seUJBQXlCO0lBNkNwQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTVDbkMsc0NBQXNDO1FBQzdCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQsOERBQThEO1FBQ3JELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1QyxvQ0FBb0M7UUFDM0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSzlDLDJCQUEyQjtRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBS25DLDBDQUEwQztRQUNqQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFLcEQsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsbURBQW1EO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUQsZ0RBQWdEO1FB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LE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM5RCxDQUFDOztzSEF6TVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsdW9CQzVCdEMsMnZLQTRHQTsyRkRoRmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBSXJCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuICAgIFxuICAgIGlmICh0aGlzLnJ1bnRpbWVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLnZhcmlhYmxlcyAmJiBncm91cC52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWVzOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgZ3JvdXAudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZhbHVlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHBhcmFtZXRlclZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzPy5bZ3JvdXAuaWRdPy5bdmFyaWFibGUubmFtZV07XG4gICAgICAgICAgICBncm91cFZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IGV4aXN0aW5nVmFsdWUgfHwgdmFyaWFibGUucGFyYW1ldGVyVmFsdWUgfHwgJyc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXAuaWRdID0gZ3JvdXBWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdKSB7XG4gICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXVtwYXJhbU5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShncm91cElkOiBudW1iZXIsIHBhcmFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0/LltwYXJhbU5hbWVdIHx8ICcnO1xuICB9XG5cbiAgaGFzUnVudGltZVZhcmlhYmxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJ1bnRpbWVWYXJpYWJsZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZXMuc29tZShncm91cCA9PiAhIWdyb3VwLnZhcmlhYmxlcz8ubGVuZ3RoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogU3RlcEdyb3VwRm9ybURhdGEgPSB7XG4gICAgICAgIHN0ZXBHcm91cElkOiBmb3JtVmFsdWUuc3RlcEdyb3VwSWQsXG4gICAgICAgIHN0ZXBHcm91cDogdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCxcbiAgICAgICAgcnVudGltZVZhcmlhYmxlczogdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEdyb3VwRm9ybS52YWxpZCAmJiAhIXRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWgtZnVsbFwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgU3RlcCBHcm91cCBUZXN0IFN0ZXAnIDogJ0NyZWF0ZSBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gU3RlcCBHcm91cCBTZWxlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIFNlbGVjdCBTdGVwIEdyb3VwPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICBbZm9ybV09XCJzdGVwR3JvdXBGb3JtXCJcbiAgICAgICAgW2NvbmZpZ109XCJzdGVwR3JvdXBDb25maWdcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIEdyb3VwIERlc2NyaXB0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzRiNTU2M11cIj5EZXNjcmlwdGlvbjo8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1iZy1bI2Y5ZmFmYl0gY3FhLXJvdW5kZWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZTVlN2ViXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMzc0MTUxXVwiIFtpbm5lckhUTUxdPVwiZ2V0U3RlcEdyb3VwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gUnVudGltZSBWYXJpYWJsZXMgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tdC02IGNxYS1tYi00XCI+XG4gICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgIFNldCBQYXJhbWV0ZXJzIERlZmF1bHQgVmFsdWVcbiAgICAgIDwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXB0LTRcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nUnVudGltZVZhcmlhYmxlc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjNmI3MjgwXVwiPkxvYWRpbmcgcnVudGltZSB2YXJpYWJsZXMuLi48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBUYWJsZXMgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nUnVudGltZVZhcmlhYmxlcyAmJiBydW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtc3BhY2UteS02XCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hpbGRHcm91cCBvZiBydW50aW1lVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItM1wiPlxuICAgICAgICAgICAgICAoIHt7aSArIDF9fSApIHt7IGNoaWxkR3JvdXAubmFtZSB9fVxuICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZEdyb3VwLnZhcmlhYmxlcyAmJiBjaGlsZEdyb3VwLnZhcmlhYmxlcy5sZW5ndGggPiAwOyBlbHNlIG5vVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbGcgY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiY3FhLWJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXIgVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2YXJpYWJsZSBvZiBjaGlsZEdyb3VwLnZhcmlhYmxlczsgbGV0IGogPSBpbmRleFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTEwMCBsYXN0OmNxYS1ib3JkZXItYi0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMTYxNjE3XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIHZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShjaGlsZEdyb3VwLmlkLCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJ1bnRpbWVWYXJpYWJsZUNoYW5nZShjaGlsZEdyb3VwLmlkLCB2YXJpYWJsZS5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WYXJpYWJsZXM+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtcHktMlwiPlJ1bnRpbWUgdmFyaWFibGUgbm90IGF2YWlsYWJsZTwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdJbnNlcnQgU3RlcCBHcm91cCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=