@nexheal/nexheal-lib 0.0.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexheal-lib.mjs","sources":["../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/autocomplete-control/autocomplete-control.component.html","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/calendar-control/calendar-control.component.html","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/checkbox-control/checkbox-control.component.html","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/input-control/input-control.component.html","../../../projects/nexheal-lib/src/directives/clickoutside.directive.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/multiselect-control/multiselect-control.component.html","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/select-control/select-control.component.html","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/switch-control/switch-control.component.html","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.ts","../../../projects/nexheal-lib/src/lib/controls/text-editor/text-editor.component.html","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.ts","../../../projects/nexheal-lib/src/lib/controls/textarea-control/textarea-control.component.html","../../../projects/nexheal-lib/src/public-api.ts","../../../projects/nexheal-lib/src/nexheal-lib.ts"],"sourcesContent":["import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ElementRef,\r\n AfterViewInit,\r\n} from \"@angular/core\";\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n ReactiveFormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n} from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\n\r\n@Component({\r\n selector: \"autocomplete-control\",\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: \"./autocomplete-control.component.html\",\r\n styleUrls: [\"./autocomplete-control.component.scss\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutocompleteControl,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AutocompleteControl\r\n implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass!: string;\r\n @Input() clearVal: boolean = true;\r\n @Input() field: string = \"\";\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() search = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n private _disabled: boolean = false;\r\n private _options: any[] = [];\r\n @Input() set options(value: any[]) {\r\n this._options = value || [];\r\n this.processValueBuffer();\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input() get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n }\r\n private valueBuffer: any = null;\r\n private popperInstance!: PopperInstance;\r\n private preventDropdownReopen: boolean = false;\r\n private preventClearOnBlur: boolean = false;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n @ViewChild(\"inputElement\") inputElement!: ElementRef;\r\n @ViewChild(\"dropdownElement\") dropdownElement!: ElementRef;\r\n\r\n inputControl = new FormControl(\"\");\r\n isDropdownOpen: boolean = false;\r\n hasFocus: boolean = false;\r\n selectedItems: any;\r\n filteredSuggestions: any[] = [];\r\n highlightedIndex: number | null = null;\r\n\r\n constructor() {\r\n this.inputControl.valueChanges\r\n .pipe(debounceTime(10), distinctUntilChanged())\r\n .subscribe((value) => {\r\n if (this.preventDropdownReopen) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value && value.trim().length > 0) {\r\n const filterValue = value;\r\n this.filterSuggestions(filterValue);\r\n this.search.emit(filterValue);\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.inputControl.markAsPristine();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.createPopperInstance();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.preventDropdownReopen = true;\r\n if (value == null) {\r\n // Clear everything if we get null\r\n this.valueBuffer = null;\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n } else {\r\n // Otherwise, treat as normal\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n }\r\n private processValueBuffer() {\r\n if (this.valueBuffer == null) {\r\n this.selectedItems = null;\r\n this.preventDropdownReopen = true;\r\n // this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this._options && this._options.length > 0) {\r\n const matchedSuggestion = this._options.find(\r\n (s) => s.id === this.valueBuffer\r\n );\r\n if (matchedSuggestion) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(\r\n matchedSuggestion[this.optionDisplayProperty],\r\n { emitEvent: false }\r\n );\r\n this.selectedItems = matchedSuggestion;\r\n this.onChange(matchedSuggestion.id);\r\n this.optionPatched.emit(matchedSuggestion);\r\n this.valueBuffer = null;\r\n return;\r\n }\r\n }\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.selectedItems = null;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.inputControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n }\r\n }\r\n\r\n filterSuggestions(value: string) {\r\n if (this.preventDropdownReopen || !this.hasFocus) {\r\n this.preventDropdownReopen = false;\r\n return;\r\n }\r\n if (value === \"\") {\r\n this.filteredSuggestions = [];\r\n this.isDropdownOpen = false;\r\n return;\r\n }\r\n const filterValue = value.toString().toLowerCase();\r\n this.filteredSuggestions = this.options.filter((suggestion) =>\r\n suggestion[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .includes(filterValue)\r\n );\r\n this.highlightedIndex = this.filteredSuggestions.length > 0 ? 0 : null;\r\n this.isDropdownOpen = true;\r\n setTimeout(() => {\r\n this.createPopperInstance();\r\n }, 0);\r\n }\r\n selectSuggestion(suggestion: any) {\r\n this.preventDropdownReopen = true;\r\n this.inputControl.setValue(suggestion[this.optionDisplayProperty], {\r\n emitEvent: false,\r\n });\r\n this.onChange(suggestion.id);\r\n this.inputControl.markAsTouched();\r\n this.inputControl.updateValueAndValidity(); // Trigger validation update\r\n this.isDropdownOpen = false;\r\n if (this.selectedItems?.id !== suggestion.id) {\r\n this.selectedItems = suggestion;\r\n this.optionSelected.emit(suggestion);\r\n }\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.hasFocus = true;\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n // Delay onBlur handling so that mousedown and click can occur first.\r\n setTimeout(() => {\r\n this.hasFocus = false;\r\n this.isDropdownOpen = false;\r\n\r\n // If an option click is in progress, do not clear the input.\r\n if (!this.preventClearOnBlur) {\r\n // Optionally: check if the current value is valid against options.\r\n // If not found, clear the input.\r\n const currentValue = this.inputControl.value;\r\n const found = this._options.find(\r\n (opt) =>\r\n String(opt[this.optionDisplayProperty]).toLowerCase() ===\r\n String(currentValue).toLowerCase()\r\n );\r\n if (!found) {\r\n this.inputControl.setValue(\"\");\r\n this.selectedItems = null;\r\n this.onChange(null);\r\n }\r\n }\r\n\r\n // Reset the flag after handling blur.\r\n this.preventClearOnBlur = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isDropdownOpen) {\r\n return;\r\n }\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredSuggestions.length - 1\r\n ? 0\r\n : this.highlightedIndex + 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightedIndex =\r\n this.highlightedIndex === null || this.highlightedIndex === 0\r\n ? this.filteredSuggestions.length - 1\r\n : this.highlightedIndex - 1;\r\n event.preventDefault();\r\n this.scrollHighlightedItemIntoView();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.filteredSuggestions.length > 0\r\n ) {\r\n this.selectSuggestion(\r\n this.filteredSuggestions[this.highlightedIndex]\r\n );\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n onOptionMouseDown(): void {\r\n this.preventClearOnBlur = true;\r\n }\r\n onMouseOver(index: number) {\r\n this.highlightedIndex = index;\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n private createPopperInstance() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n if (this.inputElement && this.dropdownElement) {\r\n this.popperInstance = createPopper(\r\n this.inputElement.nativeElement,\r\n this.dropdownElement.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n private scrollHighlightedItemIntoView() {\r\n if (this.highlightedIndex !== null) {\r\n const highlightedItem =\r\n this.dropdownElement.nativeElement.querySelectorAll(\".list-item\")[\r\n this.highlightedIndex\r\n ];\r\n if (highlightedItem) {\r\n highlightedItem.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }\r\n\r\n // clear\r\n resetInput() {\r\n this.inputControl.setValue(\"\");\r\n this.selectionCleared.emit();\r\n this.selectedItems = null;\r\n this.valueBuffer = null;\r\n }\r\n removeItem(item: any) {\r\n this.selectedItems = this.selectedItems.filter((i: any) => i !== item);\r\n this.onChange(this.selectedItems);\r\n this.optionSelected.emit(this.selectedItems);\r\n }\r\n}\r\n","<div class=\"form-group auto-complete\" [ngClass]=\"customClass\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #inputElement type=\"text\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n (blur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" (focus)=\"onFocus()\" [ngClass]=\"{'is-invalid': error}\"\r\n [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (!inputLoader && inputControl.value && clearVal && hasFocus) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n @if (isDropdownOpen) {\r\n <div #dropdownElement class=\"option-list\">\r\n @if (filteredSuggestions.length === 0) {\r\n <div class=\"no-results\">\r\n <div>No results found</div>\r\n @if (isAddNewItem) {\r\n <div (click)=\"onAddNewItemClick()\" class=\"btn-new\">\r\n Add New Item\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @for (suggestion of filteredSuggestions; track suggestion[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': suggestion === selectedItems,\r\n 'highlighted': highlightedIndex === i\r\n }\" (mousedown)=\"onOptionMouseDown()\" (click)=\"selectSuggestion(suggestion)\" (mouseover)=\"onMouseOver(i)\">\r\n @if (suggestion.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ suggestion.countryCode }}.png\" width=\"20\"\r\n alt=\"{{ suggestion.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ suggestion[optionDisplayProperty] }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule, DatePipe } from \"@angular/common\";\r\nimport { Component, OnInit, forwardRef, Input, HostListener, ViewChild, ElementRef, EventEmitter, Output, OnDestroy } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\ntype ViewMode = \"day\" | \"month\" | \"yearRange\";\r\n\r\n@Component({\r\n selector: \"calendar-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n templateUrl: \"./calendar-control.component.html\",\r\n styleUrl: \"./calendar-control.component.scss\",\r\n providers: [\r\n DatePipe,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CalendarControl),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CalendarControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() title!: string;\r\n @Input() required: boolean = false;\r\n @Input() customClass: string | object = \"\";\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() hourFormat: string = \"24\";\r\n @Input() selectionMode: string = \"single\";\r\n @Input() timeOnly = false;\r\n @Input() dateFormat: string = \"dd/MM/yyyy\";\r\n @Input() placeholder: string = \"dd-mm-yyyy\";\r\n @Input() disabled = false;\r\n @Input() readonly = false;\r\n @Input() submitted = false;\r\n @Input() inputPlaceholder: boolean = false;\r\n @Input(\"close-val\") closeVal: boolean = false;\r\n @Input() showTime = false;\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() dateSelected = new EventEmitter<Date | null>();\r\n\r\n private _minDate?: string;\r\n private _maxDate?: string;\r\n @Input() get minDate(): string | undefined {\r\n return this._minDate;\r\n }\r\n set minDate(value: string | undefined) {\r\n this._minDate = value;\r\n }\r\n @Input() get maxDate(): string | undefined {\r\n return this._maxDate;\r\n }\r\n set maxDate(value: string | undefined) {\r\n this._maxDate = value;\r\n }\r\n get meridian(): 'AM' | 'PM' {\r\n if (this.hourFormat !== '12') return 'AM';\r\n return this.selectedHour >= 12 ? 'PM' : 'AM';\r\n }\r\n private static _currentlyOpen?: CalendarControl;\r\n private onChangeFn: (val: string | null) => void = () => { };\r\n private onTouchedFn: () => void = () => { };\r\n private popperInstance: PopperInstance | null = null;\r\n\r\n @ViewChild(\"root\", { static: true }) rootElement!: ElementRef;\r\n @ViewChild(\"inputEl\", { static: true }) inputEl!: ElementRef<HTMLElement>;\r\n @ViewChild(\"datePicker\", { static: false }) datePickerEl!: ElementRef<HTMLElement>;\r\n\r\n isOpen: boolean = false;\r\n focus: boolean = false;\r\n displayMonth: number;\r\n displayYear: number;\r\n selectedDate: Date | null = null;\r\n today = new Date();\r\n todayYear = this.today.getFullYear();\r\n todayMonth = this.today.getMonth();\r\n todayDate = this.today.getDate();\r\n selectedHour = this.today.getHours();\r\n selectedMinute = this.today.getMinutes();\r\n dayClassMap: {\r\n [day: number]: { disabled: boolean; selected: boolean; today: boolean };\r\n } = {};\r\n\r\n inputVal: string | null = null; // Replace with the appropriate type and default value\r\n yearRangeSize = 15; // The year range view shows a chunk of years, for example 15 years at a time.\r\n currentView: ViewMode = \"day\";\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n\r\n constructor(\r\n public datePipe: DatePipe\r\n ) {\r\n const today = new Date();\r\n this.displayMonth = today.getMonth();\r\n this.displayYear = today.getFullYear();\r\n }\r\n\r\n ngOnInit(): void {\r\n const now = new Date();\r\n this.displayYear = now.getFullYear();\r\n this.displayMonth = now.getMonth();\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.isOpen) {\r\n this.initializePopper();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyPopper();\r\n }\r\n\r\n writeValue(value: any): void {\r\n // 1) Clear out if no value\r\n if (!value) {\r\n this.selectedDate = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n let hours: number, mins: number;\r\n\r\n if (typeof value === \"string\") {\r\n // “HH:mm” or “hh:mm AM/PM”\r\n const m24 = value.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = value.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n hours = +m24[1];\r\n mins = +m24[2];\r\n } else if (m12) {\r\n let h = +m12[1];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n hours = h;\r\n mins = +m12[2];\r\n } else {\r\n // fallback parse\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n } else if (value instanceof Date) {\r\n hours = value.getHours();\r\n mins = value.getMinutes();\r\n } else {\r\n // maybe a timestamp or something else\r\n const dt = new Date(value);\r\n hours = dt.getHours();\r\n mins = dt.getMinutes();\r\n }\r\n\r\n // 3) Apply\r\n this.selectedHour = hours;\r\n this.selectedMinute = mins;\r\n // 4) Write back into the formControl & notify forms\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n\r\n return;\r\n }\r\n // 2) Parse the incoming string (dd/MM/yyyy or dd/MM/yyyy HH:mm)\r\n const parsed = this.parseDate(value);\r\n this.selectedDate = parsed;\r\n if (this.showTime) {\r\n const raw = value as string;\r\n\r\n // split into date vs time\r\n let datePart = raw,\r\n timePart: string | null = null;\r\n const parts = raw.match(/^(.+?)\\s+(.+)$/);\r\n if (parts) {\r\n datePart = parts[1];\r\n timePart = parts[2];\r\n }\r\n\r\n // parse the date\r\n const parsedDate = this.parseDate(datePart);\r\n if (!parsedDate) {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n\r\n // parse the time portion (reuse your timeOnly logic)\r\n if (timePart) {\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const dt = new Date(`1970-01-01T${timePart}`);\r\n h = dt.getHours();\r\n m = dt.getMinutes();\r\n }\r\n\r\n parsedDate.setHours(h, m);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n }\r\n\r\n // update calendar view & control value\r\n this.selectedDate = parsedDate;\r\n this.displayMonth = parsedDate.getMonth();\r\n this.displayYear = parsedDate.getFullYear();\r\n const out = this.formatOutput(parsedDate);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n return;\r\n }\r\n if (parsed) {\r\n // 3) Always update the calendar view\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n\r\n // 4) ONLY if showTime is on, pull hours/minutes\r\n if (this.showTime) {\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n }\r\n\r\n // 5) Finally, set the input text via your formatter\r\n this.inputControl.setValue(this.formatOutput(parsed), {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this.onChangeFn = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouchedFn = fn;\r\n }\r\n setData(config: any) {\r\n if (config.hasOwnProperty(\"placeholder\")) {\r\n this.placeholder = config.placeholder;\r\n }\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.onTouchedFn();\r\n const raw = this.inputControl.value as string;\r\n if (this.showTime && !this.timeOnly) {\r\n // split off the date vs. time\r\n const match = raw.match(/^(.+?)\\s+(.+)$/);\r\n const datePart = match ? match[1] : raw;\r\n const timePart = match ? match[2] : \"\";\r\n // parse the date\r\n const pd = this.parseDate(datePart);\r\n if (!pd) return this.clearDate(new Event(\"manual\"));\r\n // parse the time portion (reuse your timeOnly logic)\r\n let h: number, m: number;\r\n const m24 = timePart.match(/^(\\d{1,2}):(\\d{2})$/);\r\n const m12 = timePart.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n if (m24) {\r\n h = +m24[1];\r\n m = +m24[2];\r\n } else if (m12) {\r\n h = +m12[1];\r\n m = +m12[2];\r\n if (/PM/i.test(m12[3]) && h < 12) h += 12;\r\n if (/AM/i.test(m12[3]) && h === 12) h = 0;\r\n } else {\r\n const tmp = new Date(`1970-01-01T${timePart}`);\r\n h = tmp.getHours();\r\n m = tmp.getMinutes();\r\n }\r\n // apply\r\n pd.setHours(h, m);\r\n this.selectedDate = pd;\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n\r\n // update calendar view\r\n this.displayMonth = pd.getMonth();\r\n this.displayYear = pd.getFullYear();\r\n // write back into the input & notify\r\n const out = this.formatOutput(pd);\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(pd);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.timeOnly) {\r\n // try 24-hour HH:mm\r\n let m = raw.match(/^(\\d{1,2}):(\\d{2})$/);\r\n // or 12-hour h:mm AM/PM\r\n const mAmPm = !m && raw.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\r\n\r\n if (m) {\r\n // 24h\r\n const h = +m[1],\r\n min = +m[2];\r\n if (h < 24 && min < 60) {\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else if (mAmPm) {\r\n // 12h\r\n let h = +mAmPm[1],\r\n min = +mAmPm[2];\r\n const ap = mAmPm[3].toUpperCase();\r\n if (h >= 1 && h <= 12 && min < 60) {\r\n if (ap === \"PM\" && h < 12) h += 12;\r\n if (ap === \"AM\" && h === 12) h = 0;\r\n this.selectedHour = h;\r\n this.selectedMinute = min;\r\n\r\n } else {\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n } else {\r\n // not a valid time string\r\n return this.clearDate(new Event(\"manual\"));\r\n }\r\n const out = this.formatOutputTimeOnly();\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n this.onChangeFn(out);\r\n this.dateSelected.emit(this.selectedDate);\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n if (this.showTime) {\r\n this.blurEvent.emit();\r\n return;\r\n }\r\n const parsed = this.parseDate(raw);\r\n\r\n if (!parsed) {\r\n this.clearDate(new Event(\"manual\"));\r\n } else {\r\n this.selectedDate = parsed;\r\n this.displayMonth = parsed.getMonth();\r\n this.displayYear = parsed.getFullYear();\r\n this.selectedHour = parsed.getHours();\r\n this.selectedMinute = parsed.getMinutes();\r\n\r\n const formatted = this.formatOutput(parsed);\r\n this.inputControl.setValue(formatted, { emitEvent: false });\r\n this.onChangeFn(formatted);\r\n }\r\n this.blurEvent.emit();\r\n }\r\n onFocus() {\r\n this.focus = true;\r\n }\r\n setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n onInputKeydown(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Escape\":\r\n this.isOpen = false;\r\n break;\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n break;\r\n case \"Tab\":\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n // day\r\n selectDay(day: number | null) {\r\n if (!day) return;\r\n const picked = this.showTime\r\n ? this.buildDateWithTime(day)\r\n : new Date(this.displayYear, this.displayMonth, day);\r\n\r\n if (this.isDateDisabled(picked)) return;\r\n\r\n this.selectedDate = picked;\r\n\r\n const out = this.formatOutput(picked);\r\n\r\n this.inputControl.setValue(out, { emitEvent: false });\r\n\r\n this.onChangeFn(out);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(picked);\r\n\r\n this.isOpen = false;\r\n }\r\n get daysInMonth(): (number | null)[] {\r\n const firstDay = new Date(this.displayYear, this.displayMonth, 1).getDay();\r\n const totalDays = new Date(\r\n this.displayYear,\r\n this.displayMonth + 1,\r\n 0\r\n ).getDate();\r\n const offset = firstDay;\r\n\r\n const daysArray: (number | null)[] = Array(offset).fill(null);\r\n this.dayClassMap = {}; // Reset\r\n\r\n for (let i = 1; i <= totalDays; i++) {\r\n const date = new Date(this.displayYear, this.displayMonth, i);\r\n\r\n this.dayClassMap[i] = {\r\n disabled: this.isDateDisabled(date),\r\n selected:\r\n this.selectedDate?.getFullYear() === this.displayYear &&\r\n this.selectedDate?.getMonth() === this.displayMonth &&\r\n this.selectedDate?.getDate() === i,\r\n today:\r\n this.todayYear === this.displayYear &&\r\n this.todayMonth === this.displayMonth &&\r\n this.todayDate === i,\r\n };\r\n\r\n daysArray.push(i);\r\n }\r\n\r\n return daysArray;\r\n }\r\n parseDate(val: any): Date | null {\r\n if (typeof val === \"string\") {\r\n const m = val.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\r\n if (m) {\r\n const d = +m[1],\r\n mo = +m[2] - 1,\r\n y = +m[3];\r\n return new Date(y, mo, d);\r\n }\r\n }\r\n // fallback\r\n const date = new Date(val);\r\n return isNaN(date.getTime()) ? null : date;\r\n }\r\n formatOutput(date: Date): string {\r\n const datePart = this.datePipe.transform(date, this.dateFormat)!;\r\n if (this.showTime) {\r\n const timeFormat = this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\";\r\n const timePart = this.datePipe.transform(date, timeFormat)!;\r\n return `${datePart} ${timePart}`;\r\n }\r\n return datePart;\r\n }\r\n isSelectedDay(day: number | null): boolean {\r\n if (!this.selectedDate || !day) return false;\r\n return (\r\n this.selectedDate.getFullYear() === this.displayYear &&\r\n this.selectedDate.getMonth() === this.displayMonth &&\r\n this.selectedDate.getDate() === day\r\n );\r\n }\r\n isDateDisabled(d: Date): boolean {\r\n if (this._minDate && d < new Date(this._minDate)) return true;\r\n if (this._maxDate && d > new Date(this._maxDate)) return true;\r\n return false;\r\n }\r\n isDayDisabled(day: number | null): boolean {\r\n return (\r\n day !== null &&\r\n this.isDateDisabled(new Date(this.displayYear, this.displayMonth, day))\r\n );\r\n }\r\n\r\n // month\r\n goToMonthView() {\r\n this.currentView = \"month\";\r\n }\r\n months = [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ];\r\n selectMonth(index: number) {\r\n this.displayMonth = index;\r\n this.currentView = \"day\";\r\n }\r\n get displayMonthName(): string {\r\n return this.months[this.displayMonth];\r\n }\r\n prevMonth() {\r\n if (this.displayMonth === 0) {\r\n this.displayMonth = 11;\r\n this.displayYear--;\r\n } else {\r\n this.displayMonth--;\r\n }\r\n }\r\n nextMonth() {\r\n if (this.displayMonth === 11) {\r\n this.displayMonth = 0;\r\n this.displayYear++;\r\n } else {\r\n this.displayMonth++;\r\n }\r\n }\r\n\r\n // year\r\n goToYearRangeView() {\r\n this.currentView = \"yearRange\";\r\n }\r\n get yearRange(): number[] {\r\n const startYear = this.getStartYearForRange();\r\n const years: number[] = [];\r\n for (let i = 0; i < this.yearRangeSize; i++) {\r\n years.push(startYear + i);\r\n }\r\n return years;\r\n }\r\n getStartYearForRange(): number {\r\n const remainder = this.displayYear % this.yearRangeSize;\r\n return this.displayYear - remainder;\r\n }\r\n selectYear(year: number) {\r\n this.displayYear = year;\r\n this.currentView = \"month\";\r\n }\r\n prevYearRange() {\r\n this.displayYear -= this.yearRangeSize;\r\n }\r\n nextYearRange() {\r\n this.displayYear += this.yearRangeSize;\r\n }\r\n\r\n // time picker\r\n private formatOutputTimeOnly(): string {\r\n // you could choose 12h vs 24h based on hourFormat\r\n return this.datePipe.transform(\r\n new Date(0, 0, 0, this.selectedHour, this.selectedMinute),\r\n this.hourFormat === \"12\" ? \"hh:mm a\" : \"HH:mm\"\r\n )!;\r\n }\r\n private patchDateWithTime() {\r\n if (!this.selectedDate) {\r\n const now = new Date();\r\n this.selectedDate = new Date(\r\n now.getFullYear(),\r\n now.getMonth(),\r\n now.getDate(),\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n } else {\r\n this.selectedDate.setHours(this.selectedHour, this.selectedMinute);\r\n }\r\n\r\n const output = this.timeOnly\r\n ? this.formatOutputTimeOnly()\r\n : this.formatOutput(this.selectedDate);\r\n\r\n this.inputControl.setValue(output, { emitEvent: false });\r\n this.onChangeFn(output);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(this.selectedDate);\r\n }\r\n setMeridian(value: \"AM\" | \"PM\") {\r\n if (this.meridian === value) return;\r\n if (value === \"AM\" && this.selectedHour >= 12) {\r\n this.selectedHour -= 12;\r\n } else if (value === \"PM\" && this.selectedHour < 12) {\r\n this.selectedHour += 12;\r\n }\r\n this.patchDateWithTime();\r\n }\r\n private buildDateWithTime(day: number): Date {\r\n return new Date(\r\n this.displayYear,\r\n this.displayMonth,\r\n day,\r\n this.selectedHour,\r\n this.selectedMinute\r\n );\r\n }\r\n incrementHour() {\r\n this.selectedHour = (this.selectedHour + 1) % 24;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n decrementHour() {\r\n this.selectedHour = (this.selectedHour + 23) % 24;\r\n if (this.showTime || this.timeOnly) this.patchDateWithTime();\r\n }\r\n incrementMinute() {\r\n this.selectedMinute++;\r\n if (this.selectedMinute >= 60) {\r\n this.selectedMinute = 0;\r\n this.selectedHour = (this.selectedHour + 1) % 24;\r\n }\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n decrementMinute() {\r\n this.selectedMinute--;\r\n if (this.selectedMinute < 0) {\r\n this.selectedMinute = 59;\r\n // go back an hour, wrapping 0 → 23\r\n this.selectedHour = (this.selectedHour + 23) % 24;\r\n }\r\n if (this.showTime || this.timeOnly) {\r\n this.patchDateWithTime();\r\n }\r\n }\r\n\r\n // popper\r\n initializePopper() {\r\n if (\r\n !this.popperInstance &&\r\n this.inputEl?.nativeElement &&\r\n this.datePickerEl?.nativeElement\r\n ) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n }\r\n destroyPopper() {\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n }\r\n\r\n // toggle, open, close and clear \r\n toggleCalendar(): void {\r\n if (this.disabled || this.readonly) return;\r\n\r\n // if another calendar is open, close it\r\n if (\r\n !this.isOpen &&\r\n CalendarControl._currentlyOpen &&\r\n CalendarControl._currentlyOpen !== this\r\n ) {\r\n CalendarControl._currentlyOpen.closeCalendar();\r\n }\r\n\r\n // flip open/close\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n // mark this one as current\r\n CalendarControl._currentlyOpen = this;\r\n\r\n // reset the month/year view\r\n this.currentView = \"day\";\r\n if (this.selectedDate) {\r\n this.displayMonth = this.selectedDate.getMonth();\r\n this.displayYear = this.selectedDate.getFullYear();\r\n } else {\r\n const now = new Date();\r\n this.displayMonth = now.getMonth();\r\n this.displayYear = now.getFullYear();\r\n }\r\n\r\n // destroy any old popper\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n this.popperInstance = null;\r\n }\r\n if (this.inputEl && this.datePickerEl) {\r\n this.popperInstance = createPopper(\r\n this.inputEl.nativeElement,\r\n this.datePickerEl.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n { name: \"offset\", options: { offset: [0, 1] } },\r\n { name: \"preventOverflow\", options: { boundary: \"viewport\" } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"top-start\"] } },\r\n ],\r\n }\r\n );\r\n this.popperInstance.update();\r\n }\r\n } else {\r\n this.destroyPopper();\r\n }\r\n }\r\n openCalendar() {\r\n if (this.disabled || this.readonly || this.isOpen) return;\r\n this.toggleCalendar();\r\n }\r\n @HostListener(\"document:click\", [\"$event\"])\r\n clickOutside(event: Event) {\r\n if (!this.rootElement.nativeElement.contains(event.target) && this.isOpen) {\r\n this.isOpen = false;\r\n }\r\n }\r\n public closeCalendar() {\r\n this.destroyPopper();\r\n this.isOpen = false;\r\n if (CalendarControl._currentlyOpen === this) {\r\n CalendarControl._currentlyOpen = undefined;\r\n }\r\n }\r\n clearDate(event: Event) {\r\n this.selectionCleared.emit();\r\n event.stopPropagation();\r\n this.selectedDate = null;\r\n this.selectedHour = this.today.getHours();\r\n this.selectedMinute = this.today.getMinutes();\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n\r\n this.onChangeFn(null);\r\n this.onTouchedFn();\r\n this.dateSelected.emit(null);\r\n }\r\n}\r\n","<div class=\"form-group calendar\" [ngClass]=\"customClass\">\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\" *ngIf=\"title\">{{ title }}</label>\r\n <div class=\"form-group calendar\" #root (click)=\"openCalendar()\" >\r\n <input type=\"text\" #inputEl [placeholder]=\"(inputPlaceholder && placeholder) ? placeholder : ''\"\r\n [formControl]=\"inputControl\" class=\"form-control\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\" [readonly]=\"readonly\" (click)=\"openCalendar(); $event.stopPropagation()\" (keydown)=\"onInputKeydown($event)\" />\r\n\r\n <span class=\"focus-border\" *ngIf=\"deFocus\"></span>\r\n <span class=\"calendar-icon\">\r\n <i class=\"he\" [ngClass]=\"!timeOnly ? 'he-calendar-blank' : 'he-clock'\"></i>\r\n </span>\r\n <label class=\"clear\" *ngIf=\"!inputLoader && (selectedDate && !disabled && !readonly) && clearVal\" (click)=\"clearDate($event)\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n <label *ngIf=\"inputLoader\" class=\"loader input-loader\"></label>\r\n <div *ngIf=\"error\" class=\"val-msg\">{{ errorMessage }}</div>\r\n\r\n <div class=\"datepicker-group\" #datePicker *ngIf=\"isOpen\" (click)=\"$event.stopPropagation()\">\r\n \r\n <!-- time picker -->\r\n <ng-container *ngIf=\"timeOnly\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementHour()\"><i class=\"he he-chevron-up\"></i></button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{ ((selectedHour % 12) || 12) | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">\r\n {{ selectedHour | number:'2.0' }}\r\n </div>\r\n </ng-template>\r\n\r\n <button (click)=\"decrementHour()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button (click)=\"incrementMinute()\"><i class=\"he he-chevron-up\"></i></button>\r\n <div class=\"time-value\">{{ selectedMinute | number:'2.0' }}</div>\r\n <button (click)=\"decrementMinute()\"><i class=\"he he-chevron-down\"></i></button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- day view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'day'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevMonth()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToMonthView()\">\r\n <div>{{ displayMonthName }}</div>\r\n <div>{{ displayYear }}</div>\r\n </div>\r\n <button class=\"calendar-arrow\" (click)=\"nextMonth()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"week-header\">\r\n <div>Sun</div>\r\n <div>Mon</div>\r\n <div>Tue</div>\r\n <div>Wed</div>\r\n <div>Thu</div>\r\n <div>Fri</div>\r\n <div>Sat</div>\r\n </div>\r\n <div class=\"days-grid\">\r\n <div class=\"day-cell\" *ngFor=\"let day of daysInMonth\" (click)=\"selectDay(day)\"\r\n [class.disabled]=\"day !== null && dayClassMap[day].disabled\"\r\n [class.selected]=\"day !== null && dayClassMap[day].selected\" [class.today]=\"\r\n day !== null &&\r\n displayYear === todayYear &&\r\n displayMonth === todayMonth &&\r\n day === todayDate\r\n \">\r\n {{day ? day : ''}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showTime\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementHour()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <ng-container *ngIf=\"hourFormat === '12'; else show24\">\r\n <div class=\"time-value\">\r\n {{\r\n selectedHour % 12 === 0\r\n ? 12\r\n : selectedHour % 12\r\n | number:'2.0' }}\r\n </div>\r\n </ng-container>\r\n <ng-template #show24>\r\n <div class=\"time-value\">{{ selectedHour | number:'2.0' }}</div>\r\n </ng-template>\r\n <button type=\"button\" (click)=\"decrementHour()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <div class=\"time-select\">\r\n <button type=\"button\" (click)=\"incrementMinute()\">\r\n <i class=\"he he-chevron-up\"></i>\r\n </button>\r\n <div class=\"time-value\">\r\n {{ selectedMinute < 10 ? '0' +selectedMinute : selectedMinute }} </div>\r\n <button type=\"button\" (click)=\"decrementMinute()\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </button>\r\n </div>\r\n <div class=\"ampm-toggle\" *ngIf=\"hourFormat === '12'\">\r\n <button type=\"button\" [class.active]=\"meridian === 'AM'\" (click)=\"setMeridian('AM')\">AM</button>\r\n <button type=\"button\" [class.active]=\"meridian === 'PM'\" (click)=\"setMeridian('PM')\">PM</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- month view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'month'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear - 1\"><i\r\n class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\" (click)=\"goToYearRangeView()\">{{ displayYear }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"displayYear = displayYear + 1\"><i\r\n class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"month-grid\">\r\n <div class=\"month-cell\" *ngFor=\"let m of months; index as i\" (click)=\"selectMonth(i)\">{{ m }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- year range view -->\r\n <ng-container *ngIf=\"!timeOnly && currentView === 'yearRange'\">\r\n <div class=\"header\">\r\n <button class=\"calendar-arrow\" (click)=\"prevYearRange()\"><i class=\"he he-chevron-left\"></i></button>\r\n <div class=\"title\">{{ yearRange[0] }} ~ {{ yearRange[yearRangeSize-1] }}</div>\r\n <button class=\"calendar-arrow\" (click)=\"nextYearRange()\"><i class=\"he he-chevron-right\"></i></button>\r\n </div>\r\n <div class=\"year-grid\">\r\n <div class=\"year-cell\" *ngFor=\"let y of yearRange\" (click)=\"selectYear(y)\">{{ y }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'checkbox-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './checkbox-control.component.html'\r\n})\r\nexport class CheckboxControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass!: string;\r\n @Input() type: 'boolean' | 'number' | 'string' = 'boolean';\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) { this._disabled = value; this.setDisabledState(value); }\r\n @Output() checkboxChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('checkboxContainer') checkboxContainer!: ElementRef;\r\n\r\n private _disabled = false;\r\n checkboxControl = new FormControl({ value: false, disabled: this._disabled });\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.checkboxControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n const converted = this.convertType(value);\r\n this.onChange(converted);\r\n this.onTouched();\r\n this.checkboxChange.emit(converted);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined && value !== null) {\r\n this.checkboxControl.setValue(this.convertType(value), { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n convertType(value: any): any {\r\n switch (this.type) {\r\n case 'number':\r\n return Number(value == 2 ? 0 : value == 0 ? 2 : value);\r\n case 'string':\r\n return String(value);\r\n default:\r\n return !!value;\r\n }\r\n }\r\n\r\n // events\r\n onFocus(event: FocusEvent) {\r\n const targetElement = event.target as Element;\r\n if (targetElement.matches(':focus-visible')) {\r\n this.checkboxContainer.nativeElement.classList.add('focused');\r\n }\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.checkboxContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.checkboxControl.disable();\r\n } else {\r\n this.checkboxControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"checkbox-container\" [ngClass]=\"[customClass, readonly ? 'readonly' : '']\" #checkboxContainer>\r\n <input type=\"checkbox\" [formControl]=\"checkboxControl\" (focus)=\"onFocus($event)\" (blur)=\"onBlur()\" [attr.readonly]=\"readonly ? true : null\" />\r\n <span class=\"checkmark\"></span>{{ title }}\r\n</label>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl, FormsModule } from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Component({\r\n selector: \"input-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./input-control.component.html\",\r\n styleUrls: [\"./input-control.component.scss\"],\r\n})\r\nexport class InputControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n @Input() type: | \"text\" | \"password\" | \"decimal\" | \"number\" | \"email\" | \"search\" = \"text\";\r\n @Input() title!: string;\r\n @Input() placeholder: string = \"\";\r\n @Input() customClass!: string;\r\n @Input() clearVal: boolean = true;\r\n @Input() required: boolean = false;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() search: boolean = false;\r\n @Input() price: boolean = false;\r\n @Input() maxlength!: number;\r\n @Input() ngModel!: string;\r\n @Input() advSearch: boolean = false;\r\n @Input() inputLoader: boolean = false;\r\n @Input() useReactiveForms: boolean = true;\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() inputChange = new EventEmitter<string>();\r\n @Output() ngModelChange: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() searchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() advSearchClicked: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n private _disabled = false;\r\n @Input() set disabled(isDisabled: boolean) {\r\n this._disabled = isDisabled;\r\n this.setDisabledState(isDisabled);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n private valueChangesSubscription!: Subscription;\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n isFocused: boolean = false;\r\n showPassword: boolean = false;\r\n inputControl = new FormControl(\"\");\r\n\r\n ngOnInit() {\r\n if (this.useReactiveForms) {\r\n this.valueChangesSubscription = this.inputControl.valueChanges.subscribe(\r\n (value) => {\r\n this.onChange(value);\r\n this.inputChange.emit(value ?? \"\");\r\n }\r\n );\r\n }\r\n }\r\n \r\n ngOnDestroy(): void {\r\n if (this.valueChangesSubscription) {\r\n this.valueChangesSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n // input type\r\n getInputType() {\r\n return this.type === \"password\" && this.showPassword ? \"text\" : this.type;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.useReactiveForms) {\r\n if (value !== undefined) {\r\n this.inputControl.setValue(value, {\r\n emitEvent: false,\r\n });\r\n if (value != '') {\r\n this.onChange(value);\r\n }\r\n }\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n } else {\r\n this.ngModel = value;\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n setTimeout(() => {\r\n this.isFocused = false;\r\n this.onTouched();\r\n if (!this.useReactiveForms) {\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }, 200);\r\n }\r\n onFocus() {\r\n this.isFocused = true;\r\n }\r\n onKeyPress(event: KeyboardEvent) {\r\n let allowedKeys: string[] = [];\r\n\r\n switch (this.type) {\r\n case \"number\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\r\n break;\r\n case \"decimal\":\r\n allowedKeys = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n if (this.search && event.key == \"Enter\") {\r\n this.onSearchClick();\r\n }\r\n if (\r\n (this.type == \"number\" || this.type == \"decimal\") &&\r\n !allowedKeys.includes(event.key)\r\n ) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.maxlength != null && (this.type == \"number\" || this.type == \"decimal\")) {\r\n const currentValue: string = this.inputControl.value ?? \"\";\r\n if (currentValue.length >= this.maxlength) {\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n if (this._disabled && this.useReactiveForms) {\r\n this.inputControl.disable({\r\n emitEvent: false,\r\n });\r\n } else if (this.useReactiveForms) {\r\n this.inputControl.enable({\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n\r\n // actions\r\n passwordVisible() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n onSearchClick(): void {\r\n this.searchClicked.emit();\r\n }\r\n onAdvSearchClick(): void {\r\n this.advSearchClicked.emit();\r\n }\r\n\r\n // clear\r\n showClearButton() {\r\n return (\r\n this.isFocused &&\r\n this.clearVal &&\r\n this.inputControl.value &&\r\n this.type !== \"password\"\r\n );\r\n }\r\n resetInput() {\r\n this.selectionCleared.emit();\r\n if (this.useReactiveForms) {\r\n this.inputControl.setValue(\"\");\r\n this.inputControl.markAsPristine({ onlySelf: true });\r\n\r\n } else {\r\n this.ngModel = \"\";\r\n this.ngModelChange.emit(this.ngModel);\r\n }\r\n }\r\n}\r\n","<div class=\"form-group input\" [ngClass]=\"customClass\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n @if (useReactiveForms) {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n } @else {\r\n <input [type]=\"getInputType()\" class=\"form-control\" [placeholder]=\"placeholder\" [(ngModel)]=\"ngModel\"\r\n [ngClass]=\"{ 'is-invalid': error }\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [readonly]=\"readonly\"\r\n (keypress)=\"onKeyPress($event)\" />\r\n }\r\n @if(deFocus){\r\n <span class=\"focus-border\"></span>\r\n }\r\n @if (!inputLoader && showClearButton()) {\r\n <label class=\"clear\" (click)=\"resetInput()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (price) {\r\n <label class=\"ls-price\">\r\n <i class=\"he he-rupee\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'search') {\r\n <label class=\"ls-search\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (advSearch) {\r\n <label class=\"rs-search\" (click)=\"onAdvSearchClick()\">\r\n <i class=\"he he-search-adv\"></i>\r\n </label>\r\n }\r\n\r\n @if (search) {\r\n <label class=\"rs-search\" (click)=\"onSearchClick()\">\r\n <i class=\"he he-search\"></i>\r\n </label>\r\n }\r\n\r\n @if (type === 'password' && !disabled) {\r\n <label class=\"toggle-eye\" (click)=\"passwordVisible()\">\r\n <i class=\"he\" [ngClass]=\"showPassword ? 'he-eye-off' : 'he-eye'\"></i>\r\n </label>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n inject,\r\n DestroyRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[clickOutside]',\r\n standalone: true,\r\n})\r\nexport class ClickOutsideDirective {\r\n @Output() clickOutside = new EventEmitter<MouseEvent>();\r\n\r\n private host = inject(ElementRef);\r\n private document = inject(DOCUMENT);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n fromEvent<MouseEvent>(this.document, 'click')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((event: MouseEvent) => {\r\n const clickedInside = this.host.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.clickOutside.emit(event);\r\n }\r\n });\r\n }\r\n}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport {\r\n Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ViewChild,\r\n ElementRef, HostListener, SimpleChanges, ChangeDetectorRef\r\n} from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"multiselect-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiselectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./multiselect-control.component.html\",\r\n styleUrls: [\"./multiselect-control.component.scss\"],\r\n})\r\nexport class MultiselectControl\r\n implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() title!: string;\r\n @Input() selectedItems: any[] = [];\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass!: string;\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() optionValueProperty: string = \"id\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() showSearch: boolean = false;\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Output() optionsSelected = new EventEmitter<any[]>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n private _options: any[] = [];\r\n @Input()\r\n public set options(arr: any[]) {\r\n this._options = Array.isArray(arr) ? arr : [];\r\n this.filteredOptions = [...this._options];\r\n\r\n // If we previously received an array of primitive IDs, attempt to map them now that options have arrived\r\n if (this._isPrimitivePatch && this._pendingPrimitiveValues.length > 0) {\r\n this._mapPrimitivesToObjects();\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n }\r\n public get options(): any[] {\r\n return this._options;\r\n }\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n private _isPrimitivePatch: boolean = false;\r\n private _pendingPrimitiveValues: any[] = [];\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n isDropdownOpen: boolean = false;\r\n selectAllChecked: boolean = false;\r\n keySearch: string = \"\";\r\n onSearch = new Subject<string>();\r\n selectedItemList: string = \"\";\r\n highlightedIndex: number | null = null;\r\n\r\n private dropdownInitialized = false;\r\n private popperInstance!: PopperInstance;\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n // Subscribe to search‐term changes, debounce, then filter\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this._applyFilter(searchText);\r\n this._recomputeSelectAllState();\r\n });\r\n\r\n // Initialize filteredOptions to match all options\r\n this.filteredOptions = [...this.options];\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this._createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n if (this.popperInstance) {\r\n this.popperInstance.destroy();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n // When the parent replaces “options,” we reapply any filtering and “select all” logic\r\n this.filteredOptions = [...this.options];\r\n this._recomputeSelectAllState();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n // If parent gave us something that is not an array, clear selection\r\n if (!Array.isArray(value)) {\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n\r\n // CASE A: array of primitive IDs, e.g. [12,17]\r\n if (\r\n value.length > 0 &&\r\n (typeof value[0] === \"string\" || typeof value[0] === \"number\")\r\n ) {\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = [...value];\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE B: array of full objects (with `id` or whatever `optionValueProperty` is)\r\n if (\r\n value.length > 0 &&\r\n typeof value[0] === \"object\" &&\r\n value[0][this.optionValueProperty] != null\r\n ) {\r\n // Convert to an array of IDs, then treat exactly like CASE A\r\n const idArray = (value as any[]).map(\r\n (obj) => obj[this.optionValueProperty]\r\n );\r\n this._isPrimitivePatch = true;\r\n this._pendingPrimitiveValues = idArray;\r\n this._mapPrimitivesToObjects();\r\n this._recomputeSelectAllState();\r\n return;\r\n }\r\n\r\n // CASE C: maybe parent passed the exact same object references that already exist in `options`\r\n // In that case, we can just use them directly.\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n this.selectedItems = [...value];\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this._recomputeSelectAllState();\r\n }\r\n\r\n private _mapPrimitivesToObjects() {\r\n if (\r\n !this._isPrimitivePatch ||\r\n this._pendingPrimitiveValues.length === 0 ||\r\n this._options.length === 0\r\n ) {\r\n return;\r\n }\r\n\r\n // Find matching option‐objects whose ID property is in the pending list\r\n const matched = this._options.filter((opt) =>\r\n this._pendingPrimitiveValues.includes(opt[this.optionValueProperty])\r\n );\r\n\r\n this.selectedItems = matched;\r\n this.selectedItemList = matched\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Notify “onChange” with the full‐object selection\r\n this.onChange(this.selectedItems);\r\n\r\n this._isPrimitivePatch = false;\r\n this._pendingPrimitiveValues = [];\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n isSelected(option: any): boolean {\r\n return (\r\n Array.isArray(this.selectedItems) && this.selectedItems.includes(option)\r\n );\r\n }\r\n onBlur(event: FocusEvent) {\r\n this.blurEvent.emit();\r\n // const target = event.relatedTarget as HTMLElement;\r\n // if (\r\n // target &&\r\n // (target.closest(\".option-list\") || target.closest(\".list-filter\"))\r\n // ) {\r\n // return;\r\n // }\r\n this.onTouched();\r\n // setTimeout(() => {\r\n // this.isDropdownOpen = false;\r\n // }, 100);\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (isDisabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // search box\r\n handleInput(event: Event) {\r\n const txt = (event.target as HTMLInputElement).value;\r\n this.onSearch.next(txt);\r\n }\r\n private _applyFilter(value: string) {\r\n const lower = value.toLowerCase();\r\n this.filteredOptions = this._options\r\n .filter((opt) =>\r\n opt[this.optionDisplayProperty]?.toLowerCase().includes(lower)\r\n )\r\n .sort((a, b) => {\r\n const aIndex = a[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n const bIndex = b[this.optionDisplayProperty]\r\n .toLowerCase()\r\n .indexOf(lower);\r\n return aIndex - bIndex;\r\n });\r\n\r\n // If an item was previously selected but is no longer in filteredOptions, remove it temporarily\r\n this.selectedItems = this.selectedItems.filter((item) =>\r\n this.filteredOptions.includes(item)\r\n );\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n if (this.filteredOptions.length > 0) {\r\n this.highlightedIndex = this._options.indexOf(this.filteredOptions[0]);\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n\r\n this._recomputeSelectAllState();\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n // checkbox events\r\n private _recomputeSelectAllState() {\r\n if (!this.filteredOptions || this.filteredOptions.length === 0) {\r\n this.selectAllChecked = false;\r\n return;\r\n }\r\n this.selectAllChecked = this.filteredOptions.every((opt) =>\r\n this.selectedItems.includes(opt)\r\n );\r\n }\r\n onSelectAllChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.selectAllChecked = input.checked;\r\n this._toggleSelectAll();\r\n }\r\n private _toggleSelectAll() {\r\n if (this.selectAllChecked) {\r\n // Add all currently filtered options to selection\r\n this.selectedItems = Array.from(\r\n new Set([...this.selectedItems, ...this.filteredOptions])\r\n );\r\n } else {\r\n // Remove all filtered options from selection\r\n this.selectedItems = this.selectedItems.filter(\r\n (item) => !this.filteredOptions.includes(item)\r\n );\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n this.onChange(this.selectedItems);\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n removeSelectedOption(option: any) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n toggleCheckbox(option: any) {\r\n if (this.isSelected(option)) {\r\n this.selectedItems = this.selectedItems.filter((item) => item !== option);\r\n } else {\r\n this.selectedItems = [...this.selectedItems, option];\r\n }\r\n\r\n this.selectedItemList = this.selectedItems\r\n .map((item) => item[this.optionDisplayProperty])\r\n .join(\", \");\r\n\r\n // Update “select all” checkbox\r\n this._recomputeSelectAllState();\r\n\r\n // Notify form that selection changed\r\n this.onChange(this.selectedItems);\r\n this.onTouched();\r\n this.optionsSelected.emit(this.selectedItems);\r\n }\r\n\r\n // Keyboard navigation inside the dropdown\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this._highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this._highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (\r\n this.highlightedIndex !== null &&\r\n this.highlightedIndex < this.filteredOptions.length\r\n ) {\r\n this.toggleCheckbox(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n case \"Tab\":\r\n this.isDropdownOpen = false;\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n @HostListener(\"window:keydown\", [\"$event\"])\r\n handleWindowKeydown(event: KeyboardEvent) {\r\n if (event.key === \"Tab\") {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n private _highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex!++;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex!--;\r\n }\r\n this._scrollToHighlighted();\r\n }\r\n private _scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (!container) return;\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n (highlighted as HTMLElement).scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, 0);\r\n }\r\n\r\n // popper\r\n private _createPopperInstance() {\r\n if (!this.dropdown || !this.input) return;\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n\r\n // toggle, reset, close and clear\r\n toggleDropdown() {\r\n if (this.inputControl.disabled) return;\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen) {\r\n this.filteredOptions = [...this.options];\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n selectListOutsideClick() {\r\n this.isDropdownOpen = false;\r\n }\r\n resetSelection() {\r\n this.selectedItems = [];\r\n this.selectedItemList = \"\";\r\n this.onChange([]);\r\n this.onTouched();\r\n this.isDropdownOpen = false;\r\n this.selectAllChecked = false;\r\n this.selectionCleared.emit();\r\n }\r\n onCloseDropdown(): void {\r\n this.isDropdownOpen = false;\r\n this._recomputeSelectAllState();\r\n }\r\n}\r\n","<div class=\"form-group multi-select\" [ngClass]=\"customClass\" (clickOutside)=\"selectListOutsideClick()\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" placeholder=\"{{ placeholder }}\" [formControl]=\"inputControl\"\r\n [ngClass]=\"{'is-invalid': error}\" (blur)=\"onBlur($event)\" (click)=\"toggleDropdown()\" readonly\r\n [value]=\"selectedItemList\" (keydown)=\"onKeyDown($event)\" [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && clearVal && selectedItems.length > 0) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label> }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n @if (showSearch && filteredOptions.length > 5) {\r\n <div class=\"list-filter\">\r\n <div>\r\n <label class=\"checkbox-container select-all\">\r\n <input type=\"checkbox\" [checked]=\"selectAllChecked\" (change)=\"onSelectAllChange($event)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"form-group\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search...\" (input)=\"handleInput($event) \"\r\n (keydown)=\"onKeyDown($event)\" />\r\n </div>\r\n <div class=\"ms-close\">\r\n <button type=\"button\" class=\"icon-button\">\r\n <a (click)=\"onCloseDropdown()\"><i class=\"he he-close\"></i></a>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"list-wrap\">\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let i = $index) {\r\n <div class=\"list-item\" (change)=\"toggleCheckbox(option)\" [ngClass]=\"{ 'highlighted': i === highlightedIndex }\">\r\n <label class=\"checkbox-container multi-select\">\r\n <input type=\"checkbox\" [checked]=\"isSelected(option)\" tabindex=\"-1\" />\r\n <span class=\"checkmark\"></span>\r\n {{ option[optionDisplayProperty] }}\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (filteredOptions.length === 0) {\r\n <div class=\"no-results\">No results found</div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, OnDestroy, ElementRef, ViewChild, SimpleChanges } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from \"@angular/forms\";\r\nimport { debounceTime, distinctUntilChanged, Subject, Subscription } from \"rxjs\";\r\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { ClickOutsideDirective } from \"../../../directives/clickoutside.directive\";\r\n\r\n@Component({\r\n selector: \"select-control\",\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ClickOutsideDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: \"./select-control.component.html\",\r\n styleUrls: [\"./select-control.component.scss\"],\r\n})\r\nexport class SelectControl implements ControlValueAccessor, OnInit, OnDestroy {\r\n\r\n private subscription: Subscription = new Subscription();\r\n\r\n @Input() optionDisplayProperty: string = \"displayname\";\r\n @Input() required: boolean = false;\r\n @Input() placeholder!: string;\r\n @Input() customClass!: string;\r\n @Input() clearVal: boolean = true;\r\n @Input() deFocus: boolean = true;\r\n @Input() error: boolean = false;\r\n @Input() errorMessage: string = \"\";\r\n @Input() autocomplete: string = \"\";\r\n @Input() inputLoader: boolean = false;\r\n @Input() isAddNewItem: boolean = false;\r\n @Output() optionSelected = new EventEmitter<any>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() addNewItemClicked: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n @Output() optionPatched = new EventEmitter<any>();\r\n\r\n @Input() title!: string;\r\n private _options: any[] = [];\r\n @Input()\r\n set options(opts: any[]) {\r\n this._options = opts;\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n this.processValueBuffer();\r\n }\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this.inputControl) {\r\n if (value) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n @ViewChild(\"dropdown\", { static: false }) dropdown!: ElementRef;\r\n @ViewChild(\"input\", { static: false }) input!: ElementRef;\r\n\r\n filteredOptions: any[] = [];\r\n keySearch: string = \"\";\r\n selectedItem: any = null;\r\n onSearch = new Subject<string>();\r\n inputControl: FormControl = new FormControl({ value: \"\", disabled: false });\r\n isDropdownOpen = false;\r\n highlightedIndex: number | null = null;\r\n\r\n private onChange: (value: any) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n private valueBuffer: any = null;\r\n private _disabled: boolean = false;\r\n private dropdownInitialized = false;\r\n\r\n private popperInstance!: PopperInstance;\r\n\r\n ngOnInit() {\r\n this.subscription = this.onSearch\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((searchText) => {\r\n this.focusOption(searchText);\r\n this.keySearch = \"\";\r\n });\r\n\r\n this.filteredOptions = this._options;\r\n\r\n // Sync the input control value with the selected item\r\n this.inputControl.valueChanges.subscribe((value) => {\r\n this.onChange(value);\r\n });\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.isDropdownOpen && !this.dropdownInitialized) {\r\n this.createPopperInstance();\r\n this.dropdownInitialized = true;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes[\"options\"]) {\r\n this.filteredOptions = [...this._options];\r\n this.highlightSelectedItem();\r\n }\r\n if (changes[\"disabled\"]) {\r\n this.disabled = changes[\"disabled\"].currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.inputControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n this.valueBuffer = value;\r\n this.processValueBuffer();\r\n }\r\n\r\n processValueBuffer(): void {\r\n if (\r\n this.valueBuffer !== null &&\r\n this._options &&\r\n this._options.length > 0\r\n ) {\r\n // Try to match selected item by ID\r\n const matchedItem = this._options.find(\r\n (option) => option.id === this.valueBuffer\r\n );\r\n\r\n if (matchedItem) {\r\n this.selectedItem = matchedItem;\r\n const displayValue = matchedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.filteredOptions = [...this._options];\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionPatched.emit(this.selectedItem);\r\n } else {\r\n // If not found, don't clear the field automatically\r\n // You may choose to keep it or clear it. Here we clear it.\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n } else if (this.valueBuffer === null) {\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 300);\r\n }\r\n onKeyDown(event: KeyboardEvent) {\r\n const isAlphabetOrNumberKey = /^[a-zA-Z0-9]$/.test(event.key);\r\n if (this.isDropdownOpen) {\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.highlightNext();\r\n event.preventDefault();\r\n break;\r\n case \"ArrowUp\":\r\n this.highlightPrevious();\r\n event.preventDefault();\r\n break;\r\n case \"Enter\":\r\n if (this.highlightedIndex !== null) {\r\n this.selectOption(this.filteredOptions[this.highlightedIndex]);\r\n }\r\n event.preventDefault();\r\n break;\r\n case \"Escape\":\r\n this.isDropdownOpen = false;\r\n break;\r\n default:\r\n if (isAlphabetOrNumberKey) {\r\n this.keySearch += event.key.toString();\r\n if (this.keySearch !== \"\") {\r\n this.onSearch.next(this.keySearch);\r\n }\r\n }\r\n break;\r\n }\r\n } else if (event.key === \" \") {\r\n this.toggleDropdown();\r\n event.preventDefault();\r\n }\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (this.disabled) {\r\n this.inputControl.disable({ emitEvent: false });\r\n } else {\r\n this.inputControl.enable({ emitEvent: false });\r\n }\r\n }\r\n selectOption(option: any) {\r\n if (this.selectedItem !== option) {\r\n this.selectedItem = option;\r\n this.isDropdownOpen = false;\r\n const displayValue = this.selectedItem[this.optionDisplayProperty];\r\n this.inputControl.setValue(displayValue, { emitEvent: false });\r\n this.onChange(this.selectedItem.id);\r\n this.onTouched();\r\n this.inputControl.markAsDirty();\r\n this.optionSelected.emit(this.selectedItem);\r\n }\r\n }\r\n\r\n // highlight\r\n highlightSelectedItem() {\r\n const selectedIndex = this.filteredOptions.findIndex(\r\n (option) => option === this.selectedItem\r\n );\r\n if (selectedIndex !== -1) {\r\n this.highlightedIndex = selectedIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n highlightNext() {\r\n if (\r\n this.highlightedIndex === null ||\r\n this.highlightedIndex === this.filteredOptions.length - 1\r\n ) {\r\n this.highlightedIndex = 0;\r\n } else {\r\n this.highlightedIndex++;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n highlightPrevious() {\r\n if (this.highlightedIndex === null || this.highlightedIndex === 0) {\r\n this.highlightedIndex = this.filteredOptions.length - 1;\r\n } else {\r\n this.highlightedIndex--;\r\n }\r\n this.scrollToHighlighted();\r\n }\r\n focusOption(value: string) {\r\n const filterValue = value.toLowerCase();\r\n let foundIndex = this._options.findIndex(\r\n (option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase() === filterValue\r\n );\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]\r\n ?.toLowerCase()\r\n .startsWith(filterValue)\r\n );\r\n }\r\n if (foundIndex === -1) {\r\n foundIndex = this._options.findIndex((option) =>\r\n option[this.optionDisplayProperty]?.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n\r\n if (foundIndex !== -1) {\r\n this.highlightedIndex = foundIndex;\r\n this.scrollToHighlighted();\r\n } else {\r\n this.highlightedIndex = null;\r\n }\r\n }\r\n scrollToHighlighted() {\r\n setTimeout(() => {\r\n const container = document.querySelector(\".option-list\");\r\n if (container) {\r\n const highlighted = container.querySelector(\".highlighted\");\r\n if (highlighted) {\r\n highlighted.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n // actions\r\n onAddNewItemClick(): void {\r\n this.addNewItemClicked.emit();\r\n }\r\n\r\n // popper\r\n createPopperInstance() {\r\n if (this.dropdown) {\r\n this.popperInstance = createPopper(\r\n this.input.nativeElement,\r\n this.dropdown.nativeElement,\r\n {\r\n placement: \"bottom-start\",\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, 1],\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top-start\", \"bottom-start\"],\r\n },\r\n },\r\n ],\r\n }\r\n );\r\n }\r\n }\r\n\r\n // toggle, open, hide, reset and clear\r\n toggleDropdown() {\r\n if (!this.inputControl.disabled) {\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n this.dropdownInitialized = false;\r\n if (this.isDropdownOpen && this.selectedItem) {\r\n this.highlightSelectedItem();\r\n }\r\n }\r\n }\r\n openDropdown(event: KeyboardEvent) {\r\n if (event.ctrlKey && event.key === \"Enter\") {\r\n this.toggleDropdown();\r\n }\r\n }\r\n selectListOutsideClick(e: Event) {\r\n this.isDropdownOpen = false;\r\n }\r\n hideDropdown() {\r\n setTimeout(() => {\r\n this.isDropdownOpen = false;\r\n }, 200);\r\n }\r\n resetSelection() {\r\n this.selectionCleared.emit();\r\n this.selectedItem = null;\r\n this.inputControl.setValue(\"\", { emitEvent: false });\r\n this.onChange(null);\r\n this.onTouched();\r\n this.valueBuffer = null;\r\n this.isDropdownOpen = false;\r\n }\r\n}\r\n","<div class=\"form-group select\" [ngClass]=\"customClass\" (clickOutside)=\"selectListOutsideClick($event)\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{ 'required': required }\">{{ title }}</label>\r\n }\r\n\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"placeholder ? placeholder : ''\"\r\n [formControl]=\"inputControl\" [ngClass]=\"{ 'is-invalid': error }\" (blur)=\"onBlur()\" (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\" readonly [attr.autocomplete]=\"autocomplete || null\" />\r\n\r\n @if (deFocus) {\r\n <span class=\"focus-border\"></span>\r\n }\r\n\r\n @if (!inputLoader && isDropdownOpen && selectedItem && clearVal) {\r\n <label class=\"clear\" (click)=\"resetSelection()\">\r\n <i class=\"he he-close\"></i>\r\n </label> }\r\n @if (!inputLoader) {\r\n <label class=\"arrow\">\r\n <i class=\"he he-chevron-down\"></i>\r\n </label>\r\n }\r\n\r\n @if (isDropdownOpen) {\r\n <div #dropdown class=\"option-list\">\r\n <div class=\"no-results\" *ngIf=\"filteredOptions.length === 0\">\r\n <div>No results found</div>\r\n <div *ngIf=\"isAddNewItem\" (click)=\"onAddNewItemClick()\" class=\"btn-new\">Add New Item</div>\r\n </div>\r\n\r\n @for (option of filteredOptions; track option[optionDisplayProperty]; let idx = $index) {\r\n <div class=\"list-item\" [ngClass]=\"{\r\n 'active': option === selectedItem,\r\n 'highlighted': idx === highlightedIndex\r\n }\" (click)=\"selectOption(option)\">\r\n @if (option.countryCode) {\r\n <img src=\"https://flagcdn.com/w80/{{ option.countryCode }}.png\" width=\"20\" alt=\"{{ option.countryCode }} flag\" loading=\"lazy\" />\r\n }\r\n {{ option[optionDisplayProperty] }}\r\n </div>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n @if (inputLoader) {\r\n <label class=\"loader input-loader\"></label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","import { Component, Input, Output, EventEmitter, forwardRef, Renderer2, ElementRef, ViewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'switch-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SwitchControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './switch-control.component.html',\r\n styleUrls: ['./switch-control.component.scss']\r\n})\r\nexport class SwitchControl implements ControlValueAccessor {\r\n\r\n @Input() title!: string;\r\n @Input() customClass!: string;\r\n @Input() readonly: boolean = false;\r\n @Input() set disabled(value: boolean) {\r\n this._disabled = value;\r\n this.setDisabledState(value);\r\n }\r\n @Input()\r\n set checked(value: boolean) {\r\n this._checked = value;\r\n this.switchControl.setValue(value, { emitEvent: false }); // set without emitting\r\n }\r\n @Output() switchChange = new EventEmitter<boolean>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n @ViewChild('switchContainer') switchContainer!: ElementRef;\r\n\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n\r\n private _checked: boolean = false;\r\n private _disabled = false;\r\n switchControl = new FormControl<boolean>({ value: false, disabled: this._disabled });\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef\r\n ) {\r\n this.switchControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value ?? false);\r\n this.onTouched();\r\n this.switchChange.emit(value ?? false);\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.switchControl.setValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onFocus() {\r\n this.switchContainer.nativeElement.classList.add('focused');\r\n }\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n this.switchContainer.nativeElement.classList.remove('focused');\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\r\n if (isDisabled) {\r\n this.switchControl.disable();\r\n } else {\r\n this.switchControl.enable();\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"switch-container\" [ngClass]=\"[customClass, readonly ? 'readonly' : '']\" #switchContainer>\r\n <input type=\"checkbox\" [formControl]=\"switchControl\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n <span class=\"switch-slider\"></span>\r\n</label>","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit, Input, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\n\r\ninterface HistoryState {\r\n html: string;\r\n selection?: SelectionRange;\r\n}\r\n\r\n// To restore selection, we need to store something about it. This is complex.\r\n// For simplicity, we only store HTML. True undo/redo of selection positions is non-trivial.\r\ninterface SelectionRange {\r\n startContainerPath: number[];\r\n startOffset: number;\r\n endContainerPath: number[];\r\n endOffset: number;\r\n}\r\n\r\n@Component({\r\n selector: 'app-text-editor',\r\n imports:\r\n [CommonModule,\r\n \r\n ],\r\n templateUrl: './text-editor.component.html',\r\n styleUrl: './text-editor.component.scss'\r\n})\r\nexport class TextEditor implements ControlValueAccessor, OnInit, AfterViewInit {\r\n\r\n @Input() header: boolean = true;\r\n @Input() media: boolean = true;\r\n @Input() link: boolean = true;\r\n @Input() placeholder: string = 'Type here...';\r\n \r\n @ViewChild('editor') editorRef!: ElementRef<HTMLDivElement>;\r\n\r\n private onChange: (value: string) => void = () => { };\r\n private onTouch: () => void = () => { };\r\n private undoStack: HistoryState[] = [];\r\n private redoStack: HistoryState[] = [];\r\n\r\n ngOnInit() { }\r\n\r\n ngAfterViewInit() {\r\n this.saveState();\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.editorRef.nativeElement.innerHTML = value || '';\r\n this.saveState();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n\r\n onInput() {\r\n const html = this.editorRef.nativeElement.innerHTML;\r\n this.onChange(html);\r\n this.saveState();\r\n }\r\n\r\n // events\r\n onTouched() {\r\n this.onTouch();\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.editorRef.nativeElement.contentEditable = (!isDisabled).toString();\r\n }\r\n\r\n // ---- Selection & Range Utilities ----\r\n private getSelectionRange(): Range | null {\r\n const selection = window.getSelection();\r\n if (selection && selection.rangeCount > 0) {\r\n return selection.getRangeAt(0);\r\n }\r\n return null;\r\n }\r\n\r\n private wrapSelection(htmlTag: string, style?: string) {\r\n const range = this.getSelectionRange();\r\n if (!range || range.collapsed) return; // no selection\r\n const selectedText = range.extractContents();\r\n\r\n const el = document.createElement(htmlTag);\r\n if (style) {\r\n el.setAttribute('style', style);\r\n }\r\n el.appendChild(selectedText);\r\n range.insertNode(el);\r\n this.mergeAdjacentSimilarElements(el);\r\n this.onInput();\r\n }\r\n\r\n // Merges adjacent spans with the same style to avoid clutter\r\n private mergeAdjacentSimilarElements(el: HTMLElement) {\r\n const parent = el.parentElement;\r\n if (!parent) return;\r\n\r\n const siblings = Array.from(parent.childNodes);\r\n for (let i = 0; i < siblings.length - 1; i++) {\r\n const current = siblings[i] as HTMLElement;\r\n const next = siblings[i + 1] as HTMLElement;\r\n if (current.nodeType === 1 && next?.nodeType === 1) {\r\n if (current.tagName === next.tagName && current.getAttribute('style') === next.getAttribute('style')) {\r\n // merge them\r\n while (next.firstChild) {\r\n current.appendChild(next.firstChild);\r\n }\r\n next.remove();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ---- Inline Formatting ----\r\n // applyInlineStyle() toggles inline styles by wrapping selection in a styled span\r\n applyInlineStyle(styleType: 'bold' | 'italic' | 'underline') {\r\n let style = '';\r\n if (styleType === 'bold') style = 'font-weight:bold;';\r\n else if (styleType === 'italic') style = 'font-style:italic;';\r\n else if (styleType === 'underline') style = 'text-decoration:underline;';\r\n\r\n this.wrapSelection('span', style);\r\n }\r\n\r\n applyColor(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n const color = input.value;\r\n // Now `color` is a string and `input` is never null\r\n this.wrapSelection('span', `color:${color};`);\r\n }\r\n\r\n applyHighlight(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n const color = input.value;\r\n this.wrapSelection('span', `background-color:${color};`);\r\n }\r\n\r\n // ---- Block Formatting (Headings, Paragraph) ----\r\n // Replaces the parent block element containing selection with a new block type\r\n applyBlockFormat(blockTag: 'h1' | 'h2' | 'p') {\r\n const range = this.getSelectionRange();\r\n if (!range) return;\r\n\r\n // Find the nearest block element\r\n let block = this.findBlockAncestor(range.commonAncestorContainer);\r\n if (!block) {\r\n // If no block found, wrap the selection in a block\r\n const wrapper = document.createElement(blockTag);\r\n wrapper.appendChild(range.extractContents());\r\n range.insertNode(wrapper);\r\n } else {\r\n // Replace the block with a new block type\r\n const newBlock = document.createElement(blockTag);\r\n // Move children\r\n while (block.firstChild) {\r\n newBlock.appendChild(block.firstChild);\r\n }\r\n block.replaceWith(newBlock);\r\n }\r\n this.onInput();\r\n }\r\n\r\n private findBlockAncestor(node: Node): HTMLElement | null {\r\n while (node && node !== this.editorRef.nativeElement) {\r\n if (this.isBlockElement(node)) {\r\n return node as HTMLElement;\r\n }\r\n node = node.parentNode!;\r\n }\r\n return null;\r\n }\r\n\r\n private isBlockElement(node: Node): boolean {\r\n if (node.nodeType !== 1) return false;\r\n const display = window.getComputedStyle(node as HTMLElement).display;\r\n return display === 'block' || display === 'list-item';\r\n }\r\n\r\n // ---- Lists ----\r\n // Convert selected lines into a list\r\n applyList(listType: 'ul' | 'ol') {\r\n const range = this.getSelectionRange();\r\n if (!range) return;\r\n const commonBlock = this.findBlockAncestor(range.commonAncestorContainer);\r\n\r\n // Get the text in the selection\r\n const content = range.extractContents();\r\n const lines = this.splitContentByLine(content);\r\n\r\n const listEl = document.createElement(listType);\r\n for (const line of lines) {\r\n const li = document.createElement('li');\r\n li.appendChild(line);\r\n listEl.appendChild(li);\r\n }\r\n\r\n if (commonBlock) {\r\n // Insert the list right where the block was or at the selection\r\n range.insertNode(listEl);\r\n } else {\r\n // If no common block, just insert at current position\r\n range.insertNode(listEl);\r\n }\r\n this.onInput();\r\n }\r\n\r\n private splitContentByLine(fragment: DocumentFragment): DocumentFragment[] {\r\n // A very naive approach: split by <br> or block elements.\r\n // For advanced logic, detect line breaks more thoroughly.\r\n const lines: DocumentFragment[] = [];\r\n let currentFrag = document.createDocumentFragment();\r\n\r\n Array.from(fragment.childNodes).forEach((node) => {\r\n if (node.nodeName === 'BR' || this.isBlockElement(node)) {\r\n // This node signifies a new line\r\n lines.push(currentFrag);\r\n currentFrag = document.createDocumentFragment();\r\n if (this.isBlockElement(node)) {\r\n while (node.firstChild) {\r\n currentFrag.appendChild(node.firstChild);\r\n }\r\n lines.push(currentFrag);\r\n currentFrag = document.createDocumentFragment();\r\n }\r\n } else {\r\n currentFrag.appendChild(node);\r\n }\r\n });\r\n\r\n if (currentFrag.childNodes.length > 0) {\r\n lines.push(currentFrag);\r\n }\r\n return lines;\r\n }\r\n\r\n // ---- Links ----\r\n createLink() {\r\n const url = prompt('Enter URL', 'https://');\r\n if (!url) return;\r\n const range = this.getSelectionRange();\r\n if (!range || range.collapsed) return;\r\n const selectedContent = range.extractContents();\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.appendChild(selectedContent);\r\n range.insertNode(a);\r\n this.onInput();\r\n }\r\n\r\n // ---- Images ----\r\n insertImage() {\r\n const url = prompt('Enter image URL:');\r\n if (!url) return;\r\n const range = this.getSelectionRange();\r\n if (!range) return;\r\n const img = document.createElement('img');\r\n img.src = url;\r\n range.insertNode(img);\r\n this.onInput();\r\n }\r\n\r\n // ---- Alignment ----\r\n setAlignment(alignment: 'left' | 'center' | 'right' | 'justify') {\r\n // Find the block and set text-align\r\n const range = this.getSelectionRange();\r\n if (!range) return;\r\n const block = this.findBlockAncestor(range.commonAncestorContainer);\r\n if (block) {\r\n block.style.textAlign = alignment;\r\n this.onInput();\r\n }\r\n }\r\n\r\n // ---- Clear Formatting ----\r\n clearFormatting() {\r\n const html = this.editorRef.nativeElement.innerText;\r\n // Convert innerText to a plain <p> block for simplicity\r\n this.editorRef.nativeElement.innerHTML = `<p>${html}</p>`;\r\n this.onInput();\r\n }\r\n\r\n // ---- Undo/Redo ----\r\n saveState() {\r\n const currentHtml = this.editorRef.nativeElement.innerHTML;\r\n if (this.undoStack.length === 0 || this.undoStack[this.undoStack.length - 1].html !== currentHtml) {\r\n this.undoStack.push({ html: currentHtml });\r\n this.redoStack = []; // clear redo on new input\r\n }\r\n }\r\n\r\n // clear options\r\n undo() {\r\n if (this.undoStack.length > 1) {\r\n const current = this.undoStack.pop()!;\r\n this.redoStack.push(current);\r\n const previous = this.undoStack[this.undoStack.length - 1];\r\n this.editorRef.nativeElement.innerHTML = previous.html;\r\n this.onChange(previous.html);\r\n }\r\n }\r\n redo() {\r\n if (this.redoStack.length > 0) {\r\n const state = this.redoStack.pop()!;\r\n this.undoStack.push(state);\r\n this.editorRef.nativeElement.innerHTML = state.html;\r\n this.onChange(state.html);\r\n }\r\n }\r\n}\r\n","<div class=\"text-editor\">\r\n <div class=\"toolbar\">\r\n <div class=\"toolbar-items\">\r\n <button type=\"button\" (click)=\"applyInlineStyle('bold')\" tooltip=\"Bold\">\r\n <i class=\"he he-bold\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"applyInlineStyle('italic')\" tooltip=\"italic\">\r\n <i class=\"he he-italics\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"applyInlineStyle('underline')\" tooltip=\"Underline\">\r\n <i class=\"he he-underline\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\" *ngIf=\"header\">\r\n <button type=\"button\" (click)=\"applyBlockFormat('h1')\" tooltip=\"Header 1\">\r\n <i class=\"he he-heading-1\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"applyBlockFormat('h2')\" tooltip=\"Header 2\">\r\n <i class=\"he he-heading-2\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items more-gap\">\r\n <div class=\"input-wrap\" tooltip=\"Text Color\">\r\n <i class=\"he he-text-drop\"></i>\r\n <input type=\"color\" (change)=\"applyColor($event)\" />\r\n </div>\r\n <div class=\"input-wrap\" tooltip=\"Background Color\">\r\n <i class=\"he he-background-drop\"></i>\r\n <input type=\"color\" (change)=\"applyHighlight($event)\" />\r\n </div>\r\n </div>\r\n <div class=\"toolbar-items\">\r\n <button type=\"button\" (click)=\"setAlignment('left')\" tooltip=\"Justify Left\">\r\n <i class=\"he he-left-align\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"setAlignment('center')\" tooltip=\"Justify Center\">\r\n <i class=\"he he-center-align\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"setAlignment('right')\" tooltip=\"Justify Right\">\r\n <i class=\"he he-right-align\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"setAlignment('justify')\" tooltip=\"Justify Full\">\r\n <i class=\"he he-justify\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\">\r\n <button type=\"button\" tooltip=\"Indent\">\r\n <i class=\"he he-text-indent-left\"></i>\r\n </button>\r\n <button type=\"button\" tooltip=\"Outdent\">\r\n <i class=\"he he-text-indent-right\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\" *ngIf=\"media\">\r\n <button type=\"button\" (click)=\"applyList('ul')\" tooltip=\"Unordered list\">\r\n <i class=\"he he-unordered-list\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"applyList('ol')\" tooltip=\"Ordered list\">\r\n <i class=\"he he-ordered-list\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\" *ngIf=\"link\">\r\n <button type=\"button\" (click)=\"createLink()\" tooltip=\"Link\">\r\n <i class=\"he he-link\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"insertImage()\" tooltip=\"Image\">\r\n <i class=\"he he-image\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\">\r\n <button type=\"button\" (click)=\"undo()\" tooltip=\"Undo\">\r\n <i class=\"he he-undo\"></i>\r\n </button>\r\n <button type=\"button\" (click)=\"redo()\" tooltip=\"Redo\">\r\n <i class=\"he he-redo\"></i>\r\n </button>\r\n </div>\r\n <div class=\"toolbar-items\">\r\n <button type=\"button\" (click)=\"clearFormatting()\" tooltip=\"Clear Formatting\">\r\n <i class=\"he he-text-clear-format\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div #editor class=\"editor-content\" contenteditable=\"true\" (input)=\"onInput()\" (blur)=\"onTouched()\"\r\n [attr.data-placeholder]=\"placeholder\">\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, ReactiveFormsModule, FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'textarea-control',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextareaControl),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './textarea-control.component.html',\r\n styleUrl: './textarea-control.component.scss'\r\n})\r\nexport class TextareaControl {\r\n @Input() title!: string;\r\n @Input() placeholder: string = '';\r\n @Input() customClass!: string;\r\n @Input() clearVal: boolean = true;\r\n @Input() disabled: boolean = false;\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() error: boolean = false; // New input for error state\r\n @Input() errorMessage: string = ''; // New input for error message\r\n @Output() textareaChange = new EventEmitter<string>();\r\n @Output() selectionCleared = new EventEmitter<void>();\r\n @Output() blurEvent = new EventEmitter<void>();\r\n\r\n private onChange: any = () => { };\r\n private onTouched: any = () => { };\r\n\r\n textareaControl = new FormControl('');\r\n\r\n constructor() {\r\n this.textareaControl.valueChanges.subscribe(value => {\r\n if (this.readonly) return;\r\n this.onChange(value);\r\n this.onTouched();\r\n this.textareaChange.emit(value ?? '');\r\n });\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value !== undefined) {\r\n this.textareaControl.setValue(value, { emitEvent: false });\r\n }\r\n if (this.textareaControl.disabled !== this.disabled) {\r\n this.setDisabledState(this.disabled);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // events\r\n onBlur() {\r\n this.blurEvent.emit();\r\n this.onTouched();\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.textareaControl.disable({ emitEvent: false });\r\n } else {\r\n this.textareaControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n // clear\r\n resetTextarea() {\r\n this.textareaControl.setValue('');\r\n this.selectionCleared.emit();\r\n }\r\n\r\n}\r\n","<div class=\"form-group textarea\" [ngClass]=\"customClass\">\r\n @if (title) {\r\n <label class=\"inp-label\" [ngClass]=\"{'required' : required}\">{{ title }}</label>\r\n }\r\n <textarea class=\"form-control\" [placeholder]=\"placeholder\" [formControl]=\"textareaControl\"\r\n [ngClass]=\"{ 'is-invalid': error }\" [readonly]=\"readonly\" (blur)=\"onBlur()\"></textarea>\r\n\r\n <span class=\"focus-border\"></span>\r\n\r\n @if (textareaControl.value && clearVal && !readonly) {\r\n <label class=\"clear\" (click)=\"resetTextarea()\">\r\n <i class=\"he he-close\"></i>\r\n </label>\r\n }\r\n\r\n @if (error) {\r\n <div class=\"val-msg\">{{ errorMessage }}</div>\r\n }\r\n</div>","/*\r\n * Public API Surface of heal-lib\r\n */\r\n\r\nexport { AutocompleteControl } from './lib/controls/autocomplete-control/autocomplete-control.component';\r\nexport { CalendarControl } from './lib/controls/calendar-control/calendar-control.component';\r\nexport { CheckboxControl } from './lib/controls/checkbox-control/checkbox-control.component';\r\nexport { InputControl } from './lib/controls/input-control/input-control.component';\r\nexport { MultiselectControl } from './lib/controls/multiselect-control/multiselect-control.component';\r\nexport { SelectControl } from './lib/controls/select-control/select-control.component';\r\nexport { SwitchControl } from './lib/controls/switch-control/switch-control.component';\r\nexport { TextEditor } from './lib/controls/text-editor/text-editor.component';\r\nexport { TextareaControl } from './lib/controls/textarea-control/textarea-control.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;MAoCa,mBAAmB,CAAA;AAGtB,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAE9C,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;IACzB,WAAW,GAAW,EAAE;AACxB,IAAA,WAAW;IACX,QAAQ,GAAY,IAAI;IACxB,KAAK,GAAW,EAAE;IAClB,KAAK,GAAY,KAAK;IACtB,YAAY,GAAW,EAAE;IACzB,YAAY,GAAW,EAAE;IACzB,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;IAC7B,qBAAqB,GAAW,aAAa;AAC5C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAO;AACxC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAU;AACnC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,iBAAiB,GAAuB,IAAI,YAAY,EAAQ;AAChE,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAO;IAEzC,SAAS,GAAY,KAAK;IAC1B,QAAQ,GAAU,EAAE;IAC5B,IAAa,OAAO,CAAC,KAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC,kBAAkB,EAAE;;AAE3B,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;AAEtB,IAAA,IAAa,QAAQ,GAAA;QACnB,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;iBACtB;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;;;IAIxB,WAAW,GAAQ,IAAI;AACvB,IAAA,cAAc;IACd,qBAAqB,GAAY,KAAK;IACtC,kBAAkB,GAAY,KAAK;AACnC,IAAA,QAAQ,GAAQ,MAAK,GAAI;AACzB,IAAA,SAAS,GAAQ,MAAK,GAAI;AAEP,IAAA,YAAY;AACT,IAAA,eAAe;AAE7C,IAAA,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;IAClC,cAAc,GAAY,KAAK;IAC/B,QAAQ,GAAY,KAAK;AACzB,IAAA,aAAa;IACb,mBAAmB,GAAU,EAAE;IAC/B,gBAAgB,GAAkB,IAAI;AAEtC,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,YAAY,CAAC;aACf,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,oBAAoB,EAAE;AAC7C,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;gBAClC;;YAEF,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpC,MAAM,WAAW,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;AACnC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;;iBACxB;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;AAE/B,SAAC,CAAC;;IAGN,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;;IAGpC,eAAe,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAG7B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;;AAIjC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;;AAEjB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;aAC/C;;AAEL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,kBAAkB,EAAE;;;IAGrB,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;YAEjC;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC1C,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CACjC;YACD,IAAI,iBAAiB,EAAE;AACrB,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CACxB,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAC7C,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,iBAAiB;AACtC,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC1C,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;;;AAGJ,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAG3B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;QACnC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;aACtB;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;;AAI9B,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChD,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YAClC;;AAEF,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B;;QAEF,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;AAClD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,KACxD,UAAU,CAAC,IAAI,CAAC,qBAAqB;AACnC,cAAE,WAAW;AACZ,aAAA,QAAQ,CAAC,WAAW,CAAC,CACzB;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AACtE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,oBAAoB,EAAE;SAC5B,EAAE,CAAC,CAAC;;AAEP,IAAA,gBAAgB,CAAC,UAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE;AACjE,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,UAAU;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;;;;IAKxC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;IAEtB,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;;QAEhB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;AAG3B,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;;;AAG5B,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;gBAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC9B,CAAC,GAAG,KACF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,EAAE;AACrD,oBAAA,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CACrC;gBACD,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;AAKvB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;SAChC,EAAE,GAAG,CAAC;;AAET,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB;;AAEF,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,gBAAgB;oBACnB,IAAI,CAAC,gBAAgB,KAAK,IAAI;wBAC5B,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC5D,0BAAE;AACF,0BAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC;gBAC/B,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,6BAA6B,EAAE;gBACpC;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,gBAAgB;oBACnB,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK;AAC1D,0BAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG;AACpC,0BAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC;gBAC/B,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,6BAA6B,EAAE;gBACpC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IACE,IAAI,CAAC,gBAAgB,KAAK,IAAI;AAC9B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EACnC;AACA,oBAAA,IAAI,CAAC,gBAAgB,CACnB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAChD;;qBACI;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;gBAE7B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B;AACF,YAAA;gBACE;;;IAGN,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;AAEhC,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;;IAI/B,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;QAE/B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE;AAC7C,YAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAChC,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B,IAAI,CAAC,eAAe,CAAC,aAAa,EAClC;AACE,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,SAAS,EAAE;AACT,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,OAAO,EAAE;AACP,4BAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,yBAAA;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,OAAO,EAAE;AACP,4BAAA,kBAAkB,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;AAClD,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA,CACF;;;IAGG,6BAA6B,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAClC,YAAA,MAAM,eAAe,GACnB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACjE,IAAI,CAAC,gBAAgB,CACpB;YACH,IAAI,eAAe,EAAE;gBACnB,eAAe,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;;;;;IAM1D,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAEzB,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;uGAxUnC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCH,o8DAmDM,EAAA,MAAA,EAAA,CAAA,kTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAWhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAd/B,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAGjC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,mBAAqB;AAChC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,o8DAAA,EAAA,MAAA,EAAA,CAAA,kTAAA,CAAA,EAAA;wDAOQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,MAAM,EAAA,CAAA;sBAAf;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBAIY,OAAO,EAAA,CAAA;sBAAnB;gBAOY,QAAQ,EAAA,CAAA;sBAApB;gBAoB0B,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;gBACK,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB;;;MEjEjB,eAAe,CAAA;AAyEjB,IAAA,QAAA;AAvEA,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;IACzB,WAAW,GAAoB,EAAE;IACjC,QAAQ,GAAY,IAAI;IACxB,OAAO,GAAY,IAAI;IACvB,KAAK,GAAY,KAAK;IACtB,YAAY,GAAW,EAAE;IACzB,WAAW,GAAY,KAAK;IAC5B,UAAU,GAAW,IAAI;IACzB,aAAa,GAAW,QAAQ;IAChC,QAAQ,GAAG,KAAK;IAChB,UAAU,GAAW,YAAY;IACjC,WAAW,GAAW,YAAY;IAClC,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAG,KAAK;IACjB,gBAAgB,GAAY,KAAK;IACtB,QAAQ,GAAY,KAAK;IACpC,QAAQ,GAAG,KAAK;AACf,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAe;AAEhD,IAAA,QAAQ;AACR,IAAA,QAAQ;AAChB,IAAA,IAAa,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEvB,IAAA,IAAa,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEvB,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACzC,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;;IAEtC,OAAO,cAAc;AACrB,IAAA,UAAU,GAAiC,MAAK,GAAI;AACpD,IAAA,WAAW,GAAe,MAAK,GAAI;IACnC,cAAc,GAA0B,IAAI;AAEf,IAAA,WAAW;AACR,IAAA,OAAO;AACH,IAAA,YAAY;IAExD,MAAM,GAAY,KAAK;IACvB,KAAK,GAAY,KAAK;AACtB,IAAA,YAAY;AACZ,IAAA,WAAW;IACX,YAAY,GAAgB,IAAI;AAChC,IAAA,KAAK,GAAG,IAAI,IAAI,EAAE;AAClB,IAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACpC,IAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAClC,IAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAChC,IAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACpC,IAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;IACxC,WAAW,GAEP,EAAE;AAEN,IAAA,QAAQ,GAAkB,IAAI,CAAC;AAC/B,IAAA,aAAa,GAAG,EAAE,CAAC;IACnB,WAAW,GAAa,KAAK;AAC7B,IAAA,YAAY,GAAgB,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE3E,IAAA,WAAA,CACS,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAEf,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;;IAGxC,QAAQ,GAAA;AACN,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;;IAGpC,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,gBAAgB,EAAE;;;IAI3B,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,gBAAgB,EAAE;;;IAI3B,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;;AAGtB,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEnB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpD;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,KAAa,EAAE,IAAY;AAE/B,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;gBAE7B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;gBAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC;gBACzD,IAAI,GAAG,EAAE;AACP,oBAAA,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,oBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;qBACT,IAAI,GAAG,EAAE;AACd,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;wBAAE,CAAC,IAAI,EAAE;AACzC,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;wBAAE,CAAC,GAAG,CAAC;oBACzC,KAAK,GAAG,CAAC;AACT,oBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;qBACT;;AAEL,oBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC1B,oBAAA,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE;AACrB,oBAAA,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE;;;AAEnB,iBAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AAChC,gBAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AACxB,gBAAA,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;;iBACpB;;AAEL,gBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC1B,gBAAA,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE;;;AAIxB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;AAE1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE;YAElB;;;QAGF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,KAAe;;AAG3B,YAAA,IAAI,QAAQ,GAAG,GAAG,EAChB,QAAQ,GAAkB,IAAI;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AACnB,gBAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;;;YAIrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;YAI5C,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAS,EAAE,CAAS;gBACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;gBACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,gCAAgC,CAAC;gBAE5D,IAAI,GAAG,EAAE;AACP,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;qBACN,IAAI,GAAG,EAAE;AACd,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;wBAAE,CAAC,IAAI,EAAE;AACzC,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;wBAAE,CAAC,GAAG,CAAC;;qBACpC;oBACL,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAC;AAC7C,oBAAA,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;AACjB,oBAAA,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE;;AAGrB,gBAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;;;AAKzB,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAEzC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB;;QAEF,IAAI,MAAM,EAAE;;AAEV,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE;;AAGvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE;;;YAK3C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AACpD,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;;;AAIN,IAAA,gBAAgB,CAAC,EAAkC,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAEtB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAEvB,IAAA,OAAO,CAAC,MAAW,EAAA;AACjB,QAAA,IAAI,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;;;;IAKzC,MAAM,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAe;QAC7C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;YAEnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACzC,YAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACvC,YAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;;YAEtC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;YAEnD,IAAI,CAAS,EAAE,CAAS;YACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,gCAAgC,CAAC;YAC5D,IAAI,GAAG,EAAE;AACP,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;iBACN,IAAI,GAAG,EAAE;AACd,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAAE,CAAC,IAAI,EAAE;AACzC,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;oBAAE,CAAC,GAAG,CAAC;;iBACpC;gBACL,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAC;AAC9C,gBAAA,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE;AAClB,gBAAA,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE;;;AAGtB,YAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;;AAGvB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,EAAE;;YAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACrB;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;YAEjB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC;;YAExC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC;YAE/D,IAAI,CAAC,EAAE;;AAEL,gBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACb,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,oBAAA,IAAI,CAAC,cAAc,GAAG,GAAG;;qBAEpB;oBACL,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;iBAEvC,IAAI,KAAK,EAAE;;AAEhB,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EACf,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;AACjC,oBAAA,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;wBAAE,CAAC,IAAI,EAAE;AAClC,oBAAA,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;wBAAE,CAAC,GAAG,CAAC;AAClC,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,oBAAA,IAAI,CAAC,cAAc,GAAG,GAAG;;qBAEpB;oBACL,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;iBAEvC;;gBAEL,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;AAE5C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACrB;;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACrB;;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAElC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;aAC9B;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE;YAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;;AAE5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;IAEvB,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;AAEnB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAE5B,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;gBACnB;AACF,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,UAAU;gBACb,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;gBACnB;;;;AAKN,IAAA,SAAS,CAAC,GAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC;AAClB,cAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG;AAC5B,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE;AAEjC,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAErB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;QAC1E,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,GAAG,CAAC,EACrB,CAAC,CACF,CAAC,OAAO,EAAE;QACX,MAAM,MAAM,GAAG,QAAQ;QAEvB,MAAM,SAAS,GAAsB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAE7D,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG;AACpB,gBAAA,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACnC,QAAQ,EACN,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW;oBACrD,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY;AACnD,oBAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC;AACpC,gBAAA,KAAK,EACH,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW;AACnC,oBAAA,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY;oBACrC,IAAI,CAAC,SAAS,KAAK,CAAC;aACvB;AAED,YAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGnB,QAAA,OAAO,SAAS;;AAElB,IAAA,SAAS,CAAC,GAAQ,EAAA;AAChB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC;YACtD,IAAI,CAAC,EAAE;gBACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACb,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACd,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACX,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;;;;AAI7B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;;AAE5C,IAAA,YAAY,CAAC,IAAU,EAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAE;AAChE,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG,OAAO;AACjE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAE;AAC3D,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,EAAE;;AAElC,QAAA,OAAO,QAAQ;;AAEjB,IAAA,aAAa,CAAC,GAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;QAC5C,QACE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW;YACpD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY;YAClD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG;;AAGvC,IAAA,cAAc,CAAC,CAAO,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI;AAC7D,QAAA,OAAO,KAAK;;AAEd,IAAA,aAAa,CAAC,GAAkB,EAAA;QAC9B,QACE,GAAG,KAAK,IAAI;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;;;IAK3E,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;;AAE5B,IAAA,MAAM,GAAG;QACP,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN;AACD,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAE1B,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;;IAEvC,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;YACtB,IAAI,CAAC,WAAW,EAAE;;aACb;YACL,IAAI,CAAC,YAAY,EAAE;;;IAGvB,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE;;aACb;YACL,IAAI,CAAC,YAAY,EAAE;;;;IAKvB,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;AAEhC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAC7C,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;;AAE3B,QAAA,OAAO,KAAK;;IAEd,oBAAoB,GAAA;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;AACvD,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,SAAS;;AAErC,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;;IAE5B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa;;IAExC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa;;;IAIhC,oBAAoB,GAAA;;AAE1B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC5B,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,EACzD,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG,OAAO,CAC9C;;IAEI,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAC1B,GAAG,CAAC,WAAW,EAAE,EACjB,GAAG,CAAC,QAAQ,EAAE,EACd,GAAG,CAAC,OAAO,EAAE,EACb,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,CACpB;;aACI;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;;AAGpE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC;AAClB,cAAE,IAAI,CAAC,oBAAoB;cACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAExC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAE3C,IAAA,WAAW,CAAC,KAAkB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE;QAC7B,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE;AAC7C,YAAA,IAAI,CAAC,YAAY,IAAI,EAAE;;aAClB,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,YAAY,IAAI,EAAE;;QAEzB,IAAI,CAAC,iBAAiB,EAAE;;AAElB,IAAA,iBAAiB,CAAC,GAAW,EAAA;QACnC,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,GAAG,EACH,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,CACpB;;IAEH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE;AAChD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,iBAAiB,EAAE;;IAE9D,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE;AACjD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,iBAAiB,EAAE;;IAE9D,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE;;QAElD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,iBAAiB,EAAE;;;IAG5B,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;AAExB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE;;QAEnD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,iBAAiB,EAAE;;;;IAK5B,gBAAgB,GAAA;QACd,IACE,CAAC,IAAI,CAAC,cAAc;YACpB,IAAI,CAAC,OAAO,EAAE,aAAa;AAC3B,YAAA,IAAI,CAAC,YAAY,EAAE,aAAa,EAChC;AACA,YAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAChC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B;AACE,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,SAAS,EAAE;AACT,oBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;AAC9D,oBAAA,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;AACjE,iBAAA;AACF,aAAA,CACF;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;;;IAGhC,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;;;IAK9B,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE;;QAGpC,IACE,CAAC,IAAI,CAAC,MAAM;AACZ,YAAA,eAAe,CAAC,cAAc;AAC9B,YAAA,eAAe,CAAC,cAAc,KAAK,IAAI,EACvC;AACA,YAAA,eAAe,CAAC,cAAc,CAAC,aAAa,EAAE;;;AAIhD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAE1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;AAEf,YAAA,eAAe,CAAC,cAAc,GAAG,IAAI;;AAGrC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAChD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;iBAC7C;AACL,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AAClC,gBAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE;;;AAItC,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;YAE5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAChC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B;AACE,oBAAA,SAAS,EAAE,cAAc;AACzB,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;wBAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;AAC9D,wBAAA,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;AACjE,qBAAA;AACF,iBAAA,CACF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;;;aAEzB;YACL,IAAI,CAAC,aAAa,EAAE;;;IAGxB,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM;YAAE;QACnD,IAAI,CAAC,cAAc,EAAE;;AAGvB,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACzE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;;IAGhB,aAAa,GAAA;QAClB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,eAAe,CAAC,cAAc,KAAK,IAAI,EAAE;AAC3C,YAAA,eAAe,CAAC,cAAc,GAAG,SAAS;;;AAG9C,IAAA,SAAS,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC5B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;uGA3tBnB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,SAAA,EATf;YACT,QAAQ;AACR,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,uiPAuJM,EAAA,MAAA,EAAA,CAAA,kqRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7IF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,ykBACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA;;2FAaF,eAAe,EAAA,UAAA,EAAA,CAAA;kBAnB3B,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EAGU;wBACT,QAAQ;AACR,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,uiPAAA,EAAA,MAAA,EAAA,CAAA,kqRAAA,CAAA,EAAA;6EAIQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACmB,QAAQ,EAAA,CAAA;sBAA3B,KAAK;uBAAC,WAAW;gBACT,QAAQ,EAAA,CAAA;sBAAhB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAIY,OAAO,EAAA,CAAA;sBAAnB;gBAMY,OAAO,EAAA,CAAA;sBAAnB;gBAeoC,WAAW,EAAA,CAAA;sBAA/C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACK,OAAO,EAAA,CAAA;sBAA9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACM,YAAY,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAmpB1C,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MExsB/B,eAAe,CAAA;AAkBhB,IAAA,SAAA;AACA,IAAA,WAAA;AAjBD,IAAA,KAAK;AACL,IAAA,WAAW;IACX,IAAI,GAAoC,SAAS;IACjD,QAAQ,GAAY,KAAK;AAClC,IAAA,IAAa,QAAQ,CAAC,KAAc,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnF,IAAA,cAAc,GAAG,IAAI,YAAY,EAAW;AAC5C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AAEd,IAAA,iBAAiB;IAEzC,SAAS,GAAG,KAAK;AACzB,IAAA,eAAe,GAAG,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACrE,IAAA,QAAQ,GAAQ,MAAK,GAAI;AACzB,IAAA,SAAS,GAAQ,MAAK,GAAI;IAElC,WAAA,CACU,SAAoB,EACpB,WAAuB,EAAA;QADvB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;QAEnB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YAClD,IAAI,IAAI,CAAC,QAAQ;gBAAE;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,SAAC,CAAC;;AAGJ,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;AAIhF,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACxD,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,YAAA;gBACE,OAAO,CAAC,CAAC,KAAK;;;;AAKpB,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAiB;AAC7C,QAAA,IAAI,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC3C,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;;;IAGjE,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;;AAElE,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAClF,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;aACzB;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;;;uGAtEtB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EATf;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBH,iVAGQ,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKJ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,0eACnB,WAAW,EAAA,CAAA,EAAA,CAAA;;2FAWF,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,iVAAA,EAAA;uGAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACY,QAAQ,EAAA,CAAA;sBAApB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAE+B,iBAAiB,EAAA,CAAA;sBAAhD,SAAS;uBAAC,mBAAmB;;;MERnB,YAAY,CAAA;IAEd,IAAI,GAAsE,MAAM;AAChF,IAAA,KAAK;IACL,WAAW,GAAW,EAAE;AACxB,IAAA,WAAW;IACX,QAAQ,GAAY,IAAI;IACxB,QAAQ,GAAY,KAAK;IACzB,OAAO,GAAY,IAAI;IACvB,KAAK,GAAY,KAAK;IACtB,YAAY,GAAW,EAAE;IACzB,YAAY,GAAW,EAAE;IACzB,QAAQ,GAAY,KAAK;IACzB,MAAM,GAAY,KAAK;IACvB,KAAK,GAAY,KAAK;AACtB,IAAA,SAAS;AACT,IAAA,OAAO;IACP,SAAS,GAAY,KAAK;IAC1B,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;AAC/B,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,aAAa,GAAyB,IAAI,YAAY,EAAU;AAChE,IAAA,aAAa,GAAuB,IAAI,YAAY,EAAQ;AAC5D,IAAA,gBAAgB,GAAuB,IAAI,YAAY,EAAQ;IAEjE,SAAS,GAAG,KAAK;IACzB,IAAa,QAAQ,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;;AAEnC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;AAEf,IAAA,wBAAwB;AACxB,IAAA,QAAQ,GAAQ,MAAK,GAAI;AACzB,IAAA,SAAS,GAAQ,MAAK,GAAI;IAElC,SAAS,GAAY,KAAK;IAC1B,YAAY,GAAY,KAAK;AAC7B,IAAA,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;IAElC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CACtE,CAAC,KAAK,KAAI;AACR,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACpC,aAAC,CACF;;;IAIL,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;;;;IAK/C,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI;;AAG3E,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE;AAChC,oBAAA,SAAS,EAAE,KAAK;AACjB,iBAAA,CAAC;AACF,gBAAA,IAAI,KAAK,IAAI,EAAE,EAAE;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;YAGxB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;AAChD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;aAEjC;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;AAGxB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;IAIrB,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;SAExC,EAAE,GAAG,CAAC;;IAET,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;AAEvB,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,WAAW,GAAa,EAAE;AAE9B,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;gBACX,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAChE;AACF,YAAA,KAAK,SAAS;gBACZ,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBACrE;AACF,YAAA;gBACE;;QAEJ,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE;YACvC,IAAI,CAAC,aAAa,EAAE;;AAEtB,QAAA,IACE,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS;YAChD,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAChC;YACA,KAAK,CAAC,cAAc,EAAE;YACtB;;QAEF,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;YAC/E,MAAM,YAAY,GAAW,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC1D,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;gBACzC,KAAK,CAAC,cAAc,EAAE;gBACtB;;;;AAIN,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;QAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;;AACG,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;;;;IAKN,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;;IAExC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAE3B,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;;IAI9B,eAAe,GAAA;QACb,QACE,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,YAAY,CAAC,KAAK;AACvB,YAAA,IAAI,CAAC,IAAI,KAAK,UAAU;;IAG5B,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;aAE/C;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;uGA/K9B,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAVZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBH,k8DA4DM,EAAA,MAAA,EAAA,CAAA,wgEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnDF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,ykBACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYF,YAAY,EAAA,UAAA,EAAA,CAAA;kBAlBxB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,k8DAAA,EAAA,MAAA,EAAA,CAAA,wgEAAA,CAAA,EAAA;8BAMQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBAGY,QAAQ,EAAA,CAAA;sBAApB;;;MEnCU,qBAAqB,CAAA;AACpB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAE/C,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,IAAA,WAAA,GAAA;AACI,QAAA,SAAS,CAAa,IAAI,CAAC,QAAQ,EAAE,OAAO;AACvC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACpE,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;AAErC,SAAC,CAAC;;uGAfD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA;wDAEa,YAAY,EAAA,CAAA;sBAArB;;;MCWQ,kBAAkB,CAAA;AA2EnB,IAAA,KAAA;AAxEF,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAE9C,IAAA,KAAK;IACL,aAAa,GAAU,EAAE;IACzB,QAAQ,GAAY,KAAK;AACzB,IAAA,WAAW;AACX,IAAA,WAAW;IACX,QAAQ,GAAY,IAAI;IACxB,OAAO,GAAY,IAAI;IACvB,mBAAmB,GAAW,IAAI;IAClC,WAAW,GAAY,KAAK;IAC5B,KAAK,GAAY,KAAK;IACtB,YAAY,GAAW,EAAE;IACzB,YAAY,GAAW,EAAE;IACzB,UAAU,GAAY,KAAK;IAC3B,qBAAqB,GAAW,aAAa;AAC5C,IAAA,eAAe,GAAG,IAAI,YAAY,EAAS;AAC3C,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AAE9C,IAAA,YAAY,GAAgB,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnE,QAAQ,GAAU,EAAE;IAC5B,IACW,OAAO,CAAC,GAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;QAC7C,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;;AAGzC,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrE,IAAI,CAAC,uBAAuB,EAAE;;QAGhC,IAAI,CAAC,wBAAwB,EAAE;;AAEjC,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;;IAEd,SAAS,GAAY,KAAK;AAClC,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;iBAC1C;gBACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;;IAI5C,iBAAiB,GAAY,KAAK;IAClC,uBAAuB,GAAU,EAAE;AACnC,IAAA,QAAQ,GAAyB,MAAK,GAAI;AAC1C,IAAA,SAAS,GAAe,MAAK,GAAI;AAEC,IAAA,QAAQ;AACX,IAAA,KAAK;IAE5C,eAAe,GAAU,EAAE;IAC3B,cAAc,GAAY,KAAK;IAC/B,gBAAgB,GAAY,KAAK;IACjC,SAAS,GAAW,EAAE;AACtB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAU;IAChC,gBAAgB,GAAW,EAAE;IAC7B,gBAAgB,GAAkB,IAAI;IAE9B,mBAAmB,GAAG,KAAK;AAC3B,IAAA,cAAc;AAEtB,IAAA,WAAA,CACU,KAAwB,EAAA;QAAxB,IAAA,CAAA,KAAK,GAAL,KAAK;;IAGf,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE;AAC9C,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAC7B,IAAI,CAAC,wBAAwB,EAAE;AACjC,SAAC,CAAC;;QAGJ,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;;IAG1C,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpD,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;IAInC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;;AAIjC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;;YAEtB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACxC,IAAI,CAAC,wBAAwB,EAAE;;;AAInC,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,YAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B;;;AAIF,QAAA,IACE,KAAK,CAAC,MAAM,GAAG,CAAC;AAChB,aAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,EAC9D;AACA,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,wBAAwB,EAAE;YAC/B;;;AAIF,QAAA,IACE,KAAK,CAAC,MAAM,GAAG,CAAC;AAChB,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,EAC1C;;AAEA,YAAA,MAAM,OAAO,GAAI,KAAe,CAAC,GAAG,CAClC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CACvC;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO;YACtC,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,wBAAwB,EAAE;YAC/B;;;;AAKF,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,wBAAwB,EAAE;;IAGzB,uBAAuB,GAAA;QAC7B,IACE,CAAC,IAAI,CAAC,iBAAiB;AACvB,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAC1B;YACA;;;QAIF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KACvC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CACrE;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;QAC5B,IAAI,CAAC,gBAAgB,GAAG;AACrB,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;;AAGb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAEjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;;AAGnC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;AAIrB,IAAA,UAAU,CAAC,MAAW,EAAA;AACpB,QAAA,QACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAG5E,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;;;;;;;QAQrB,IAAI,CAAC,SAAS,EAAE;;;;;AAKlB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;QAC1B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;aAC1C;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;;AAKlD,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEjB,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aACzB,MAAM,CAAC,CAAC,GAAG,KACV,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAE/D,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB;AACxC,iBAAA,WAAW;iBACX,OAAO,CAAC,KAAK,CAAC;AACjB,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB;AACxC,iBAAA,WAAW;iBACX,OAAO,CAAC,KAAK,CAAC;YACjB,OAAO,MAAM,GAAG,MAAM;AACxB,SAAC,CAAC;;QAGJ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAClD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpC;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;aACjE;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;QAG9B,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;;;IAIpB,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B;;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,KACrD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CACjC;;AAEH,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO;QACrC,IAAI,CAAC,gBAAgB,EAAE;;IAEjB,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;;YAEzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAC7B,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAC1D;;aACI;;YAEL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAC5C,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/C;;AAGH,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;AAE/C,IAAA,oBAAoB,CAAC,MAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,MAAM,CAAC;AACzE,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;AAE/C,IAAA,cAAc,CAAC,MAAW,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,MAAM,CAAC;;aACpE;YACL,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;;AAGtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;;QAGb,IAAI,CAAC,wBAAwB,EAAE;;AAG/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAI/C,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,QAAQ,KAAK,CAAC,GAAG;AACf,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,cAAc,EAAE;oBACrB,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,kBAAkB,EAAE;oBACzB,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,OAAO;AACV,oBAAA,IACE,IAAI,CAAC,gBAAgB,KAAK,IAAI;wBAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EACnD;AACA,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;oBAElE,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAC3B;AACF,gBAAA,KAAK,KAAK;AACR,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAC3B;;;AAEC,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC5B,IAAI,CAAC,cAAc,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE;;;AAI1B,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;;IAGvB,cAAc,GAAA;AACpB,QAAA,IACE,IAAI,CAAC,gBAAgB,KAAK,IAAI;YAC9B,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EACzD;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;;aACpB;YACL,IAAI,CAAC,gBAAiB,EAAE;;QAE1B,IAAI,CAAC,oBAAoB,EAAE;;IAErB,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE;YACjE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;;aAClD;YACL,IAAI,CAAC,gBAAiB,EAAE;;QAE1B,IAAI,CAAC,oBAAoB,EAAE;;IAErB,oBAAoB,GAAA;QAC1B,UAAU,CAAC,MAAK;YACd,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;AACxD,YAAA,IAAI,CAAC,SAAS;gBAAE;YAChB,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3D,IAAI,WAAW,EAAE;gBACd,WAA2B,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;;SAEpE,EAAE,CAAC,CAAC;;;IAIC,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAChC,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B;AACE,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,OAAO,EAAE;AACP,wBAAA,kBAAkB,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;AAClD,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CACF;;;IAIH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1C,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AACxC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;IAGhC,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;IAE7B,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;IAE9B,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,wBAAwB,EAAE;;uGAnctB,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAVlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBH,8rFAuEM,EAAA,MAAA,EAAA,CAAA,u2DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzDF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,0kBACnB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYZ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,8rFAAA,EAAA,MAAA,EAAA,CAAA,u2DAAA,CAAA,EAAA;sFASQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAKU,OAAO,EAAA,CAAA;sBADjB;gBAiBG,QAAQ,EAAA,CAAA;sBADX;gBAmByC,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACD,KAAK,EAAA,CAAA;sBAA3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAiTrC,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MEhX/B,aAAa,CAAA;AAEhB,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;IAE9C,qBAAqB,GAAW,aAAa;IAC7C,QAAQ,GAAY,KAAK;AACzB,IAAA,WAAW;AACX,IAAA,WAAW;IACX,QAAQ,GAAY,IAAI;IACxB,OAAO,GAAY,IAAI;IACvB,KAAK,GAAY,KAAK;IACtB,YAAY,GAAW,EAAE;IACzB,YAAY,GAAW,EAAE;IACzB,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;AAC5B,IAAA,cAAc,GAAG,IAAI,YAAY,EAAO;AACxC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,iBAAiB,GAAuB,IAAI,YAAY,EAAQ;AAChE,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAO;AAExC,IAAA,KAAK;IACN,QAAQ,GAAU,EAAE;IAC5B,IACI,OAAO,CAAC,IAAW,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,kBAAkB,EAAE;;AAE3B,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;AAEtB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;iBAC1C;gBACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;;AAKV,IAAA,QAAQ;AACX,IAAA,KAAK;IAE5C,eAAe,GAAU,EAAE;IAC3B,SAAS,GAAW,EAAE;IACtB,YAAY,GAAQ,IAAI;AACxB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAU;AAChC,IAAA,YAAY,GAAgB,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3E,cAAc,GAAG,KAAK;IACtB,gBAAgB,GAAkB,IAAI;AAE9B,IAAA,QAAQ,GAAyB,MAAK,GAAI;AAC1C,IAAA,SAAS,GAAe,MAAK,GAAI;IACjC,WAAW,GAAQ,IAAI;IACvB,SAAS,GAAY,KAAK;IAC1B,mBAAmB,GAAG,KAAK;AAE3B,IAAA,cAAc;IAEtB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE;AAC9C,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ;;QAGpC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtB,SAAC,CAAC;;IAGJ,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;AAInC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzC,IAAI,CAAC,qBAAqB,EAAE;;AAE9B,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY;;;IAIpD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGjC,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAEtC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,kBAAkB,GAAA;AAChB,QAAA,IACE,IAAI,CAAC,WAAW,KAAK,IAAI;AACzB,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACxB;;YAEA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CACpC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAC3C;YAED,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,YAAY,GAAG,WAAW;gBAC/B,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC5D,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAC9D,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;iBACrC;;;AAGL,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAEzB,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAIhC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;IAIrB,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;QAChB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;SAC5B,EAAE,GAAG,CAAC;;AAET,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,MAAM,qBAAqB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,QAAQ,KAAK,CAAC,GAAG;AACf,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,aAAa,EAAE;oBACpB,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,iBAAiB,EAAE;oBACxB,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAClC,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;oBAEhE,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAC3B;AACF,gBAAA;oBACE,IAAI,qBAAqB,EAAE;wBACzB,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;AACtC,wBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE;4BACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;;oBAGtC;;;AAEC,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC5B,IAAI,CAAC,cAAc,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE;;;AAG1B,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;aAC1C;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;AAGlD,IAAA,YAAY,CAAC,MAAW,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAClE,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;;;IAK/C,qBAAqB,GAAA;AACnB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAClD,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,YAAY,CACzC;AACD,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa;YACrC,IAAI,CAAC,mBAAmB,EAAE;;aACrB;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;IAGhC,aAAa,GAAA;AACX,QAAA,IACE,IAAI,CAAC,gBAAgB,KAAK,IAAI;YAC9B,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EACzD;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;;aACpB;YACL,IAAI,CAAC,gBAAgB,EAAE;;QAEzB,IAAI,CAAC,mBAAmB,EAAE;;IAE5B,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE;YACjE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;;aAClD;YACL,IAAI,CAAC,gBAAgB,EAAE;;QAEzB,IAAI,CAAC,mBAAmB,EAAE;;AAE5B,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;QACvC,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CACtC,CAAC,MAAM,KACL,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,CACpE;AACD,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,YAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB;AAC/B,kBAAE,WAAW;AACZ,iBAAA,UAAU,CAAC,WAAW,CAAC,CAC3B;;AAEH,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YACrB,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACxE;;AAGH,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;YAClC,IAAI,CAAC,mBAAmB,EAAE;;aACrB;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;IAGhC,mBAAmB,GAAA;QACjB,UAAU,CAAC,MAAK;YACd,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;YACxD,IAAI,SAAS,EAAE;gBACb,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3D,IAAI,WAAW,EAAE;oBACf,WAAW,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;;;SAGrD,EAAE,CAAC,CAAC;;;IAIP,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;;IAI/B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAChC,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B;AACE,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,SAAS,EAAE;AACT,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,OAAO,EAAE;AACP,4BAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,yBAAA;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,OAAO,EAAE;AACP,4BAAA,kBAAkB,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;AAClD,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA,CACF;;;;IAKL,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1C,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;YAChC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5C,IAAI,CAAC,qBAAqB,EAAE;;;;AAIlC,IAAA,YAAY,CAAC,KAAoB,EAAA;QAC/B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC1C,IAAI,CAAC,cAAc,EAAE;;;AAGzB,IAAA,sBAAsB,CAAC,CAAQ,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;IAE7B,YAAY,GAAA;QACV,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;SAC5B,EAAE,GAAG,CAAC;;IAET,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;uGA3VlB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAVb;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBH,i+DAoDM,EAAA,MAAA,EAAA,CAAA,kOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzCF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,0kBACnB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYZ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAlBzB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,i+DAAA,EAAA,MAAA,EAAA,CAAA,kOAAA,CAAA,EAAA;8BAQQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAGG,OAAO,EAAA,CAAA;sBADV;gBAWG,QAAQ,EAAA,CAAA;sBADX;gBAeyC,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACD,KAAK,EAAA,CAAA;sBAA3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MErD1B,aAAa,CAAA;AA+Bd,IAAA,SAAA;AACA,IAAA,WAAA;AA9BD,IAAA,KAAK;AACL,IAAA,WAAW;IACX,QAAQ,GAAY,KAAK;IAClC,IAAa,QAAQ,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;IAE9B,IACI,OAAO,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;AAEjD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AAEhB,IAAA,eAAe;AAE7C,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAGd,QAAQ,GAAY,KAAK;IACzB,SAAS,GAAG,KAAK;AACzB,IAAA,aAAa,GAAG,IAAI,WAAW,CAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAE5E,IAAA,QAAQ,GAAQ,MAAK,GAAI;AACzB,IAAA,SAAS,GAAQ,MAAK,GAAI;IAElC,WAAA,CACU,SAAoB,EACpB,WAAuB,EAAA;QADvB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;QAEnB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YAChD,IAAI,IAAI,CAAC,QAAQ;gBAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;AACxC,SAAC,CAAC;;AAGJ,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;AAI5D,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;IAIrB,OAAO,GAAA;QACL,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;;IAE7D,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;;AAEhE,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAClF,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;;aACvB;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;;;uGArEpB,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAVb;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBH,iRAGQ,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKJ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYV,aAAa,EAAA,UAAA,EAAA,CAAA;kBAjBzB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,iRAAA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA;uGAMQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACY,QAAQ,EAAA,CAAA;sBAApB;gBAKG,OAAO,EAAA,CAAA;sBADV;gBAKS,YAAY,EAAA,CAAA;sBAArB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAE6B,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB;;;MEXjB,UAAU,CAAA;IAEZ,MAAM,GAAY,IAAI;IACtB,KAAK,GAAY,IAAI;IACrB,IAAI,GAAY,IAAI;IACpB,WAAW,GAAW,cAAc;AAExB,IAAA,SAAS;AAEtB,IAAA,QAAQ,GAA4B,MAAK,GAAI;AAC7C,IAAA,OAAO,GAAe,MAAK,GAAI;IAC/B,SAAS,GAAmB,EAAE;IAC9B,SAAS,GAAmB,EAAE;AAEtC,IAAA,QAAQ;IAER,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE;QACpD,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;IAGnB,OAAO,GAAA;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;;;IAIlB,SAAS,GAAA;QACP,IAAI,CAAC,OAAO,EAAE;;AAEhB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE;;;IAIjE,iBAAiB,GAAA;AACvB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE;QACvC,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEhC,QAAA,OAAO,IAAI;;IAGL,aAAa,CAAC,OAAe,EAAE,KAAc,EAAA;AACnD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS;AAAE,YAAA,OAAO;AACtC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,EAAE;QAE5C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QAC1C,IAAI,KAAK,EAAE;AACT,YAAA,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;;AAEjC,QAAA,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC;AAC5B,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE;;;AAIR,IAAA,4BAA4B,CAAC,EAAe,EAAA;AAClD,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa;AAC/B,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAgB;YAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAgB;AAC3C,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,EAAE,QAAQ,KAAK,CAAC,EAAE;gBAClD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;;AAEpG,oBAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AACtB,wBAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;oBAEtC,IAAI,CAAC,MAAM,EAAE;;;;;;;AAQrB,IAAA,gBAAgB,CAAC,SAA0C,EAAA;QACzD,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,SAAS,KAAK,MAAM;YAAE,KAAK,GAAG,mBAAmB;aAChD,IAAI,SAAS,KAAK,QAAQ;YAAE,KAAK,GAAG,oBAAoB;aACxD,IAAI,SAAS,KAAK,WAAW;YAAE,KAAK,GAAG,4BAA4B;AAExE,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;;AAGnC,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;;QAEzB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAG,CAAC;;AAG/C,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACzB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAA,CAAG,CAAC;;;;AAK1D,IAAA,gBAAgB,CAAC,QAA2B,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;;QAGZ,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE;;YAEV,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAChD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5C,YAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;aACpB;;YAEL,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;;AAEjD,YAAA,OAAO,KAAK,CAAC,UAAU,EAAE;AACvB,gBAAA,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;;AAExC,YAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;;QAE7B,IAAI,CAAC,OAAO,EAAE;;AAGR,IAAA,iBAAiB,CAAC,IAAU,EAAA;QAClC,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AACpD,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,OAAO,IAAmB;;AAE5B,YAAA,IAAI,GAAG,IAAI,CAAC,UAAW;;AAEzB,QAAA,OAAO,IAAI;;AAGL,IAAA,cAAc,CAAC,IAAU,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAmB,CAAC,CAAC,OAAO;AACpE,QAAA,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,WAAW;;;;AAKvD,IAAA,SAAS,CAAC,QAAqB,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,CAAC;;AAGzE,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAE9C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACvC,YAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;;QAGxB,IAAI,WAAW,EAAE;;AAEf,YAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;;aACnB;;AAEL,YAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;;QAE1B,IAAI,CAAC,OAAO,EAAE;;AAGR,IAAA,kBAAkB,CAAC,QAA0B,EAAA;;;QAGnD,MAAM,KAAK,GAAuB,EAAE;AACpC,QAAA,IAAI,WAAW,GAAG,QAAQ,CAAC,sBAAsB,EAAE;AAEnD,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;;AAEvD,gBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACvB,gBAAA,WAAW,GAAG,QAAQ,CAAC,sBAAsB,EAAE;AAC/C,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC7B,oBAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AACtB,wBAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;AAE1C,oBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACvB,oBAAA,WAAW,GAAG,QAAQ,CAAC,sBAAsB,EAAE;;;iBAE5C;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEjC,SAAC,CAAC;QAEF,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;AAEzB,QAAA,OAAO,KAAK;;;IAId,UAAU,GAAA;QACR,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS;YAAE;AAC/B,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,EAAE;QAC/C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,QAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,QAAA,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;AAC9B,QAAA,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE;;;IAIhB,WAAW,GAAA;AACT,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACtC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACb,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE;;;AAIhB,IAAA,YAAY,CAAC,SAAkD,EAAA;;AAE7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACnE,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;YACjC,IAAI,CAAC,OAAO,EAAE;;;;IAKlB,eAAe,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS;;QAEnD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,CAAA,GAAA,EAAM,IAAI,CAAA,IAAA,CAAM;QACzD,IAAI,CAAC,OAAO,EAAE;;;IAIhB,SAAS,GAAA;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;YACjG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;;;IAKxB,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI;AACtD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;;;IAGhC,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;;;uGA3RlB,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BvB,2uIAuFM,EAAA,MAAA,EAAA,CAAA,gkFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlED,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAMJ,UAAU,EAAA,UAAA,EAAA,CAAA;kBATtB,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAEzB,CAAC,YAAY;AAEZ,qBAAA,EAAA,QAAA,EAAA,2uIAAA,EAAA,MAAA,EAAA,CAAA,gkFAAA,CAAA,EAAA;8BAMM,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEoB,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ;;;MEbR,eAAe,CAAA;AACjB,IAAA,KAAK;IACL,WAAW,GAAW,EAAE;AACxB,IAAA,WAAW;IACX,QAAQ,GAAY,IAAI;IACxB,QAAQ,GAAY,KAAK;IACzB,QAAQ,GAAY,KAAK;IACzB,QAAQ,GAAY,KAAK;AACzB,IAAA,KAAK,GAAY,KAAK,CAAC;AACvB,IAAA,YAAY,GAAW,EAAE,CAAC;AACzB,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AAEtC,IAAA,QAAQ,GAAQ,MAAK,GAAI;AACzB,IAAA,SAAS,GAAQ,MAAK,GAAI;AAElC,IAAA,eAAe,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAErC,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YAClD,IAAI,IAAI,CAAC,QAAQ;gBAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACvC,SAAC,CAAC;;AAGJ,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;QAE5D,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;AACnD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAIxC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAEpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;;IAIrB,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;;AAElB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;aAC7C;YACL,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;;IAKrD,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;uGA5DnB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAVf;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBH,4rBAkBM,EAAA,MAAA,EAAA,CAAA,gOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,4rBAAA,EAAA,MAAA,EAAA,CAAA,gOAAA,CAAA,EAAA;wDAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,SAAS,EAAA,CAAA;sBAAlB;;;AEjCH;;AAEG;;ACFH;;AAEG;;;;"}