UNPKG

survey-angular-ui

Version:

A free MIT-licensed Angular UI component that renders dynamic, interactive JSON-based forms and surveys. You can use it to collect responses from users and send them to your own database.

73 lines 19.2 kB
import { Component, Input, ViewChild } from "@angular/core"; import { Helpers } from "survey-core"; import { BaseAngular } from "../../base-angular"; import * as i0 from "@angular/core"; import * as i1 from "../../survey-string.component"; import * as i2 from "../action-bar/action-bar.component"; import * as i3 from "../popup/popup.component"; import * as i4 from "@angular/common"; import * as i5 from "../../utils/dynamic.directive"; import * as i6 from "@angular/forms"; export class DropdownComponent extends BaseAngular { get dropdownModel() { var _a; return (_a = this.model) === null || _a === void 0 ? void 0 : _a.dropdownListModel; } getModel() { return this.model.dropdownListModel; } ngOnInit() { super.ngOnInit(); } click(event) { var _a; (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClick(event); } chevronPointerDown(event) { var _a; (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.chevronPointerDown(event); } clear(event) { var _a; (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClear(event); } keyhandler(event) { var _a; (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.keyHandler(event); } blur(event) { this.model.onBlur(event); this.updateInputDomElement(); } focus(event) { this.model.onFocus(event); } inputChange(event) { this.detectChanges(); } updateInputDomElement() { var _a; if (!!((_a = this.inputElementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) { const control = this.inputElementRef.nativeElement; const newValue = this.model.inputStringRendered; if (!Helpers.isTwoValueEquals(newValue, control.value, false, true, false)) { control.value = this.model.inputStringRendered || ""; } } } } DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownComponent, selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", inputs: { model: "model" }, viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.selectWrapper\" (click)=\"click($event)\">\n <div *ngIf=\"!model.isReadOnly\" [attr.tabindex]=\"dropdownModel.noTabIndex ? null : 0\"\n [class]=\"model.getControlClass()\" [attr.disabled]=\"model.isDisabledAttr ? true : null\" (blur)=\"blur($event)\"\n (keydown)=\"keyhandler($event)\" [attr.id]=\"model.inputId\" [attr.role]=\"dropdownModel.ariaQuestionRole\"\n [attr.aria-required]=\"dropdownModel.ariaQuestionRequired\"\n [attr.aria-invalid]=\"dropdownModel.ariaQuestionInvalid\"\n [attr.aria-errormessage]=\"dropdownModel.ariaQuestionErrorMessage\"\n [attr.aria-expanded]=\"dropdownModel.ariaQuestionExpanded\" [attr.aria-label]=\"dropdownModel.ariaQuestionLabel\"\n [attr.aria-labelledby]=\"dropdownModel.ariaQuestionLabelledby\"\n [attr.aria-describedby]=\"dropdownModel.ariaQuestionDescribedby\"\n [attr.aria-controls]=\"dropdownModel.ariaQuestionControls\"\n [attr.aria-activedescendant]=\"dropdownModel.ariaQuestionActivedescendant\">\n <div *ngIf=\"dropdownModel.showHintPrefix\" [class]=\"model.cssClasses.hintPrefix\">\n <span>{{ dropdownModel.hintStringPrefix }}</span>\n </div>\n <div [class]=\"model.cssClasses.controlValue\">\n <div *ngIf=\"dropdownModel.showHintString\" [class]=\"model.cssClasses.hintSuffix\">\n <span style=\"visibility: hidden\">{{ dropdownModel.inputStringRendered }}</span>\n <span>{{ dropdownModel.hintStringSuffix }}</span>\n </div>\n <ng-container *ngIf=\"dropdownModel.showInputFieldComponent\">\n <ng-template\n [component]=\"{ name: model.inputFieldComponentName, data: { model: dropdownModel.getSelectedAction(), question: model } }\"></ng-template>\n </ng-container>\n <sv-ng-string *ngIf=\"model.showSelectedItemLocText\" [model]=\"model.selectedItemLocText\"></sv-ng-string>\n <input #inputElement *ngIf=\"dropdownModel.needRenderInput\" type=\"text\" autocomplete=\"off\" [(ngModel)]=\"dropdownModel.inputStringRendered\"\n [class]=\"model.cssClasses.filterStringInput\" [attr.id]=\"model.getInputId()\"\n [attr.inputmode]=\"dropdownModel.inputMode\" [attr.tabindex]=\"dropdownModel.noTabIndex ? null : -1\"\n [attr.disabled]=\"model.isDisabledAttr ? true : null\" [attr.role]=\"dropdownModel.ariaInputRole\"\n [attr.aria-required]=\"dropdownModel.ariaInputRequired\"\n [attr.aria-invalid]=\"dropdownModel.ariaInputInvalid\"\n [attr.aria-errormessage]=\"dropdownModel.ariaInputErrorMessage\"\n [attr.aria-expanded]=\"dropdownModel.ariaInputExpanded\"\n [attr.aria-controls]=\"dropdownModel.ariaInputControls\" [attr.aria-label]=\"dropdownModel.ariaInputLabel\"\n [attr.aria-labelledby]=\"dropdownModel.ariaInputLabelledby\"\n [attr.aria-describedby]=\"dropdownModel.ariaInputDescribedby\"\n [attr.aria-activedescendant]=\"dropdownModel.ariaInputActivedescendant\"\n [attr.placeholder]=\"dropdownModel.placeholderRendered\"\n [attr.readonly]=\"dropdownModel.filterReadOnly ? true : null\" (change)=\"inputChange($event)\"\n (blur)=\"blur($event)\" (focus)=\"focus($event)\" />\n </div>\n <sv-ng-action-bar [model]=\"dropdownModel.editorButtons\"></sv-ng-action-bar>\n </div>\n <sv-ng-popup *ngIf=\"!model.isInputReadOnly\" [popupModel]=\"dropdownModel.popupModel\"></sv-ng-popup>\n <div *ngIf=\"model.isReadOnly\" [class]=\"model.getControlClass()\" [attr.id]=\"model.inputId\"\n [attr.tabindex]=\"model.isDisabledAttr ? null : 0\" [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n [attr.role]=\"dropdownModel?.ariaQuestionRole\" [attr.aria-label]=\"dropdownModel?.ariaQuestionLabel\"\n [attr.aria-labelledby]=\"dropdownModel?.ariaQuestionLabelledby\"\n [attr.aria-describedby]=\"dropdownModel?.ariaQuestionDescribedby\" [attr.aria-expanded]=\"false\"\n [attr.aria-readonly]=\"true\" [attr.aria-disabled]=\"true\">\n <div [class]=\"model.cssClasses.controlValue\">\n <sv-ng-string *ngIf=\"model.locReadOnlyText\" [model]=\"model.locReadOnlyText\"></sv-ng-string>\n </div>\n <sv-ng-action-bar [model]=\"dropdownModel.editorButtons\"></sv-ng-action-bar>\n </div>\n</div>", components: [{ type: i1.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: i2.ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: i3.PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, decorators: [{ type: Component, args: [{ selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", templateUrl: "./dropdown.component.html" }] }], propDecorators: { model: [{ type: Input }], inputElementRef: [{ type: ViewChild, args: ["inputElement"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFNakQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFHaEQsSUFBSSxhQUFhOztRQUNmLE9BQU8sTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxpQkFBaUIsQ0FBQztJQUN2QyxDQUFDO0lBQ1MsUUFBUTtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7SUFDdEMsQ0FBQztJQUVRLFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFVOztRQUNkLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUFVOztRQUMzQixNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxLQUFLLENBQUMsS0FBVTs7UUFDZCxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsVUFBVSxDQUFDLEtBQVU7O1FBQ25CLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBVTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxLQUFLLENBQUMsS0FBVTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELHFCQUFxQjs7UUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLGFBQWEsQ0FBQSxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1lBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUMxRSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO2FBQ3REO1NBQ0Y7SUFDSCxDQUFDOzsrR0E1Q1UsaUJBQWlCO21HQUFqQixpQkFBaUIsOE9DUjlCLGc1SUF1RE07NEZEL0NPLGlCQUFpQjtrQkFKN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxXQUFXLEVBQUUsMkJBQTJCO2lCQUN6Qzs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ3FCLGVBQWU7c0JBQXpDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERyb3Bkb3duTGlzdE1vZGVsLCBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlQW5ndWxhciB9IGZyb20gXCIuLi8uLi9iYXNlLWFuZ3VsYXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInN2LW5nLWRyb3Bkb3duLCAnW3N2LW5nLWRyb3Bkb3duXSdcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbFwiXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQmFzZUFuZ3VsYXIgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBAVmlld0NoaWxkKFwiaW5wdXRFbGVtZW50XCIpIGlucHV0RWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBnZXQgZHJvcGRvd25Nb2RlbCgpOiBEcm9wZG93bkxpc3RNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw/LmRyb3Bkb3duTGlzdE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5kcm9wZG93bkxpc3RNb2RlbDtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBjbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5kcm9wZG93bk1vZGVsPy5vbkNsaWNrKGV2ZW50KTtcbiAgfVxuICBjaGV2cm9uUG9pbnRlckRvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZHJvcGRvd25Nb2RlbD8uY2hldnJvblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgfVxuICBjbGVhcihldmVudDogYW55KSB7XG4gICAgdGhpcy5kcm9wZG93bk1vZGVsPy5vbkNsZWFyKGV2ZW50KTtcbiAgfVxuICBrZXloYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRyb3Bkb3duTW9kZWw/LmtleUhhbmRsZXIoZXZlbnQpO1xuICB9XG4gIGJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubW9kZWwub25CbHVyKGV2ZW50KTtcbiAgICB0aGlzLnVwZGF0ZUlucHV0RG9tRWxlbWVudCgpO1xuICB9XG4gIGZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1vZGVsLm9uRm9jdXMoZXZlbnQpO1xuICB9XG4gIGlucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB1cGRhdGVJbnB1dERvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5pbnB1dEVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMubW9kZWwuaW5wdXRTdHJpbmdSZW5kZXJlZDtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLm1vZGVsLmlucHV0U3RyaW5nUmVuZGVyZWQgfHwgXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCI8ZGl2IFtjbGFzc109XCJtb2RlbC5jc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJcIiAoY2xpY2spPVwiY2xpY2soJGV2ZW50KVwiPlxuICAgIDxkaXYgKm5nSWY9XCIhbW9kZWwuaXNSZWFkT25seVwiIFthdHRyLnRhYmluZGV4XT1cImRyb3Bkb3duTW9kZWwubm9UYWJJbmRleCA/IG51bGwgOiAwXCJcbiAgICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldENvbnRyb2xDbGFzcygpXCIgW2F0dHIuZGlzYWJsZWRdPVwibW9kZWwuaXNEaXNhYmxlZEF0dHIgPyB0cnVlIDogbnVsbFwiIChibHVyKT1cImJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cImtleWhhbmRsZXIoJGV2ZW50KVwiIFthdHRyLmlkXT1cIm1vZGVsLmlucHV0SWRcIiBbYXR0ci5yb2xlXT1cImRyb3Bkb3duTW9kZWwuYXJpYVF1ZXN0aW9uUm9sZVwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiZHJvcGRvd25Nb2RlbC5hcmlhUXVlc3Rpb25SZXF1aXJlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJkcm9wZG93bk1vZGVsLmFyaWFRdWVzdGlvbkludmFsaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJkcm9wZG93bk1vZGVsLmFyaWFRdWVzdGlvbkVycm9yTWVzc2FnZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZHJvcGRvd25Nb2RlbC5hcmlhUXVlc3Rpb25FeHBhbmRlZFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZHJvcGRvd25Nb2RlbC5hcmlhUXVlc3Rpb25MYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkcm9wZG93bk1vZGVsLmFyaWFRdWVzdGlvbkxhYmVsbGVkYnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImRyb3Bkb3duTW9kZWwuYXJpYVF1ZXN0aW9uRGVzY3JpYmVkYnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImRyb3Bkb3duTW9kZWwuYXJpYVF1ZXN0aW9uQ29udHJvbHNcIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZHJvcGRvd25Nb2RlbC5hcmlhUXVlc3Rpb25BY3RpdmVkZXNjZW5kYW50XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bk1vZGVsLnNob3dIaW50UHJlZml4XCIgW2NsYXNzXT1cIm1vZGVsLmNzc0NsYXNzZXMuaGludFByZWZpeFwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgZHJvcGRvd25Nb2RlbC5oaW50U3RyaW5nUHJlZml4IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwibW9kZWwuY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bk1vZGVsLnNob3dIaW50U3RyaW5nXCIgW2NsYXNzXT1cIm1vZGVsLmNzc0NsYXNzZXMuaGludFN1ZmZpeFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuXCI+e3sgZHJvcGRvd25Nb2RlbC5pbnB1dFN0cmluZ1JlbmRlcmVkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRyb3Bkb3duTW9kZWwuaGludFN0cmluZ1N1ZmZpeCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyb3Bkb3duTW9kZWwuc2hvd0lucHV0RmllbGRDb21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudF09XCJ7IG5hbWU6IG1vZGVsLmlucHV0RmllbGRDb21wb25lbnROYW1lLCBkYXRhOiB7IG1vZGVsOiBkcm9wZG93bk1vZGVsLmdldFNlbGVjdGVkQWN0aW9uKCksIHF1ZXN0aW9uOiBtb2RlbCB9IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8c3Ytbmctc3RyaW5nICpuZ0lmPVwibW9kZWwuc2hvd1NlbGVjdGVkSXRlbUxvY1RleHRcIiBbbW9kZWxdPVwibW9kZWwuc2VsZWN0ZWRJdGVtTG9jVGV4dFwiPjwvc3Ytbmctc3RyaW5nPlxuICAgICAgICAgICAgPGlucHV0ICNpbnB1dEVsZW1lbnQgKm5nSWY9XCJkcm9wZG93bk1vZGVsLm5lZWRSZW5kZXJJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJkcm9wZG93bk1vZGVsLmlucHV0U3RyaW5nUmVuZGVyZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJtb2RlbC5jc3NDbGFzc2VzLmZpbHRlclN0cmluZ0lucHV0XCIgW2F0dHIuaWRdPVwibW9kZWwuZ2V0SW5wdXRJZCgpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiZHJvcGRvd25Nb2RlbC5pbnB1dE1vZGVcIiBbYXR0ci50YWJpbmRleF09XCJkcm9wZG93bk1vZGVsLm5vVGFiSW5kZXggPyBudWxsIDogLTFcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIm1vZGVsLmlzRGlzYWJsZWRBdHRyID8gdHJ1ZSA6IG51bGxcIiBbYXR0ci5yb2xlXT1cImRyb3Bkb3duTW9kZWwuYXJpYUlucHV0Um9sZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJkcm9wZG93bk1vZGVsLmFyaWFJbnB1dFJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZHJvcGRvd25Nb2RlbC5hcmlhSW5wdXRJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJkcm9wZG93bk1vZGVsLmFyaWFJbnB1dEVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcm9wZG93bk1vZGVsLmFyaWFJbnB1dEV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImRyb3Bkb3duTW9kZWwuYXJpYUlucHV0Q29udHJvbHNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImRyb3Bkb3duTW9kZWwuYXJpYUlucHV0TGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkcm9wZG93bk1vZGVsLmFyaWFJbnB1dExhYmVsbGVkYnlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZHJvcGRvd25Nb2RlbC5hcmlhSW5wdXREZXNjcmliZWRieVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImRyb3Bkb3duTW9kZWwuYXJpYUlucHV0QWN0aXZlZGVzY2VuZGFudFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZHJvcGRvd25Nb2RlbC5wbGFjZWhvbGRlclJlbmRlcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJkcm9wZG93bk1vZGVsLmZpbHRlclJlYWRPbmx5ID8gdHJ1ZSA6IG51bGxcIiAoY2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJmb2N1cygkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzdi1uZy1hY3Rpb24tYmFyIFttb2RlbF09XCJkcm9wZG93bk1vZGVsLmVkaXRvckJ1dHRvbnNcIj48L3N2LW5nLWFjdGlvbi1iYXI+XG4gICAgPC9kaXY+XG4gICAgPHN2LW5nLXBvcHVwICpuZ0lmPVwiIW1vZGVsLmlzSW5wdXRSZWFkT25seVwiIFtwb3B1cE1vZGVsXT1cImRyb3Bkb3duTW9kZWwucG9wdXBNb2RlbFwiPjwvc3YtbmctcG9wdXA+XG4gICAgPGRpdiAqbmdJZj1cIm1vZGVsLmlzUmVhZE9ubHlcIiBbY2xhc3NdPVwibW9kZWwuZ2V0Q29udHJvbENsYXNzKClcIiBbYXR0ci5pZF09XCJtb2RlbC5pbnB1dElkXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwibW9kZWwuaXNEaXNhYmxlZEF0dHIgPyBudWxsIDogMFwiIFthdHRyLmRpc2FibGVkXT1cIm1vZGVsLmlzRGlzYWJsZWRBdHRyID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cImRyb3Bkb3duTW9kZWw/LmFyaWFRdWVzdGlvblJvbGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImRyb3Bkb3duTW9kZWw/LmFyaWFRdWVzdGlvbkxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImRyb3Bkb3duTW9kZWw/LmFyaWFRdWVzdGlvbkxhYmVsbGVkYnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImRyb3Bkb3duTW9kZWw/LmFyaWFRdWVzdGlvbkRlc2NyaWJlZGJ5XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJmYWxzZVwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwidHJ1ZVwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJtb2RlbC5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZVwiPlxuICAgICAgICAgICAgPHN2LW5nLXN0cmluZyAqbmdJZj1cIm1vZGVsLmxvY1JlYWRPbmx5VGV4dFwiIFttb2RlbF09XCJtb2RlbC5sb2NSZWFkT25seVRleHRcIj48L3N2LW5nLXN0cmluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzdi1uZy1hY3Rpb24tYmFyIFttb2RlbF09XCJkcm9wZG93bk1vZGVsLmVkaXRvckJ1dHRvbnNcIj48L3N2LW5nLWFjdGlvbi1iYXI+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=