fx-form-builder-wrapper 2.0.81 → 2.0.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/components/dropdown-with-other/dropdown-with-other.component.mjs +5 -3
- package/esm2022/lib/components/dropdown-with-search/dropdown-with-search.component.mjs +129 -0
- package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +5 -1
- package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +5 -3
- package/esm2022/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.mjs +9 -3
- package/esm2022/lib/components/multiselect-with-form-fields/customize-dropdown.component.mjs +243 -0
- package/esm2022/lib/components/multiselect-with-form-fields/multiselect-dropdown.component.mjs +166 -0
- package/esm2022/lib/components/radio-group/radio-group.component.mjs +8 -3
- package/esm2022/lib/fx-builder-wrapper.component.mjs +9 -1
- package/fesm2022/fx-form-builder-wrapper.mjs +149 -10
- package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -1
- package/lib/components/dropdown-with-other/dropdown-with-other.component.d.ts +1 -0
- package/lib/components/dropdown-with-search/dropdown-with-search.component.d.ts +29 -0
- package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +1 -0
- package/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.d.ts +3 -0
- package/lib/components/multiselect-with-form-fields/customize-dropdown.component.d.ts +59 -0
- package/lib/components/multiselect-with-form-fields/multiselect-dropdown.component.d.ts +51 -0
- package/lib/components/radio-group/radio-group.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -24,6 +24,9 @@ export class MultiselectDropdownWithChildsComponent extends FxBaseComponent {
|
|
|
24
24
|
multiChildDropdownMap = new Map();
|
|
25
25
|
fxComponent;
|
|
26
26
|
options = [];
|
|
27
|
+
isRequired = false;
|
|
28
|
+
isChild1Required = false;
|
|
29
|
+
isChild2Required = false;
|
|
27
30
|
multiChildDropDownForm = this.fb.group({
|
|
28
31
|
multipleChildSelectedOption: [[]],
|
|
29
32
|
child1: [''],
|
|
@@ -62,14 +65,17 @@ export class MultiselectDropdownWithChildsComponent extends FxBaseComponent {
|
|
|
62
65
|
const child1Control = this.multiChildDropDownForm.get('child1');
|
|
63
66
|
const child2Control = this.multiChildDropDownForm.get('child2');
|
|
64
67
|
if (this.setting('isMultiChildRequired') === 'true') {
|
|
68
|
+
this.isRequired = true;
|
|
65
69
|
mainControl?.setValidators([Validators.required]);
|
|
66
70
|
mainControl?.updateValueAndValidity();
|
|
67
71
|
}
|
|
68
72
|
if (this.setting('isChild1Required') === 'true') {
|
|
73
|
+
this.isChild1Required = true;
|
|
69
74
|
child1Control?.setValidators([Validators.required]);
|
|
70
75
|
child1Control?.updateValueAndValidity();
|
|
71
76
|
}
|
|
72
77
|
if (this.setting('isChild2Required') === 'true') {
|
|
78
|
+
this.isChild2Required = true;
|
|
73
79
|
child2Control?.setValidators([Validators.required]);
|
|
74
80
|
child2Control?.updateValueAndValidity();
|
|
75
81
|
}
|
|
@@ -138,13 +144,13 @@ export class MultiselectDropdownWithChildsComponent extends FxBaseComponent {
|
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiselectDropdownWithChildsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FxBuilderWrapperService }, { token: i3.ApiServiceRegistry }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiselectDropdownWithChildsComponent, isStandalone: true, selector: "lib-multiselect-dropdown-with-childs", viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }}\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>", styles: ["@import\"https://unpkg.com/primeng@17.18.10/resources/themes/lara-light-blue/theme.css\";@import\"https://unpkg.com/primeng@17.18.10/resources/primeng.min.css\";@import\"https://unpkg.com/primeicons@6.0.0/primeicons.css\";::ng-deep .p-multiselect.p-component.p-inputwrapper{height:37.6px!important;border:1px solid #cdcdcd!important;width:100%!important}.dd_down_icon span{color:#f3a041}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i7.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }] });
|
|
147
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiselectDropdownWithChildsComponent, isStandalone: true, selector: "lib-multiselect-dropdown-with-childs", viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }} <sup class=\"field-required\" *ngIf=\"isRequired\">*</sup>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }} <sup class=\"field-required\" *ngIf=\"isChild1Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }} <sup class=\"field-required\" *ngIf=\"isChild2Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>", styles: ["@import\"https://unpkg.com/primeng@17.18.10/resources/themes/lara-light-blue/theme.css\";@import\"https://unpkg.com/primeng@17.18.10/resources/primeng.min.css\";@import\"https://unpkg.com/primeicons@6.0.0/primeicons.css\";::ng-deep .p-multiselect.p-component.p-inputwrapper{height:37.6px!important;border:1px solid #cdcdcd!important;width:100%!important}.dd_down_icon span{color:#f3a041}.field-required{color:red;font-size:1.2em;vertical-align:super;margin-left:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i7.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }] });
|
|
142
148
|
}
|
|
143
149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiselectDropdownWithChildsComponent, decorators: [{
|
|
144
150
|
type: Component,
|
|
145
|
-
args: [{ selector: 'lib-multiselect-dropdown-with-childs', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }}\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>", styles: ["@import\"https://unpkg.com/primeng@17.18.10/resources/themes/lara-light-blue/theme.css\";@import\"https://unpkg.com/primeng@17.18.10/resources/primeng.min.css\";@import\"https://unpkg.com/primeicons@6.0.0/primeicons.css\";::ng-deep .p-multiselect.p-component.p-inputwrapper{height:37.6px!important;border:1px solid #cdcdcd!important;width:100%!important}.dd_down_icon span{color:#f3a041}\n"] }]
|
|
151
|
+
args: [{ selector: 'lib-multiselect-dropdown-with-childs', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }} <sup class=\"field-required\" *ngIf=\"isRequired\">*</sup>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }} <sup class=\"field-required\" *ngIf=\"isChild1Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }} <sup class=\"field-required\" *ngIf=\"isChild2Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>", styles: ["@import\"https://unpkg.com/primeng@17.18.10/resources/themes/lara-light-blue/theme.css\";@import\"https://unpkg.com/primeng@17.18.10/resources/primeng.min.css\";@import\"https://unpkg.com/primeicons@6.0.0/primeicons.css\";::ng-deep .p-multiselect.p-component.p-inputwrapper{height:37.6px!important;border:1px solid #cdcdcd!important;width:100%!important}.dd_down_icon span{color:#f3a041}.field-required{color:red;font-size:1.2em;vertical-align:super;margin-left:5px}\n"] }]
|
|
146
152
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FxBuilderWrapperService }, { type: i3.ApiServiceRegistry }], propDecorators: { fxComponent: [{
|
|
147
153
|
type: ViewChild,
|
|
148
154
|
args: ['fxComponent']
|
|
149
155
|
}] } });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzL211bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQUUsZUFBZSxFQUFvQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkssT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTyxzQ0FBdUMsU0FBUSxlQUFlO0lBaUJyRDtJQUFnQztJQUEwQjtJQUEwRDtJQWhCL0gsRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUMxQyxVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDckIsV0FBVyxDQUFlO0lBRXBELE9BQU8sR0FBVSxFQUFFLENBQUM7SUFFYixzQkFBc0IsR0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUN2RCwyQkFBMkIsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDWixXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakIsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ2xCLENBQUMsQ0FBQztJQUVILFlBQW9CLEdBQXNCLEVBQVUsSUFBZ0IsRUFBVSx1QkFBZ0QsRUFBVSxZQUFnQztRQUN0SyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFEUSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBRXRLLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELGVBQWU7UUFFYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM1SCxDQUFDO1FBRUEsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzVELGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUM3QyxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1FBRy9DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFFM0MsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RSxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNuRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3BELFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEQsV0FBVyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNoRCxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDaEQsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVTthQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBR3ZCLDhFQUE4RTtZQUM5RSxnREFBZ0Q7WUFDaEQsK0JBQStCO1lBQy9CLE9BQU87WUFDUCxLQUFLO1lBRUwsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFvQixFQUFFLENBQUM7Z0JBQ3hFLElBQ0UsS0FBSztvQkFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUN6Qiw2QkFBNkIsSUFBSSxLQUFLLEVBQ3RDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUE7UUFFSixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRVMsUUFBUTtRQUNoQixPQUFPO1lBQ0wsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOU0sSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDcEYsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM3RixJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNwRixJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNyRixJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUN2UCxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdKLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3ZHLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBRTVGLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNqRixJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ3ZHLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDekosSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQztZQUU5RyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDakYsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN2RyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3pKLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFLENBQUM7U0FDbEgsQ0FBQztJQUNKLENBQUM7SUFFUyxXQUFXO1FBQ25CLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFrQixFQUFFLEdBQVc7UUFDeEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sUUFBUSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLEdBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxrQkFBa0IsQ0FBUyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDNUgsQ0FBQztJQUNILENBQUM7d0dBeklVLHNDQUFzQzs0RkFBdEMsc0NBQXNDLG1PQ2xCbkQsd2tGQXFFZSw4YkR2REgsWUFBWSxnT0FBRSxtQkFBbUIsNDhCQUFFLFdBQVcsK0JBQUUsV0FBVyw0RUFBRSxjQUFjLHFJQUFFLGlCQUFpQjs7NEZBSTdGLHNDQUFzQztrQkFQbEQsU0FBUzsrQkFDRSxzQ0FBc0MsY0FDcEMsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDO3NMQVMvRSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeENvbXBvbmVudCwgRnhTZXR0aW5nLCBGeFN0cmluZ1NldHRpbmcsIEZ4U2VsZWN0U2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UsIEZ4QmFzZUNvbXBvbmVudCwgRnhPcHRpb25TZXR0aW5nIH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9jb3JlJ1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIEZ4Q29tcG9uZW50LCBDYWxlbmRhck1vZHVsZSwgTXVsdGlTZWxlY3RNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL211bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXNlbGVjdERyb3Bkb3duV2l0aENoaWxkc0NvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdHtcclxuICAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgZm9ybU9iamVjdDogb2JqZWN0ID0ge307XHJcbiAgbXVsdGlDaGlsZERyb3Bkb3duTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBAVmlld0NoaWxkKCdmeENvbXBvbmVudCcpIGZ4Q29tcG9uZW50ITogRnhDb21wb25lbnQ7XHJcbiBcclxuICBvcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgbXVsdGlDaGlsZERyb3BEb3duRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICBtdWx0aXBsZUNoaWxkU2VsZWN0ZWRPcHRpb246IFtbXV0sXHJcbiAgICBjaGlsZDE6IFsnJ10sXHJcbiAgICBjaGlsZDI6IFsnJ10sXHJcbiAgICBjaGlsZDFMYWJlbDogWycnXSxcclxuICAgIGNoaWxkMkxhYmVsOiBbJyddLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UsIHByaXZhdGUgZnhBcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgIHN1cGVyKGNkcilcclxuICAgIHRoaXMub25Jbml0LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3JlZ2lzdGVyKHRoaXMubXVsdGlDaGlsZERyb3BEb3duRm9ybSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNldHRpbmcoJ211bHRpQ2hpbGRPcHRpb25BUElVUkwnKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSAodGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5zZXR0aW5ncz8uZmluZCgoczogYW55KSA9PiBzLmtleSA9PT0gJ2l0ZW1zQ2hpbGRPcHRpb24nKSBhcyBhbnkpPy5vcHRpb25zIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgICBjb25zdCBjaGlsZDFMYWJlbENvbnRyb2wgPSB0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDFMYWJlbCcpO1xyXG4gICAgIGNvbnN0IGNoaWxkMkxhYmVsQ29udHJvbCA9IHRoaXMubXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ2NoaWxkMkxhYmVsJyk7XHJcbiAgICAgIGNoaWxkMUxhYmVsQ29udHJvbD8uc2V0VmFsdWUodGhpcy5zZXR0aW5nKCdjaGlsZC0xLWxhYmVsJykpOyAgXHJcbiAgICAgIGNoaWxkMkxhYmVsQ29udHJvbD8uc2V0VmFsdWUodGhpcy5zZXR0aW5nKCdjaGlsZC0yLWxhYmVsJykpO1xyXG4gICAgICBjaGlsZDFMYWJlbENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgY2hpbGQyTGFiZWxDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7IFxyXG5cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5uYW1lO1xyXG5cclxuICAgICAgaWYgKGtleSAmJiB0aGlzLm11bHRpQ2hpbGREcm9wZG93bk1hcC5oYXMoa2V5KSkge1xyXG4gICAgICAgIHRoaXMubXVsdGlDaGlsZERyb3BEb3duRm9ybS5wYXRjaFZhbHVlKHRoaXMubXVsdGlDaGlsZERyb3Bkb3duTWFwLmdldChrZXkpKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgbWFpbkNvbnRyb2wgPSB0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdtdWx0aXBsZUNoaWxkU2VsZWN0ZWRPcHRpb24nKTtcclxuICAgICAgY29uc3QgY2hpbGQxQ29udHJvbCA9IHRoaXMubXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ2NoaWxkMScpO1xyXG4gICAgICBjb25zdCBjaGlsZDJDb250cm9sID0gdGhpcy5tdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnY2hpbGQyJyk7XHJcbiAgICAgIGlmICh0aGlzLnNldHRpbmcoJ2lzTXVsdGlDaGlsZFJlcXVpcmVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgIG1haW5Db250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgbWFpbkNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZXR0aW5nKCdpc0NoaWxkMVJlcXVpcmVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgIGNoaWxkMUNvbnRyb2w/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgICBjaGlsZDFDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2V0dGluZygnaXNDaGlsZDJSZXF1aXJlZCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgICBjaGlsZDJDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgY2hpbGQyQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcblxyXG5cclxuICAgICAgICAvLyAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcclxuICAgICAgICAvLyAgICBpZiAoa2V5LmluY2x1ZGVzKCdkcm9wZG93bi13aXRoLW90aGVyJykpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtT2JqZWN0ID0gdmFsdWU7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZhbHVlICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgJ211bHRpcGxlQ2hpbGRTZWxlY3RlZE9wdGlvbicgaW4gdmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpQ2hpbGREcm9wZG93bk1hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSlcclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlVXJsID0gdGhpcy5meEFwaVNlcnZpY2UuZ2V0U2VydmljZVVybCh0aGlzLnNldHRpbmcoJ3NlcnZpY2VNdWx0aU5hbWUnKSk7XHJcbiAgICB0aGlzLmdldE9wdGlvbnMoc2VydmljZVVybCwgdGhpcy5zZXR0aW5nKCdtdWx0aUNoaWxkT3B0aW9uQVBJVVJMJykpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIG5ldyBGeE9wdGlvblNldHRpbmcoeyBrZXk6ICdpdGVtc0NoaWxkT3B0aW9uJywgJHRpdGxlOiAnT3B0aW9ucycsIHZhbHVlOiBbeyBvcHRpb246ICdZZXMnLCB2YWx1ZTogJ3llcycgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnbm8nIH1dIH0sIFt7IG9wdGlvbjogJ1llcycsIHZhbHVlOiAneWVzJyB9LCB7IG9wdGlvbjogJ05vJywgdmFsdWU6ICdubycgfV0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbXVsdGlDaGlsZE9wdGlvbkFQSVVSTCcsICR0aXRsZTogJ0FQSSBVcmwnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjdXN0b21DbGFzc011bHRpQ2hpbGQnLCAkdGl0bGU6ICdDdXN0b20gQ2xhc3MgTmFtZScsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3NlbGVjdC1sYWJlbC1tdWx0aS1jaGlsZCcsICR0aXRsZTogJ0xhYmVsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbGFiZWwta2V5LWNoaWxkJywgJHRpdGxlOiAnTGFiZWwgS2V5JywgdmFsdWU6ICdvcHRpb24nIH0pLFxyXG4gICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHsga2V5OiAnc2VydmljZU11bHRpTmFtZScsICR0aXRsZTogJ1NlcnZpY2UnLCB2YWx1ZTogJycgfSwgW3sgb3B0aW9uOiAnVXNlciBTZXJ2aWNlJywgdmFsdWU6ICd1c2VyX3NlcnZpY2UnIH0sIHsgb3B0aW9uOiAnUGF0aWVudCBTZXJ2aWNlJywgdmFsdWU6ICdwYXRpZW50X3NlcnZpY2UnIH0sIHsgb3B0aW9uOiAnV29ya2Zsb3cgU2VydmljZScsIHZhbHVlOiAnd29ya2Zsb3dfc2VydmljZScgfV0pLFxyXG4gICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHsga2V5OiAnaXNNdWx0aUNoaWxkUmVxdWlyZWQnLCAkdGl0bGU6ICdSZXF1aXJlZCcsIHZhbHVlOiAndHJ1ZScgfSwgW3sgb3B0aW9uOiAnWWVzJywgdmFsdWU6ICd0cnVlJyB9LCB7IG9wdGlvbjogJ05vJywgdmFsdWU6ICdmYWxzZScgfV0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbXVsdGlDaGlsZEVycm9yTWVzc2FnZScsICR0aXRsZTogJ0Vycm9yIE1lc3NhZ2UnLCB2YWx1ZTogJ1BsZWFzZSBzZWxlY3QnIH0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAncGxhY2Vob2xkZXJNdWx0aUNoaWxkJywgJHRpdGxlOiAnUGxhY2Vob2xkZXInLCB2YWx1ZTogJ1NlbGVjdCcgfSksXHJcblxyXG4gICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NoaWxkLTEtbGFiZWwnLCAkdGl0bGU6ICdDaGlsZCAxIExhYmVsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NoaWxkLTEtcGxhY2Vob2xkZXInLCAkdGl0bGU6ICdDaGlsZCAxIFBsYWNlaG9sZGVyJywgdmFsdWU6ICdlbnRlciBoZXJlJyB9KSxcclxuICAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoeyBrZXk6ICdpc0NoaWxkMVJlcXVpcmVkJywgJHRpdGxlOiAnUmVxdWlyZWQnLCB2YWx1ZTogJ3RydWUnIH0sIFt7IG9wdGlvbjogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnZmFsc2UnIH1dKSxcclxuICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZDFFcnJvck1lc3NhZ2UnLCAkdGl0bGU6ICdFcnJvciBNZXNzYWdlJywgdmFsdWU6ICdQbGVhc2UgZmlsbCBvdXQgdGhlIGZpZWxkJyB9KSxcclxuXHJcbiAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NoaWxkLTItbGFiZWwnLCAkdGl0bGU6ICdDaGlsZCAyIExhYmVsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZC0yLXBsYWNlaG9sZGVyJywgJHRpdGxlOiAnQ2hpbGQgMiBQbGFjZWhvbGRlcicsIHZhbHVlOiAnZW50ZXIgaGVyZScgfSksXHJcbiAgICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7IGtleTogJ2lzQ2hpbGQyUmVxdWlyZWQnLCAkdGl0bGU6ICdSZXF1aXJlZCcsIHZhbHVlOiAndHJ1ZScgfSwgW3sgb3B0aW9uOiAnWWVzJywgdmFsdWU6ICd0cnVlJyB9LCB7IG9wdGlvbjogJ05vJywgdmFsdWU6ICdmYWxzZScgfV0pLFxyXG4gICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZDJFcnJvck1lc3NhZ2UnLCAkdGl0bGU6ICdFcnJvciBNZXNzYWdlJywgdmFsdWU6ICdQbGVhc2UgZmlsbCBvdXQgdGhlIGZpZWxkJyB9KSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3B0aW9ucyhzZXJ2aWNlVXJsOiBzdHJpbmcsIHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAodXJsKSB7XHJcbiAgICAgIGNvbnN0IGZpbmFsVXJsID0gc2VydmljZVVybCArIHVybDtcclxuICAgICAgdGhpcy5odHRwLmdldDxhbnlbXT4oZmluYWxVcmwpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlPy5kYXRhO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIG9wdGlvbnMnLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSAodGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5zZXR0aW5ncz8uZmluZCgoczogYW55KSA9PiBzLmtleSA9PT0gJ2l0ZW1zQ2hpbGRPcHRpb24nKSBhcyBhbnkpPy5vcHRpb25zIHx8IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGZ4LWNvbXBvbmVudCBbZnhEYXRhXT1cImZ4RGF0YVwiICNmeENvbXBvbmVudD5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiIFtuZ0NsYXNzXT1cInNldHRpbmcoJ2N1c3RvbUNsYXNzTXVsdGlDaGlsZCcpXCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJtdWx0aUNoaWxkRHJvcERvd25Gb3JtXCIgY2xhc3M9XCJmbGV4IGdhcC00IHctZnVsbFwiPlxyXG4gICAgXHJcbiAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgZGFyazp0ZXh0LWdyYXktMzAwXCI+XHJcbiAgICAgICAgICB7eyBzZXR0aW5nKCdzZWxlY3QtbGFiZWwtbXVsdGktY2hpbGQnKSB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwib3B0aW9uc1wiIGZvcm1Db250cm9sTmFtZT1cIm11bHRpcGxlQ2hpbGRTZWxlY3RlZE9wdGlvblwiIFtvcHRpb25MYWJlbF09XCJzZXR0aW5nKCdsYWJlbC1rZXktY2hpbGQnKVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2V0dGluZygncGxhY2Vob2xkZXJNdWx0aUNoaWxkJylcIiBjbGFzcz1cIm11bHRpc2VsZWN0XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBDdXN0b20gRHJvcGRvd24gSWNvbiAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkcm9wZG93bmljb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGRkX2Rvd25faWNvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtZG93biB0ZXh0LXhsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgIDxzbWFsbFxyXG4gICAgICAgICAgKm5nSWY9XCJtdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnbXVsdGlwbGVDaGlsZFNlbGVjdGVkT3B0aW9uJyk/LnRvdWNoZWQgJiYgbXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ211bHRpcGxlQ2hpbGRTZWxlY3RlZE9wdGlvbicpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiXHJcbiAgICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiPlxyXG4gICAgICAgICAge3sgc2V0dGluZygnbXVsdGlDaGlsZEVycm9yTWVzc2FnZScpfX1cclxuICAgICAgICA8L3NtYWxsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE90aGVyIGlucHV0IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbCBkYXJrOnRleHQtZ3JheS0zMDBcIj5cclxuICAgICAgICB7eyBzZXR0aW5nKCdjaGlsZC0xLWxhYmVsJykgfX1cclxuICAgICAgPC9sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoaWxkMVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBzZXR0aW5nKCdjaGlsZC0xLXBsYWNlaG9sZGVyJykgfX1cIlxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIHAtMiByb3VuZGVkIHctZnVsbFwiXHJcbiAgICAgICAgcm93cz1cIjJcIlxyXG4gICAgICA+XHJcblxyXG4gICAgICA8c21hbGxcclxuICAgICAgICAqbmdJZj1cIm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDEnKT8udG91Y2hlZCAmJiBtdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnY2hpbGQxJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzZXR0aW5nKCdjaGlsZDFFcnJvck1lc3NhZ2UnKX19XHJcbiAgICAgIDwvc21hbGw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImlucHV0LWxhYmVsIGRhcms6dGV4dC1ncmF5LTMwMFwiPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2NoaWxkLTItbGFiZWwnKSB9fVxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2hpbGQyXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHNldHRpbmcoJ2NoaWxkLTItcGxhY2Vob2xkZXInKSB9fVwiXHJcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgcC0yIHJvdW5kZWQgdy1mdWxsXCJcclxuICAgICAgICByb3dzPVwiMlwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDxzbWFsbFxyXG4gICAgICAgICpuZ0lmPVwibXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ2NoaWxkMicpPy50b3VjaGVkICYmIG11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDInKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIlxyXG4gICAgICAgIGNsYXNzPVwidGV4dC1yZWQtNTAwXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2NoaWxkMkVycm9yTWVzc2FnZScpfX1cclxuICAgICAgPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG48L2Z4LWNvbXBvbmVudD4iXX0=
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzL211bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQUUsZUFBZSxFQUFvQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkssT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTyxzQ0FBdUMsU0FBUSxlQUFlO0lBb0JyRDtJQUFnQztJQUEwQjtJQUEwRDtJQW5CL0gsRUFBRSxHQUFHLE1B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a0JBUGxELFNBQVM7K0JBQ0Usc0NBQXNDLGNBQ3BDLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQztzTEFTL0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRnhDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFNlbGVjdFNldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlLCBGeEJhc2VDb21wb25lbnQsIEZ4T3B0aW9uU2V0dGluZyB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvY29yZSdcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NhbGVuZGFyJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW11bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBGeENvbXBvbmVudCwgQ2FsZW5kYXJNb2R1bGUsIE11bHRpU2VsZWN0TW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlzZWxlY3REcm9wZG93bldpdGhDaGlsZHNDb21wb25lbnQgZXh0ZW5kcyBGeEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXR7XHJcbiAgIHByaXZhdGUgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpO1xyXG4gIGZvcm1PYmplY3Q6IG9iamVjdCA9IHt9O1xyXG4gIG11bHRpQ2hpbGREcm9wZG93bk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnZnhDb21wb25lbnQnKSBmeENvbXBvbmVudCE6IEZ4Q29tcG9uZW50O1xyXG4gXHJcbiAgb3B0aW9uczogYW55W10gPSBbXTtcclxuICBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDaGlsZDFSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ2hpbGQyUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIG11bHRpQ2hpbGREcm9wRG93bkZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgbXVsdGlwbGVDaGlsZFNlbGVjdGVkT3B0aW9uOiBbW11dLFxyXG4gICAgY2hpbGQxOiBbJyddLFxyXG4gICAgY2hpbGQyOiBbJyddLFxyXG4gICAgY2hpbGQxTGFiZWw6IFsnJ10sXHJcbiAgICBjaGlsZDJMYWJlbDogWycnXSxcclxuICB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZnhCdWlsZGVyV3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLCBwcml2YXRlIGZ4QXBpU2VydmljZTogQXBpU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICBzdXBlcihjZHIpXHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5zZXR0aW5nKCdtdWx0aUNoaWxkT3B0aW9uQVBJVVJMJykpIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gKHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8uc2V0dGluZ3M/LmZpbmQoKHM6IGFueSkgPT4gcy5rZXkgPT09ICdpdGVtc0NoaWxkT3B0aW9uJykgYXMgYW55KT8ub3B0aW9ucyB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICAgY29uc3QgY2hpbGQxTGFiZWxDb250cm9sID0gdGhpcy5tdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnY2hpbGQxTGFiZWwnKTtcclxuICAgICBjb25zdCBjaGlsZDJMYWJlbENvbnRyb2wgPSB0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDJMYWJlbCcpO1xyXG4gICAgICBjaGlsZDFMYWJlbENvbnRyb2w/LnNldFZhbHVlKHRoaXMuc2V0dGluZygnY2hpbGQtMS1sYWJlbCcpKTsgIFxyXG4gICAgICBjaGlsZDJMYWJlbENvbnRyb2w/LnNldFZhbHVlKHRoaXMuc2V0dGluZygnY2hpbGQtMi1sYWJlbCcpKTtcclxuICAgICAgY2hpbGQxTGFiZWxDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIGNoaWxkMkxhYmVsQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOyBcclxuXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8ubmFtZTtcclxuXHJcbiAgICAgIGlmIChrZXkgJiYgdGhpcy5tdWx0aUNoaWxkRHJvcGRvd25NYXAuaGFzKGtleSkpIHtcclxuICAgICAgICB0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm11bHRpQ2hpbGREcm9wZG93bk1hcC5nZXQoa2V5KSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1haW5Db250cm9sID0gdGhpcy5tdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnbXVsdGlwbGVDaGlsZFNlbGVjdGVkT3B0aW9uJyk7XHJcbiAgICAgIGNvbnN0IGNoaWxkMUNvbnRyb2wgPSB0aGlzLm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDEnKTtcclxuICAgICAgY29uc3QgY2hpbGQyQ29udHJvbCA9IHRoaXMubXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ2NoaWxkMicpO1xyXG4gICAgICBpZiAodGhpcy5zZXR0aW5nKCdpc011bHRpQ2hpbGRSZXF1aXJlZCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgICB0aGlzLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgIG1haW5Db250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgbWFpbkNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZXR0aW5nKCdpc0NoaWxkMVJlcXVpcmVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHRoaXMuaXNDaGlsZDFSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgY2hpbGQxQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAgIGNoaWxkMUNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZXR0aW5nKCdpc0NoaWxkMlJlcXVpcmVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHRoaXMuaXNDaGlsZDJSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgY2hpbGQyQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAgIGNoaWxkMkNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgLy8gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgICAgICAgLy8gICAgaWYgKGtleS5pbmNsdWRlcygnZHJvcGRvd24td2l0aC1vdGhlcicpKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZm9ybU9iamVjdCA9IHZhbHVlO1xyXG4gICAgICAgIC8vICAgIH1cclxuICAgICAgICAvLyAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpIGFzIFtzdHJpbmcsIGFueV1bXSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAgICdtdWx0aXBsZUNoaWxkU2VsZWN0ZWRPcHRpb24nIGluIHZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aUNoaWxkRHJvcGRvd25NYXAuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcblxyXG4gICAgY29uc3Qgc2VydmljZVVybCA9IHRoaXMuZnhBcGlTZXJ2aWNlLmdldFNlcnZpY2VVcmwodGhpcy5zZXR0aW5nKCdzZXJ2aWNlTXVsdGlOYW1lJykpO1xyXG4gICAgdGhpcy5nZXRPcHRpb25zKHNlcnZpY2VVcmwsIHRoaXMuc2V0dGluZygnbXVsdGlDaGlsZE9wdGlvbkFQSVVSTCcpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXR0aW5ncygpOiBGeFNldHRpbmdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBuZXcgRnhPcHRpb25TZXR0aW5nKHsga2V5OiAnaXRlbXNDaGlsZE9wdGlvbicsICR0aXRsZTogJ09wdGlvbnMnLCB2YWx1ZTogW3sgb3B0aW9uOiAnWWVzJywgdmFsdWU6ICd5ZXMnIH0sIHsgb3B0aW9uOiAnTm8nLCB2YWx1ZTogJ25vJyB9XSB9LCBbeyBvcHRpb246ICdZZXMnLCB2YWx1ZTogJ3llcycgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnbm8nIH1dKSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ211bHRpQ2hpbGRPcHRpb25BUElVUkwnLCAkdGl0bGU6ICdBUEkgVXJsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY3VzdG9tQ2xhc3NNdWx0aUNoaWxkJywgJHRpdGxlOiAnQ3VzdG9tIENsYXNzIE5hbWUnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdzZWxlY3QtbGFiZWwtbXVsdGktY2hpbGQnLCAkdGl0bGU6ICdMYWJlbCcsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2xhYmVsLWtleS1jaGlsZCcsICR0aXRsZTogJ0xhYmVsIEtleScsIHZhbHVlOiAnb3B0aW9uJyB9KSxcclxuICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7IGtleTogJ3NlcnZpY2VNdWx0aU5hbWUnLCAkdGl0bGU6ICdTZXJ2aWNlJywgdmFsdWU6ICcnIH0sIFt7IG9wdGlvbjogJ1VzZXIgU2VydmljZScsIHZhbHVlOiAndXNlcl9zZXJ2aWNlJyB9LCB7IG9wdGlvbjogJ1BhdGllbnQgU2VydmljZScsIHZhbHVlOiAncGF0aWVudF9zZXJ2aWNlJyB9LCB7IG9wdGlvbjogJ1dvcmtmbG93IFNlcnZpY2UnLCB2YWx1ZTogJ3dvcmtmbG93X3NlcnZpY2UnIH1dKSxcclxuICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7IGtleTogJ2lzTXVsdGlDaGlsZFJlcXVpcmVkJywgJHRpdGxlOiAnUmVxdWlyZWQnLCB2YWx1ZTogJ3RydWUnIH0sIFt7IG9wdGlvbjogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnZmFsc2UnIH1dKSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ211bHRpQ2hpbGRFcnJvck1lc3NhZ2UnLCAkdGl0bGU6ICdFcnJvciBNZXNzYWdlJywgdmFsdWU6ICdQbGVhc2Ugc2VsZWN0JyB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3BsYWNlaG9sZGVyTXVsdGlDaGlsZCcsICR0aXRsZTogJ1BsYWNlaG9sZGVyJywgdmFsdWU6ICdTZWxlY3QnIH0pLFxyXG5cclxuICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZC0xLWxhYmVsJywgJHRpdGxlOiAnQ2hpbGQgMSBMYWJlbCcsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZC0xLXBsYWNlaG9sZGVyJywgJHRpdGxlOiAnQ2hpbGQgMSBQbGFjZWhvbGRlcicsIHZhbHVlOiAnZW50ZXIgaGVyZScgfSksXHJcbiAgICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHsga2V5OiAnaXNDaGlsZDFSZXF1aXJlZCcsICR0aXRsZTogJ1JlcXVpcmVkJywgdmFsdWU6ICd0cnVlJyB9LCBbeyBvcHRpb246ICdZZXMnLCB2YWx1ZTogJ3RydWUnIH0sIHsgb3B0aW9uOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJyB9XSksXHJcbiAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2hpbGQxRXJyb3JNZXNzYWdlJywgJHRpdGxlOiAnRXJyb3IgTWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIGZpbGwgb3V0IHRoZSBmaWVsZCcgfSksXHJcblxyXG4gICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGlsZC0yLWxhYmVsJywgJHRpdGxlOiAnQ2hpbGQgMiBMYWJlbCcsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2hpbGQtMi1wbGFjZWhvbGRlcicsICR0aXRsZTogJ0NoaWxkIDIgUGxhY2Vob2xkZXInLCB2YWx1ZTogJ2VudGVyIGhlcmUnIH0pLFxyXG4gICAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoeyBrZXk6ICdpc0NoaWxkMlJlcXVpcmVkJywgJHRpdGxlOiAnUmVxdWlyZWQnLCB2YWx1ZTogJ3RydWUnIH0sIFt7IG9wdGlvbjogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnZmFsc2UnIH1dKSxcclxuICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2hpbGQyRXJyb3JNZXNzYWdlJywgJHRpdGxlOiAnRXJyb3IgTWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIGZpbGwgb3V0IHRoZSBmaWVsZCcgfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGdldE9wdGlvbnMoc2VydmljZVVybDogc3RyaW5nLCB1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCBmaW5hbFVybCA9IHNlcnZpY2VVcmwgKyB1cmw7XHJcbiAgICAgIHRoaXMuaHR0cC5nZXQ8YW55W10+KGZpbmFsVXJsKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXNwb25zZT8uZGF0YTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBvcHRpb25zJywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gKHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8uc2V0dGluZ3M/LmZpbmQoKHM6IGFueSkgPT4gcy5rZXkgPT09ICdpdGVtc0NoaWxkT3B0aW9uJykgYXMgYW55KT8ub3B0aW9ucyB8fCBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbjxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbbmdDbGFzc109XCJzZXR0aW5nKCdjdXN0b21DbGFzc011bHRpQ2hpbGQnKVwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwibXVsdGlDaGlsZERyb3BEb3duRm9ybVwiIGNsYXNzPVwiZmxleCBnYXAtNCB3LWZ1bGxcIj5cclxuICAgIFxyXG4gICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgPGRpdiBjbGFzcz1cImZsZXgtMSByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImlucHV0LWxhYmVsIGRhcms6dGV4dC1ncmF5LTMwMFwiPlxyXG4gICAgICAgICAge3sgc2V0dGluZygnc2VsZWN0LWxhYmVsLW11bHRpLWNoaWxkJykgfX0gPHN1cCBjbGFzcz1cImZpZWxkLXJlcXVpcmVkXCIgKm5nSWY9XCJpc1JlcXVpcmVkXCI+Kjwvc3VwPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwib3B0aW9uc1wiIGZvcm1Db250cm9sTmFtZT1cIm11bHRpcGxlQ2hpbGRTZWxlY3RlZE9wdGlvblwiIFtvcHRpb25MYWJlbF09XCJzZXR0aW5nKCdsYWJlbC1rZXktY2hpbGQnKVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2V0dGluZygncGxhY2Vob2xkZXJNdWx0aUNoaWxkJylcIiBjbGFzcz1cIm11bHRpc2VsZWN0XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBDdXN0b20gRHJvcGRvd24gSWNvbiAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkcm9wZG93bmljb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGRkX2Rvd25faWNvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtZG93biB0ZXh0LXhsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgIDxzbWFsbFxyXG4gICAgICAgICAgKm5nSWY9XCJtdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnbXVsdGlwbGVDaGlsZFNlbGVjdGVkT3B0aW9uJyk/LnRvdWNoZWQgJiYgbXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ211bHRpcGxlQ2hpbGRTZWxlY3RlZE9wdGlvbicpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiXHJcbiAgICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiPlxyXG4gICAgICAgICAge3sgc2V0dGluZygnbXVsdGlDaGlsZEVycm9yTWVzc2FnZScpfX1cclxuICAgICAgICA8L3NtYWxsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE90aGVyIGlucHV0IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMSByZWxhdGl2ZVwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbCBkYXJrOnRleHQtZ3JheS0zMDBcIj5cclxuICAgICAgICB7eyBzZXR0aW5nKCdjaGlsZC0xLWxhYmVsJykgfX0gPHN1cCBjbGFzcz1cImZpZWxkLXJlcXVpcmVkXCIgKm5nSWY9XCJpc0NoaWxkMVJlcXVpcmVkXCI+Kjwvc3VwPlxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2hpbGQxXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHNldHRpbmcoJ2NoaWxkLTEtcGxhY2Vob2xkZXInKSB9fVwiXHJcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgcC0yIHJvdW5kZWQgdy1mdWxsXCJcclxuICAgICAgICByb3dzPVwiMlwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDxzbWFsbFxyXG4gICAgICAgICpuZ0lmPVwibXVsdGlDaGlsZERyb3BEb3duRm9ybS5nZXQoJ2NoaWxkMScpPy50b3VjaGVkICYmIG11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDEnKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIlxyXG4gICAgICAgIGNsYXNzPVwidGV4dC1yZWQtNTAwXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2NoaWxkMUVycm9yTWVzc2FnZScpfX1cclxuICAgICAgPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgZGFyazp0ZXh0LWdyYXktMzAwXCI+XHJcbiAgICAgICAge3sgc2V0dGluZygnY2hpbGQtMi1sYWJlbCcpIH19IDxzdXAgY2xhc3M9XCJmaWVsZC1yZXF1aXJlZFwiICpuZ0lmPVwiaXNDaGlsZDJSZXF1aXJlZFwiPio8L3N1cD5cclxuICAgICAgPC9sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoaWxkMlwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBzZXR0aW5nKCdjaGlsZC0yLXBsYWNlaG9sZGVyJykgfX1cIlxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIHAtMiByb3VuZGVkIHctZnVsbFwiXHJcbiAgICAgICAgcm93cz1cIjJcIlxyXG4gICAgICA+XHJcblxyXG4gICAgICA8c21hbGxcclxuICAgICAgICAqbmdJZj1cIm11bHRpQ2hpbGREcm9wRG93bkZvcm0uZ2V0KCdjaGlsZDInKT8udG91Y2hlZCAmJiBtdWx0aUNoaWxkRHJvcERvd25Gb3JtLmdldCgnY2hpbGQyJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzZXR0aW5nKCdjaGlsZDJFcnJvck1lc3NhZ2UnKX19XHJcbiAgICAgIDwvc21hbGw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuPC9meC1jb21wb25lbnQ+Il19
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
5
|
+
import { FxBaseComponent, FxComponent, FxSelectSetting, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common/http";
|
|
8
|
+
import * as i2 from "../../fx-builder-wrapper.service";
|
|
9
|
+
import * as i3 from "@instantsys-labs/core";
|
|
10
|
+
import * as i4 from "@angular/forms";
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
export class CustomizeDropdownComponent extends FxBaseComponent {
|
|
13
|
+
cdr;
|
|
14
|
+
http;
|
|
15
|
+
fxBuilderWrapperService;
|
|
16
|
+
fxApiService;
|
|
17
|
+
fb;
|
|
18
|
+
eRef;
|
|
19
|
+
destroy$ = new Subject();
|
|
20
|
+
form;
|
|
21
|
+
formObject = {};
|
|
22
|
+
dropdownOpen = false;
|
|
23
|
+
formSubmitted = false;
|
|
24
|
+
findingsOptions = [
|
|
25
|
+
{
|
|
26
|
+
label: 'Proclination',
|
|
27
|
+
value: 'proclination',
|
|
28
|
+
info: 'Forward inclination of teeth',
|
|
29
|
+
selected: false,
|
|
30
|
+
subOptions: [
|
|
31
|
+
{ label: 'Mild', value: 'mild' },
|
|
32
|
+
{ label: 'Moderate', value: 'moderate' },
|
|
33
|
+
{ label: 'Severe', value: 'severe' }
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: 'Crowding',
|
|
38
|
+
value: 'crowding',
|
|
39
|
+
selected: false,
|
|
40
|
+
subOptions: [
|
|
41
|
+
{ label: 'Mild', value: 'mild' },
|
|
42
|
+
{ label: 'Moderate', value: 'moderate' },
|
|
43
|
+
{ label: 'Severe', value: 'severe' }
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: 'Spacing',
|
|
48
|
+
value: 'spacing',
|
|
49
|
+
selected: false,
|
|
50
|
+
subOptions: [
|
|
51
|
+
{ label: 'Mild', value: 'mild' },
|
|
52
|
+
{ label: 'Moderate', value: 'moderate' },
|
|
53
|
+
{ label: 'Severe', value: 'severe' }
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: 'Retroclination',
|
|
58
|
+
value: 'retroclination',
|
|
59
|
+
info: 'Backward inclination of teeth',
|
|
60
|
+
selected: false
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
label: 'Rotation',
|
|
64
|
+
value: 'rotation',
|
|
65
|
+
selected: false
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
config = {
|
|
69
|
+
displayMode: 'ellipsis',
|
|
70
|
+
placeholderLabel: 'Select Finding'
|
|
71
|
+
};
|
|
72
|
+
constructor(cdr, http, fxBuilderWrapperService, fxApiService, fb, eRef) {
|
|
73
|
+
super(cdr);
|
|
74
|
+
this.cdr = cdr;
|
|
75
|
+
this.http = http;
|
|
76
|
+
this.fxBuilderWrapperService = fxBuilderWrapperService;
|
|
77
|
+
this.fxApiService = fxApiService;
|
|
78
|
+
this.fb = fb;
|
|
79
|
+
this.eRef = eRef;
|
|
80
|
+
this.form = this.fb.group({
|
|
81
|
+
findings: this.fb.array([]) // Initially an empty array
|
|
82
|
+
});
|
|
83
|
+
// Initialize the form array
|
|
84
|
+
this.updateFindingsArray();
|
|
85
|
+
this.onInit.subscribe(() => this._register(this.form));
|
|
86
|
+
}
|
|
87
|
+
ngAfterViewInit() {
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
const data = [
|
|
90
|
+
{
|
|
91
|
+
"value": "proclination",
|
|
92
|
+
"subSelection": { "label": "Mild", "value": "mild" }
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
this.patchExistingValues(data);
|
|
96
|
+
}, 2000);
|
|
97
|
+
}
|
|
98
|
+
updateFindingsArray() {
|
|
99
|
+
const findingsFormArray = this.form.get('findings');
|
|
100
|
+
findingsFormArray.clear();
|
|
101
|
+
this.findingsOptions.forEach((option) => {
|
|
102
|
+
if (option.selected) {
|
|
103
|
+
findingsFormArray.push(this.fb.group({
|
|
104
|
+
value: [option.value],
|
|
105
|
+
subSelection: [option.subSelection]
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
ngOnInit() {
|
|
111
|
+
this.fxBuilderWrapperService.variables$
|
|
112
|
+
.pipe(takeUntil(this.destroy$))
|
|
113
|
+
.subscribe((variables) => {
|
|
114
|
+
console.log("Variables", variables);
|
|
115
|
+
});
|
|
116
|
+
const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));
|
|
117
|
+
this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));
|
|
118
|
+
}
|
|
119
|
+
getOptions(serviceUrl, url) {
|
|
120
|
+
const finalUrl = serviceUrl + url;
|
|
121
|
+
this.http.get(finalUrl).subscribe({
|
|
122
|
+
next: (response) => {
|
|
123
|
+
// Handle API response
|
|
124
|
+
},
|
|
125
|
+
error: (err) => console.error('Error fetching options', err)
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
settings() {
|
|
129
|
+
return [
|
|
130
|
+
new FxSelectSetting({ key: 'displayMode', $title: 'Display Mode', value: 'ellipsis' }, [{ option: 'Ellipsis', value: 'ellipsis' }, { option: 'Compact', value: 'compact' }]),
|
|
131
|
+
new FxStringSetting({ key: 'placeholderLabel', $title: 'Placeholder', value: 'Select Options' }),
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
validations() {
|
|
135
|
+
return [FxValidatorService.required];
|
|
136
|
+
}
|
|
137
|
+
/** Dropdown Behavior **/
|
|
138
|
+
toggleDropdown() {
|
|
139
|
+
this.dropdownOpen = !this.dropdownOpen;
|
|
140
|
+
}
|
|
141
|
+
toggleOption(option, event) {
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
option.selected = !option.selected;
|
|
144
|
+
const index = this.findingsOptions.findIndex(o => o.value === option.value);
|
|
145
|
+
const control = this.form.get('findings').at(index);
|
|
146
|
+
if (option.selected && option.subOptions?.length) {
|
|
147
|
+
control.get('subSelection')?.setValidators(Validators.required);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
control.get('subSelection')?.clearValidators();
|
|
151
|
+
control.get('subSelection')?.setValue(null);
|
|
152
|
+
}
|
|
153
|
+
control.get('subSelection')?.updateValueAndValidity();
|
|
154
|
+
this.cdr.detectChanges();
|
|
155
|
+
}
|
|
156
|
+
/** Form & Label Helpers **/
|
|
157
|
+
get hasSelectedFindings() {
|
|
158
|
+
return this.findingsOptions.some(f => f.selected);
|
|
159
|
+
}
|
|
160
|
+
get selectedFindingsLabel() {
|
|
161
|
+
const selected = this.findingsOptions
|
|
162
|
+
.filter(f => {
|
|
163
|
+
if (f.selected) {
|
|
164
|
+
// If finding has sub-options → only show if a sub-option is selected
|
|
165
|
+
if (f.subOptions?.length) {
|
|
166
|
+
return !!f.subSelection;
|
|
167
|
+
}
|
|
168
|
+
// If no sub-options → always show
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
})
|
|
173
|
+
.map(f => f.label);
|
|
174
|
+
if (selected.length === 0)
|
|
175
|
+
return this.setting('placeholderLabel');
|
|
176
|
+
// Display mode logic (Compact or Ellipsis)
|
|
177
|
+
const maxCount = this.setting('displayMode') === 'compact' ? 2 : 3;
|
|
178
|
+
if (this.setting('displayMode') === 'compact') {
|
|
179
|
+
return selected.length <= maxCount
|
|
180
|
+
? selected.join(', ')
|
|
181
|
+
: `${selected.slice(0, maxCount).join(', ')} +${selected.length - maxCount} more`;
|
|
182
|
+
}
|
|
183
|
+
if (this.setting('displayMode') === 'ellipsis') {
|
|
184
|
+
return selected.length > maxCount
|
|
185
|
+
? `${selected.slice(0, maxCount).join(', ')}, ...`
|
|
186
|
+
: selected.join(', ');
|
|
187
|
+
}
|
|
188
|
+
return selected.join(', ');
|
|
189
|
+
}
|
|
190
|
+
/** Update Findings + Validation **/
|
|
191
|
+
updateFindings() {
|
|
192
|
+
const selected = this.findingsOptions
|
|
193
|
+
.filter(f => {
|
|
194
|
+
if (f.selected) {
|
|
195
|
+
// Only include in final form if:
|
|
196
|
+
// - no subOptions, or
|
|
197
|
+
// - subOptions with valid subSelection
|
|
198
|
+
if (f.subOptions?.length) {
|
|
199
|
+
return !!f.subSelection;
|
|
200
|
+
}
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
})
|
|
205
|
+
.map(f => {
|
|
206
|
+
const sub = f.subOptions?.find(s => s.value === f.subSelection) || null;
|
|
207
|
+
return {
|
|
208
|
+
label: f.label,
|
|
209
|
+
value: f.value,
|
|
210
|
+
subSelection: sub ? { label: sub.label, value: sub.value } : null
|
|
211
|
+
};
|
|
212
|
+
});
|
|
213
|
+
// Update reactive form value
|
|
214
|
+
this.form.patchValue({ findings: selected }, { emitEvent: false });
|
|
215
|
+
// Validation logic remains same
|
|
216
|
+
const invalidItems = this.findingsOptions.filter(f => f.selected && f.subOptions && !f.subSelection);
|
|
217
|
+
this.form.get('findings')?.setErrors(invalidItems.length > 0 ? { missingSubSelection: true } : null);
|
|
218
|
+
}
|
|
219
|
+
patchExistingValues(data) {
|
|
220
|
+
const formArray = this.form.get('findings');
|
|
221
|
+
formArray.clear();
|
|
222
|
+
this.findingsOptions.forEach(opt => {
|
|
223
|
+
const match = data.find(x => x.value === opt.value);
|
|
224
|
+
opt.selected = !!match;
|
|
225
|
+
opt.subSelection = match?.subSelection?.value || null;
|
|
226
|
+
if (opt.selected) {
|
|
227
|
+
formArray.push(this.fb.group({
|
|
228
|
+
value: [opt.value],
|
|
229
|
+
subSelection: [opt.subSelection]
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
this.cdr.detectChanges();
|
|
234
|
+
this.updateFindings();
|
|
235
|
+
}
|
|
236
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomizeDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FxBuilderWrapperService }, { token: i3.ApiServiceRegistry }, { token: i4.FormBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
237
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomizeDropdownComponent, isStandalone: true, selector: "lib-customize-dropdown", usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" class=\"relative\">\r\n <!-- Header -->\r\n <div #dropdownWrapper class=\"relative w-80\">\r\n <button type=\"button\"\r\n class=\"w-full border border-gray-300 rounded-md px-3 py-2 flex justify-between items-center bg-white text-gray-700 hover:border-blue-400\"\r\n (click)=\"toggleDropdown()\">\r\n <span *ngIf=\"hasSelectedFindings; else placeholder\">\r\n {{ selectedFindingsLabel }}\r\n </span>\r\n <ng-template #placeholder>\r\n {{ setting('placeholderLabel') }}\r\n </ng-template>\r\n <svg class=\"w-5 h-5 ml-2 text-gray-500 transform transition-transform duration-200\"\r\n [class.rotate-180]=\"dropdownOpen\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Panel -->\r\n <div *ngIf=\"dropdownOpen\"\r\n class=\"absolute mt-1 w-full bg-white border border-gray-300 rounded-md shadow-lg max-h-64 overflow-y-auto z-10\">\r\n <div *ngFor=\"let option of findingsOptions; let i = index\"\r\n class=\"border-b border-gray-100 last:border-none p-2 hover:bg-gray-50 cursor-pointer\"\r\n (click)=\"$event.stopPropagation()\">\r\n <!-- Checkbox + Label -->\r\n <div class=\"flex items-center gap-2\">\r\n <input type=\"checkbox\" class=\"w-4 h-4 text-blue-500 border-gray-300 rounded cursor-pointer\"\r\n [(ngModel)]=\"option.selected\" [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"toggleOption(option, $event)\" />\r\n <label class=\"text-gray-800 font-medium cursor-pointer select-none\"\r\n (click)=\"toggleOption(option, $event)\">\r\n {{ option.label }}\r\n </label>\r\n\r\n <span *ngIf=\"option.info\" class=\"ml-auto text-blue-500 text-sm cursor-pointer\" title=\"{{ option.info }}\">\r\n \u24D8\r\n </span>\r\n </div>\r\n\r\n <!-- Radios (sub-options) -->\r\n <div class=\"flex items-center flex-wrap gap-4 ml-6 mt-2 text-sm\"\r\n *ngIf=\"option.selected && option.subOptions\">\r\n <ng-container *ngFor=\"let s of option.subOptions\">\r\n <label class=\"flex items-center space-x-1 cursor-pointer\"\r\n (click)=\"option.subSelection = s.value; option.touched = true; updateFindings()\">\r\n <input type=\"radio\" [name]=\"option.value\" [value]=\"s.value\" [(ngModel)]=\"option.subSelection\"\r\n [ngModelOptions]=\"{ standalone: true }\" class=\"text-blue-600 cursor-pointer\" />\r\n <span>{{ s.label }}</span>\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Validation Message (if sub-selection is missing) -->\r\n <div *ngIf=\"option.selected && option.subOptions && !option.subSelection\"\r\n class=\"text-red-500 text-xs mt-1 w-full ml-1\">\r\n Please select one option\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>\r\n", styles: [".container{width:300px}.dropdown{position:relative;-webkit-user-select:none;user-select:none}.dropdown-header{border:1px solid #ccc;border-radius:4px;padding:6px 8px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dropdown-panel{position:absolute;width:100%;background:#fff;border:1px solid #ddd;margin-top:4px;border-radius:4px;max-height:250px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:4px 8px;border-bottom:1px solid #f1f1f1}.dropdown-item:last-child{border-bottom:none}.item-header{display:flex;align-items:center;gap:6px}.label{cursor:pointer;flex-grow:1}.info{margin-left:auto;cursor:help;font-size:12px;color:#666}.sub-options{display:flex;align-items:center;flex-wrap:wrap;padding-left:22px;font-size:13px;margin-top:4px}.error{color:#e63946;font-size:11px;margin-left:22px;margin-top:2px}.arrow{font-size:10px;color:#555}.submit-btn{margin-top:1rem;padding:6px 12px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }] });
|
|
238
|
+
}
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomizeDropdownComponent, decorators: [{
|
|
240
|
+
type: Component,
|
|
241
|
+
args: [{ selector: 'lib-customize-dropdown', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule, FxComponent], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" class=\"relative\">\r\n <!-- Header -->\r\n <div #dropdownWrapper class=\"relative w-80\">\r\n <button type=\"button\"\r\n class=\"w-full border border-gray-300 rounded-md px-3 py-2 flex justify-between items-center bg-white text-gray-700 hover:border-blue-400\"\r\n (click)=\"toggleDropdown()\">\r\n <span *ngIf=\"hasSelectedFindings; else placeholder\">\r\n {{ selectedFindingsLabel }}\r\n </span>\r\n <ng-template #placeholder>\r\n {{ setting('placeholderLabel') }}\r\n </ng-template>\r\n <svg class=\"w-5 h-5 ml-2 text-gray-500 transform transition-transform duration-200\"\r\n [class.rotate-180]=\"dropdownOpen\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Panel -->\r\n <div *ngIf=\"dropdownOpen\"\r\n class=\"absolute mt-1 w-full bg-white border border-gray-300 rounded-md shadow-lg max-h-64 overflow-y-auto z-10\">\r\n <div *ngFor=\"let option of findingsOptions; let i = index\"\r\n class=\"border-b border-gray-100 last:border-none p-2 hover:bg-gray-50 cursor-pointer\"\r\n (click)=\"$event.stopPropagation()\">\r\n <!-- Checkbox + Label -->\r\n <div class=\"flex items-center gap-2\">\r\n <input type=\"checkbox\" class=\"w-4 h-4 text-blue-500 border-gray-300 rounded cursor-pointer\"\r\n [(ngModel)]=\"option.selected\" [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"toggleOption(option, $event)\" />\r\n <label class=\"text-gray-800 font-medium cursor-pointer select-none\"\r\n (click)=\"toggleOption(option, $event)\">\r\n {{ option.label }}\r\n </label>\r\n\r\n <span *ngIf=\"option.info\" class=\"ml-auto text-blue-500 text-sm cursor-pointer\" title=\"{{ option.info }}\">\r\n \u24D8\r\n </span>\r\n </div>\r\n\r\n <!-- Radios (sub-options) -->\r\n <div class=\"flex items-center flex-wrap gap-4 ml-6 mt-2 text-sm\"\r\n *ngIf=\"option.selected && option.subOptions\">\r\n <ng-container *ngFor=\"let s of option.subOptions\">\r\n <label class=\"flex items-center space-x-1 cursor-pointer\"\r\n (click)=\"option.subSelection = s.value; option.touched = true; updateFindings()\">\r\n <input type=\"radio\" [name]=\"option.value\" [value]=\"s.value\" [(ngModel)]=\"option.subSelection\"\r\n [ngModelOptions]=\"{ standalone: true }\" class=\"text-blue-600 cursor-pointer\" />\r\n <span>{{ s.label }}</span>\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Validation Message (if sub-selection is missing) -->\r\n <div *ngIf=\"option.selected && option.subOptions && !option.subSelection\"\r\n class=\"text-red-500 text-xs mt-1 w-full ml-1\">\r\n Please select one option\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>\r\n", styles: [".container{width:300px}.dropdown{position:relative;-webkit-user-select:none;user-select:none}.dropdown-header{border:1px solid #ccc;border-radius:4px;padding:6px 8px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dropdown-panel{position:absolute;width:100%;background:#fff;border:1px solid #ddd;margin-top:4px;border-radius:4px;max-height:250px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:4px 8px;border-bottom:1px solid #f1f1f1}.dropdown-item:last-child{border-bottom:none}.item-header{display:flex;align-items:center;gap:6px}.label{cursor:pointer;flex-grow:1}.info{margin-left:auto;cursor:help;font-size:12px;color:#666}.sub-options{display:flex;align-items:center;flex-wrap:wrap;padding-left:22px;font-size:13px;margin-top:4px}.error{color:#e63946;font-size:11px;margin-left:22px;margin-top:2px}.arrow{font-size:10px;color:#555}.submit-btn{margin-top:1rem;padding:6px 12px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}\n"] }]
|
|
242
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FxBuilderWrapperService }, { type: i3.ApiServiceRegistry }, { type: i4.FormBuilder }, { type: i0.ElementRef }] });
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXplLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGlzZWxlY3Qtd2l0aC1mb3JtLWZpZWxkcy9jdXN0b21pemUtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC13aXRoLWZvcm0tZmllbGRzL2N1c3RvbWl6ZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFvQyxTQUFTLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBcUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGVBQWUsRUFFZixlQUFlLEVBRWYsa0JBQWtCLEVBQ25CLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUErQjdCLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxlQUFlO0lBMERuRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5REYsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDMUMsSUFBSSxDQUFhO0lBQ2pCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLGVBQWUsR0FBMkI7UUFDeEM7WUFDRSxLQUFLLEVBQUUsY0FBYztZQUNy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QztRQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQzt3R0ExUFUsMEJBQTBCOzRGQUExQiwwQkFBMEIseUdDN0N2Qyx1NkdBaUVBLDhrQ0R4QlksWUFBWSwrUEFBQyxXQUFXLHV2Q0FBQyxtQkFBbUIsZ0xBQUMsV0FBVzs7NEZBSXZELDBCQUEwQjtrQkFQdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFDLFdBQVcsRUFBQyxtQkFBbUIsRUFBQyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRnhCYXNlQ29tcG9uZW50LFxyXG4gIEZ4Q29tcG9uZW50LFxyXG4gIEZ4U2VsZWN0U2V0dGluZyxcclxuICBGeFNldHRpbmcsXHJcbiAgRnhTdHJpbmdTZXR0aW5nLFxyXG4gIEZ4VmFsaWRhdGlvbixcclxuICBGeFZhbGlkYXRvclNlcnZpY2VcclxufSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcblxyXG5pbnRlcmZhY2UgU3ViT3B0aW9uIHtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDdXN0b21Ecm9wZG93bk9wdGlvbiB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGluZm8/OiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgc3ViT3B0aW9ucz86IFN1Yk9wdGlvbltdO1xyXG4gIHN1YlNlbGVjdGlvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIHRvdWNoZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ3VzdG9tRHJvcGRvd25Db25maWcge1xyXG4gIGRpc3BsYXlNb2RlPzogJ2NvbXBhY3QnIHwgJ2VsbGlwc2lzJztcclxuICBwbGFjZWhvbGRlckxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jdXN0b21pemUtZHJvcGRvd24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxGb3Jtc01vZHVsZSxSZWFjdGl2ZUZvcm1zTW9kdWxlLEZ4Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9taXplLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b21pemUtZHJvcGRvd24uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21pemVEcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBmb3JtT2JqZWN0OiBvYmplY3QgPSB7fTtcclxuICBkcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICBmb3JtU3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gIGZpbmRpbmdzT3B0aW9uczogQ3VzdG9tRHJvcGRvd25PcHRpb25bXSA9IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdQcm9jbGluYXRpb24nLFxyXG4gICAgICB2YWx1ZTogJ3Byb2NsaW5hdGlvbicsXHJcbiAgICAgIGluZm86ICdGb3J3YXJkIGluY2xpbmF0aW9uIG9mIHRlZXRoJyxcclxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICBzdWJPcHRpb25zOiBbXHJcbiAgICAgICAgeyBsYWJlbDogJ01pbGQnLCB2YWx1ZTogJ21pbGQnIH0sXHJcbiAgICAgICAgeyBsYWJlbDogJ01vZGVyYXRlJywgdmFsdWU6ICdtb2RlcmF0ZScgfSxcclxuICAgICAgICB7IGxhYmVsOiAnU2V2ZXJlJywgdmFsdWU6ICdzZXZlcmUnIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdDcm93ZGluZycsXHJcbiAgICAgIHZhbHVlOiAnY3Jvd2RpbmcnLFxyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHN1Yk9wdGlvbnM6IFtcclxuICAgICAgICB7IGxhYmVsOiAnTWlsZCcsIHZhbHVlOiAnbWlsZCcgfSxcclxuICAgICAgICB7IGxhYmVsOiAnTW9kZXJhdGUnLCB2YWx1ZTogJ21vZGVyYXRlJyB9LFxyXG4gICAgICAgIHsgbGFiZWw6ICdTZXZlcmUnLCB2YWx1ZTogJ3NldmVyZScgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ1NwYWNpbmcnLFxyXG4gICAgICB2YWx1ZTogJ3NwYWNpbmcnLFxyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgIHN1Yk9wdGlvbnM6IFtcclxuICAgICAgICB7IGxhYmVsOiAnTWlsZCcsIHZhbHVlOiAnbWlsZCcgfSxcclxuICAgICAgICB7IGxhYmVsOiAnTW9kZXJhdGUnLCB2YWx1ZTogJ21vZGVyYXRlJyB9LFxyXG4gICAgICAgIHsgbGFiZWw6ICdTZXZlcmUnLCB2YWx1ZTogJ3NldmVyZScgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ1JldHJvY2xpbmF0aW9uJyxcclxuICAgICAgdmFsdWU6ICdyZXRyb2NsaW5hdGlvbicsXHJcbiAgICAgIGluZm86ICdCYWNrd2FyZCBpbmNsaW5hdGlvbiBvZiB0ZWV0aCcsXHJcbiAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdSb3RhdGlvbicsXHJcbiAgICAgIHZhbHVlOiAncm90YXRpb24nLFxyXG4gICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBjb25maWc6IEN1c3RvbURyb3Bkb3duQ29uZmlnID0ge1xyXG4gICAgZGlzcGxheU1vZGU6ICdlbGxpcHNpcycsXHJcbiAgICBwbGFjZWhvbGRlckxhYmVsOiAnU2VsZWN0IEZpbmRpbmcnXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlOiBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZnhBcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlUmVnaXN0cnksXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZVJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoY2RyKTtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaW5kaW5nczogdGhpcy5mYi5hcnJheShbXSkgIC8vIEluaXRpYWxseSBhbiBlbXB0eSBhcnJheVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybSBhcnJheVxyXG4gICAgdGhpcy51cGRhdGVGaW5kaW5nc0FycmF5KCk7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVnaXN0ZXIodGhpcy5mb3JtKSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcInZhbHVlXCI6IFwicHJvY2xpbmF0aW9uXCIsXHJcbiAgICAgICAgICBcInN1YlNlbGVjdGlvblwiOiB7IFwibGFiZWxcIjogXCJNaWxkXCIsIFwidmFsdWVcIjogXCJtaWxkXCIgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIF1cclxuICAgICAgdGhpcy5wYXRjaEV4aXN0aW5nVmFsdWVzKGRhdGEpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaW5kaW5nc0FycmF5KCkge1xyXG4gICAgY29uc3QgZmluZGluZ3NGb3JtQXJyYXkgPSB0aGlzLmZvcm0uZ2V0KCdmaW5kaW5ncycpIGFzIEZvcm1BcnJheTtcclxuICAgIGZpbmRpbmdzRm9ybUFycmF5LmNsZWFyKCk7XHJcbiAgICB0aGlzLmZpbmRpbmdzT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgIGZpbmRpbmdzRm9ybUFycmF5LnB1c2godGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICB2YWx1ZTogW29wdGlvbi52YWx1ZV0sXHJcbiAgICAgICAgICBzdWJTZWxlY3Rpb246IFtvcHRpb24uc3ViU2VsZWN0aW9uXVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJWYXJpYWJsZXNcIiwgdmFyaWFibGVzKTtcclxuICAgICAgfSk7XHJcbiAgICBjb25zdCBzZXJ2aWNlVXJsID0gdGhpcy5meEFwaVNlcnZpY2UuZ2V0U2VydmljZVVybCh0aGlzLnNldHRpbmcoJ3NlcnZpY2VOYW1lJykpO1xyXG4gICAgdGhpcy5nZXRPcHRpb25zKHNlcnZpY2VVcmwsIHRoaXMuc2V0dGluZygnY2xpbmljYWxOb3Rlc1VSTCcpKTtcclxuICB9XHJcblxyXG4gIGdldE9wdGlvbnMoc2VydmljZVVybDogc3RyaW5nLCB1cmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmluYWxVcmwgPSBzZXJ2aWNlVXJsICsgdXJsO1xyXG4gICAgdGhpcy5odHRwLmdldDxhbnlbXT4oZmluYWxVcmwpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gSGFuZGxlIEFQSSByZXNwb25zZVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgb3B0aW9ucycsIGVycilcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoeyBrZXk6ICdkaXNwbGF5TW9kZScsICR0aXRsZTogJ0Rpc3BsYXkgTW9kZScsIHZhbHVlOiAnZWxsaXBzaXMnIH0sIFt7IG9wdGlvbjogJ0VsbGlwc2lzJywgdmFsdWU6ICdlbGxpcHNpcycgfSwgeyBvcHRpb246ICdDb21wYWN0JywgdmFsdWU6ICdjb21wYWN0JyB9XSksXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdwbGFjZWhvbGRlckxhYmVsJywgJHRpdGxlOiAnUGxhY2Vob2xkZXInLCB2YWx1ZTogJ1NlbGVjdCBPcHRpb25zJyB9KSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgcmV0dXJuIFtGeFZhbGlkYXRvclNlcnZpY2UucmVxdWlyZWRdO1xyXG4gIH1cclxuXHJcbiAgLyoqIERyb3Bkb3duIEJlaGF2aW9yICoqL1xyXG4gIHRvZ2dsZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSAhdGhpcy5kcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuICB0b2dnbGVPcHRpb24ob3B0aW9uOiBDdXN0b21Ecm9wZG93bk9wdGlvbiwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIG9wdGlvbi5zZWxlY3RlZCA9ICFvcHRpb24uc2VsZWN0ZWQ7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRpbmdzT3B0aW9ucy5maW5kSW5kZXgobyA9PiBvLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xyXG4gICAgY29uc3QgY29udHJvbCA9ICh0aGlzLmZvcm0uZ2V0KCdmaW5kaW5ncycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpO1xyXG5cclxuICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnN1Yk9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICBjb250cm9sLmdldCgnc3ViU2VsZWN0aW9uJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250cm9sLmdldCgnc3ViU2VsZWN0aW9uJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBjb250cm9sLmdldCgnc3ViU2VsZWN0aW9uJyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRyb2wuZ2V0KCdzdWJTZWxlY3Rpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEZvcm0gJiBMYWJlbCBIZWxwZXJzICoqL1xyXG4gIGdldCBoYXNTZWxlY3RlZEZpbmRpbmdzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmluZGluZ3NPcHRpb25zLnNvbWUoZiA9PiBmLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEZpbmRpbmdzTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5maW5kaW5nc09wdGlvbnNcclxuICAgICAgLmZpbHRlcihmID0+IHtcclxuICAgICAgICBpZiAoZi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgLy8gSWYgZmluZGluZyBoYXMgc3ViLW9wdGlvbnMg4oaSIG9ubHkgc2hvdyBpZiBhIHN1Yi1vcHRpb24gaXMgc2VsZWN0ZWRcclxuICAgICAgICAgIGlmIChmLnN1Yk9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gISFmLnN1YlNlbGVjdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIElmIG5vIHN1Yi1vcHRpb25zIOKGkiBhbHdheXMgc2hvd1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICAgLm1hcChmID0+IGYubGFiZWwpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnNldHRpbmcoJ3BsYWNlaG9sZGVyTGFiZWwnKTtcclxuXHJcbiAgICAvLyBEaXNwbGF5IG1vZGUgbG9naWMgKENvbXBhY3Qgb3IgRWxsaXBzaXMpXHJcbiAgICBjb25zdCBtYXhDb3VudCA9IHRoaXMuc2V0dGluZygnZGlzcGxheU1vZGUnKSA9PT0gJ2NvbXBhY3QnID8gMiA6IDM7XHJcbiAgICBpZiAodGhpcy5zZXR0aW5nKCdkaXNwbGF5TW9kZScpID09PSAnY29tcGFjdCcpIHtcclxuICAgICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA8PSBtYXhDb3VudFxyXG4gICAgICAgID8gc2VsZWN0ZWQuam9pbignLCAnKVxyXG4gICAgICAgIDogYCR7c2VsZWN0ZWQuc2xpY2UoMCwgbWF4Q291bnQpLmpvaW4oJywgJyl9ICske3NlbGVjdGVkLmxlbmd0aCAtIG1heENvdW50fSBtb3JlYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXR0aW5nKCdkaXNwbGF5TW9kZScpID09PSAnZWxsaXBzaXMnKSB7XHJcbiAgICAgIHJldHVybiBzZWxlY3RlZC5sZW5ndGggPiBtYXhDb3VudFxyXG4gICAgICAgID8gYCR7c2VsZWN0ZWQuc2xpY2UoMCwgbWF4Q291bnQpLmpvaW4oJywgJyl9LCAuLi5gXHJcbiAgICAgICAgOiBzZWxlY3RlZC5qb2luKCcsICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZC5qb2luKCcsICcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFVwZGF0ZSBGaW5kaW5ncyArIFZhbGlkYXRpb24gKiovXHJcbiAgdXBkYXRlRmluZGluZ3MoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZmluZGluZ3NPcHRpb25zXHJcbiAgICAgIC5maWx0ZXIoZiA9PiB7XHJcbiAgICAgICAgaWYgKGYuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIC8vIE9ubHkgaW5jbHVkZSBpbiBmaW5hbCBmb3JtIGlmOlxyXG4gICAgICAgICAgLy8gIC0gbm8gc3ViT3B0aW9ucywgb3JcclxuICAgICAgICAgIC8vICAtIHN1Yk9wdGlvbnMgd2l0aCB2YWxpZCBzdWJTZWxlY3Rpb25cclxuICAgICAgICAgIGlmIChmLnN1Yk9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gISFmLnN1YlNlbGVjdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoZiA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gZi5zdWJPcHRpb25zPy5maW5kKHMgPT4gcy52YWx1ZSA9PT0gZi5zdWJTZWxlY3Rpb24pIHx8IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxhYmVsOiBmLmxhYmVsLFxyXG4gICAgICAgICAgdmFsdWU6IGYudmFsdWUsXHJcbiAgICAgICAgICBzdWJTZWxlY3Rpb246IHN1YiA/IHsgbGFiZWw6IHN1Yi5sYWJlbCwgdmFsdWU6IHN1Yi52YWx1ZSB9IDogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSByZWFjdGl2ZSBmb3JtIHZhbHVlXHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZpbmRpbmdzOiBzZWxlY3RlZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvbiBsb2dpYyByZW1haW5zIHNhbWVcclxuICAgIGNvbnN0IGludmFsaWRJdGVtcyA9IHRoaXMuZmluZGluZ3NPcHRpb25zLmZpbHRlcihcclxuICAgICAgZiA9PiBmLnNlbGVjdGVkICYmIGYuc3ViT3B0aW9ucyAmJiAhZi5zdWJTZWxlY3Rpb25cclxuICAgICk7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdmaW5kaW5ncycpPy5zZXRFcnJvcnMoXHJcbiAgICAgIGludmFsaWRJdGVtcy5sZW5ndGggPiAwID8geyBtaXNzaW5nU3ViU2VsZWN0aW9uOiB0cnVlIH0gOiBudWxsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2hFeGlzdGluZ1ZhbHVlcyhkYXRhOiBhbnlbXSkge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mb3JtLmdldCgnZmluZGluZ3MnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICBmb3JtQXJyYXkuY2xlYXIoKTtcclxuXHJcbiAgICB0aGlzLmZpbmRpbmdzT3B0aW9ucy5mb3JFYWNoKG9wdCA9PiB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gZGF0YS5maW5kKHggPT4geC52YWx1ZSA9PT0gb3B0LnZhbHVlKTtcclxuICAgICAgb3B0LnNlbGVjdGVkID0gISFtYXRjaDtcclxuICAgICAgb3B0LnN1YlNlbGVjdGlvbiA9IG1hdGNoPy5zdWJTZWxlY3Rpb24/LnZhbHVlIHx8IG51bGw7XHJcblxyXG4gICAgICBpZiAob3B0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgZm9ybUFycmF5LnB1c2goXHJcbiAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdmFsdWU6IFtvcHQudmFsdWVdLFxyXG4gICAgICAgICAgICBzdWJTZWxlY3Rpb246IFtvcHQuc3ViU2VsZWN0aW9uXVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbmRpbmdzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICA8IS0tIEhlYWRlciAtLT5cclxuICAgICAgPGRpdiAjZHJvcGRvd25XcmFwcGVyIGNsYXNzPVwicmVsYXRpdmUgdy04MFwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgcHgtMyBweS0yIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBiZy13aGl0ZSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ibHVlLTQwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJoYXNTZWxlY3RlZEZpbmRpbmdzOyBlbHNlIHBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgIHt7IHNlbGVjdGVkRmluZGluZ3NMYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAge3sgc2V0dGluZygncGxhY2Vob2xkZXJMYWJlbCcpIH19XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPHN2ZyBjbGFzcz1cInctNSBoLTUgbWwtMiB0ZXh0LWdyYXktNTAwIHRyYW5zZm9ybSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDBcIlxyXG4gICAgICAgICAgICBbY2xhc3Mucm90YXRlLTE4MF09XCJkcm9wZG93bk9wZW5cIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNMTkgOWwtNyA3LTctN1wiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBQYW5lbCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbXQtMSB3LWZ1bGwgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHNoYWRvdy1sZyBtYXgtaC02NCBvdmVyZmxvdy15LWF1dG8gei0xMFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbmRpbmdzT3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGxhc3Q6Ym9yZGVyLW5vbmUgcC0yIGhvdmVyOmJnLWdyYXktNTAgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDwhLS0gQ2hlY2tib3ggKyBMYWJlbCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwidy00IGgtNCB0ZXh0LWJsdWUtNTAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uLnNlbGVjdGVkXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcHRpb24ob3B0aW9uLCAkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcHRpb24ob3B0aW9uLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvbi5pbmZvXCIgY2xhc3M9XCJtbC1hdXRvIHRleHQtYmx1ZS01MDAgdGV4dC1zbSBjdXJzb3ItcG9pbnRlclwiIHRpdGxlPVwie3sgb3B0aW9uLmluZm8gfX1cIj5cclxuICAgICAgICAgICAgICAgIOKTmFxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJhZGlvcyAoc3ViLW9wdGlvbnMpIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC00IG1sLTYgbXQtMiB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24uc3ViT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2Ygb3B0aW9uLnN1Yk9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcHRpb24uc3ViU2VsZWN0aW9uID0gcy52YWx1ZTsgb3B0aW9uLnRvdWNoZWQgPSB0cnVlOyB1cGRhdGVGaW5kaW5ncygpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbbmFtZV09XCJvcHRpb24udmFsdWVcIiBbdmFsdWVdPVwicy52YWx1ZVwiIFsobmdNb2RlbCldPVwib3B0aW9uLnN1YlNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgY2xhc3M9XCJ0ZXh0LWJsdWUtNjAwIGN1cnNvci1wb2ludGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcy5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmFsaWRhdGlvbiBNZXNzYWdlIChpZiBzdWItc2VsZWN0aW9uIGlzIG1pc3NpbmcpIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnN1Yk9wdGlvbnMgJiYgIW9wdGlvbi5zdWJTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgdGV4dC14cyBtdC0xIHctZnVsbCBtbC0xXCI+XHJcbiAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IG9uZSBvcHRpb25cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvZngtY29tcG9uZW50PlxyXG4iXX0=
|