{"version":3,"file":"axulus-uikit-calendar.mjs","sources":["../../src/app/components/calendar/calendar.ts","../../src/app/components/calendar/axulus-uikit-calendar.ts"],"sourcesContent":["import { animate, AnimationEvent, state, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  NgModule,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  Renderer2,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { OverlayService, PrimeNGConfig, PrimeTemplate, SharedModule, TranslationKeys } from '@axulus/uikit/api';\nimport { ButtonModule } from '@axulus/uikit/button';\nimport { ConnectedOverlayScrollHandler, DomHandler } from '@axulus/uikit/dom';\nimport { RippleModule } from '@axulus/uikit/ripple';\nimport { ObjectUtils, UniqueComponentId, ZIndexUtils } from '@axulus/uikit/utils';\nimport { Subscription } from 'rxjs';\n\nexport const CALENDAR_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Calendar),\n  multi: true\n};\n\nexport interface LocaleSettings {\n  firstDayOfWeek?: number;\n  dayNames?: string[];\n  dayNamesShort?: string[];\n  dayNamesMin?: string[];\n  monthNames?: string[];\n  monthNamesShort?: string[];\n  today?: string;\n  clear?: string;\n  dateFormat?: string;\n  weekHeader?: string;\n}\n\nexport type CalendarTypeView = 'date' | 'month' | 'year';\n\n@Component({\n  selector: 'p-calendar',\n  template: `\n    <span\n      #container\n      [ngClass]=\"{\n        'p-calendar': true,\n        'p-calendar-w-btn': showIcon,\n        'p-calendar-timeonly': timeOnly,\n        'p-calendar-disabled': disabled,\n        'p-focus': focus\n      }\"\n      [ngStyle]=\"style\"\n      [class]=\"styleClass\"\n    >\n      <ng-template [ngIf]=\"!inline\">\n        <input\n          #inputfield\n          type=\"text\"\n          [attr.id]=\"inputId\"\n          [attr.name]=\"name\"\n          [attr.required]=\"required\"\n          [attr.aria-required]=\"required\"\n          [value]=\"inputFieldValue\"\n          (focus)=\"onInputFocus($event)\"\n          (keydown)=\"onInputKeydown($event)\"\n          (click)=\"onInputClick()\"\n          (blur)=\"onInputBlur($event)\"\n          [readonly]=\"readonlyInput\"\n          (input)=\"onUserInput($event)\"\n          [ngStyle]=\"inputStyle\"\n          [class]=\"inputStyleClass\"\n          [placeholder]=\"placeholder || ''\"\n          [disabled]=\"disabled\"\n          [attr.tabindex]=\"tabindex\"\n          [attr.inputmode]=\"touchUI ? 'off' : null\"\n          [ngClass]=\"'p-inputtext p-component'\"\n          autocomplete=\"off\"\n          [attr.aria-labelledby]=\"ariaLabelledBy\"\n        />\n        <i *ngIf=\"showClear && !disabled && value != null\" class=\"p-calendar-clear-icon pi pi-times\" (click)=\"clear()\"></i>\n        <button\n          type=\"button\"\n          [attr.aria-label]=\"iconAriaLabel\"\n          [icon]=\"icon\"\n          pButton\n          pRipple\n          *ngIf=\"showIcon\"\n          (click)=\"onButtonClick($event, inputfield)\"\n          class=\"p-datepicker-trigger\"\n          [disabled]=\"disabled\"\n          tabindex=\"0\"\n        ></button>\n      </ng-template>\n      <div\n        #contentWrapper\n        [class]=\"panelStyleClass\"\n        [ngStyle]=\"panelStyle\"\n        [ngClass]=\"{\n          'p-datepicker p-component': true,\n          'p-datepicker-inline': inline,\n          'p-disabled': disabled,\n          'p-datepicker-timeonly': timeOnly,\n          'p-datepicker-multiple-month': this.numberOfMonths > 1,\n          'p-datepicker-monthpicker': view === 'month',\n          'p-datepicker-touch-ui': touchUI\n        }\"\n        [@overlayAnimation]=\"\n          touchUI\n            ? {\n                value: 'visibleTouchUI',\n                params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions }\n              }\n            : {\n                value: 'visible',\n                params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions }\n              }\n        \"\n        [@.disabled]=\"inline === true\"\n        (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\n        (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\"\n        (click)=\"onOverlayClick($event)\"\n        *ngIf=\"inline || overlayVisible\"\n      >\n        <ng-content select=\"p-header\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n        <ng-container *ngIf=\"!timeOnly\">\n          <div class=\"p-datepicker-group-container\">\n            <div class=\"p-datepicker-group\" *ngFor=\"let month of months; let i = index\">\n              <div class=\"p-datepicker-header\">\n                <button\n                  (keydown)=\"onContainerButtonKeydown($event)\"\n                  class=\"p-datepicker-prev p-link\"\n                  (click)=\"onPrevButtonClick($event)\"\n                  *ngIf=\"i === 0\"\n                  type=\"button\"\n                  pRipple\n                >\n                  <span class=\"p-datepicker-prev-icon pi pi-chevron-left\"></span>\n                </button>\n                <div class=\"p-datepicker-title\">\n                  <button\n                    type=\"button\"\n                    (click)=\"switchToMonthView($event)\"\n                    (keydown)=\"onContainerButtonKeydown($event)\"\n                    *ngIf=\"currentView === 'date'\"\n                    class=\"p-datepicker-month p-link\"\n                    [disabled]=\"switchViewButtonDisabled()\"\n                  >\n                    {{ getMonthName(month.month) }}\n                  </button>\n                  <button\n                    type=\"button\"\n                    (click)=\"switchToYearView($event)\"\n                    (keydown)=\"onContainerButtonKeydown($event)\"\n                    *ngIf=\"currentView !== 'year'\"\n                    class=\"p-datepicker-year p-link\"\n                    [disabled]=\"switchViewButtonDisabled()\"\n                  >\n                    {{ getYear(month) }}\n                  </button>\n                  <span class=\"p-datepicker-decade\" *ngIf=\"currentView === 'year'\">\n                    <ng-container *ngIf=\"!decadeTemplate\"\n                      >{{ yearPickerValues()[0] }} - {{ yearPickerValues()[yearPickerValues().length - 1] }}</ng-container\n                    >\n                    <ng-container *ngTemplateOutlet=\"decadeTemplate; context: { $implicit: yearPickerValues }\"></ng-container>\n                  </span>\n                </div>\n                <button\n                  (keydown)=\"onContainerButtonKeydown($event)\"\n                  class=\"p-datepicker-next p-link\"\n                  (click)=\"onNextButtonClick($event)\"\n                  [style.display]=\"numberOfMonths === 1 ? 'inline-flex' : i === numberOfMonths - 1 ? 'inline-flex' : 'none'\"\n                  type=\"button\"\n                  pRipple\n                >\n                  <span class=\"p-datepicker-next-icon pi pi-chevron-right\"></span>\n                </button>\n              </div>\n              <div class=\"p-datepicker-calendar-container\" *ngIf=\"currentView === 'date'\">\n                <table class=\"p-datepicker-calendar\">\n                  <thead>\n                    <tr>\n                      <th *ngIf=\"showWeek\" class=\"p-datepicker-weekheader p-disabled\">\n                        <span>{{ getTranslation('weekHeader') }}</span>\n                      </th>\n                      <th scope=\"col\" *ngFor=\"let weekDay of weekDays; let begin = first; let end = last\">\n                        <span>{{ weekDay }}</span>\n                      </th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    <tr *ngFor=\"let week of month.dates; let j = index\">\n                      <td *ngIf=\"showWeek\" class=\"p-datepicker-weeknumber\">\n                        <span class=\"p-disabled\">\n                          {{ month.weekNumbers[j] }}\n                        </span>\n                      </td>\n                      <td\n                        *ngFor=\"let date of week\"\n                        [ngClass]=\"{ 'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today }\"\n                      >\n                        <ng-container *ngIf=\"date.otherMonth ? showOtherMonths : true\">\n                          <span\n                            [ngClass]=\"{ 'p-highlight': isSelected(date), 'p-disabled': !date.selectable }\"\n                            (click)=\"onDateSelect($event, date)\"\n                            draggable=\"false\"\n                            (keydown)=\"onDateCellKeydown($event, date, i)\"\n                            pRipple\n                          >\n                            <ng-container *ngIf=\"!dateTemplate\">{{ date.day }}</ng-container>\n                            <ng-container *ngTemplateOutlet=\"dateTemplate; context: { $implicit: date }\"></ng-container>\n                          </span>\n                        </ng-container>\n                      </td>\n                    </tr>\n                  </tbody>\n                </table>\n              </div>\n            </div>\n          </div>\n          <div class=\"p-monthpicker\" *ngIf=\"currentView === 'month'\">\n            <span\n              *ngFor=\"let m of monthPickerValues(); let i = index\"\n              (click)=\"onMonthSelect($event, i)\"\n              (keydown)=\"onMonthCellKeydown($event, i)\"\n              class=\"p-monthpicker-month\"\n              [ngClass]=\"{ 'p-highlight': isMonthSelected(i), 'p-disabled': isMonthDisabled(i) }\"\n              pRipple\n            >\n              {{ m }}\n            </span>\n          </div>\n          <div class=\"p-yearpicker\" *ngIf=\"currentView === 'year'\">\n            <span\n              *ngFor=\"let y of yearPickerValues()\"\n              (click)=\"onYearSelect($event, y)\"\n              (keydown)=\"onYearCellKeydown($event, y)\"\n              class=\"p-yearpicker-year\"\n              [ngClass]=\"{ 'p-highlight': isYearSelected(y) }\"\n              pRipple\n            >\n              {{ y }}\n            </span>\n          </div>\n        </ng-container>\n        <div class=\"p-timepicker\" *ngIf=\"(showTime || timeOnly) && currentView === 'date'\">\n          <div class=\"p-hour-picker\">\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"incrementHour($event)\"\n              (keydown.space)=\"incrementHour($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 0, 1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-up\"></span>\n            </button>\n            <span><ng-container *ngIf=\"currentHour < 10\">0</ng-container>{{ currentHour }}</span>\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"decrementHour($event)\"\n              (keydown.space)=\"decrementHour($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 0, -1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-down\"></span>\n            </button>\n          </div>\n          <div class=\"p-separator\">\n            <span>{{ timeSeparator }}</span>\n          </div>\n          <div class=\"p-minute-picker\">\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"incrementMinute($event)\"\n              (keydown.space)=\"incrementMinute($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 1, 1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-up\"></span>\n            </button>\n            <span><ng-container *ngIf=\"currentMinute < 10\">0</ng-container>{{ currentMinute }}</span>\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"decrementMinute($event)\"\n              (keydown.space)=\"decrementMinute($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 1, -1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-down\"></span>\n            </button>\n          </div>\n          <div class=\"p-separator\" *ngIf=\"showSeconds\">\n            <span>{{ timeSeparator }}</span>\n          </div>\n          <div class=\"p-second-picker\" *ngIf=\"showSeconds\">\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"incrementSecond($event)\"\n              (keydown.space)=\"incrementSecond($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 2, 1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-up\"></span>\n            </button>\n            <span><ng-container *ngIf=\"currentSecond < 10\">0</ng-container>{{ currentSecond }}</span>\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (keydown.enter)=\"decrementSecond($event)\"\n              (keydown.space)=\"decrementSecond($event)\"\n              (mousedown)=\"onTimePickerElementMouseDown($event, 2, -1)\"\n              (mouseup)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.enter)=\"onTimePickerElementMouseUp($event)\"\n              (keyup.space)=\"onTimePickerElementMouseUp($event)\"\n              (mouseleave)=\"onTimePickerElementMouseLeave()\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-down\"></span>\n            </button>\n          </div>\n          <div class=\"p-ampm-picker\" *ngIf=\"hourFormat == '12'\">\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (click)=\"toggleAMPM($event)\"\n              (keydown.enter)=\"toggleAMPM($event)\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-up\"></span>\n            </button>\n            <span>{{ pm ? 'PM' : 'AM' }}</span>\n            <button\n              class=\"p-link\"\n              type=\"button\"\n              (keydown)=\"onContainerButtonKeydown($event)\"\n              (click)=\"toggleAMPM($event)\"\n              (keydown.enter)=\"toggleAMPM($event)\"\n              pRipple\n            >\n              <span class=\"pi pi-chevron-down\"></span>\n            </button>\n          </div>\n        </div>\n        <div class=\"p-datepicker-buttonbar\" *ngIf=\"showButtonBar\">\n          <button\n            type=\"button\"\n            [label]=\"getTranslation('today')\"\n            (keydown)=\"onContainerButtonKeydown($event)\"\n            (click)=\"onTodayButtonClick($event)\"\n            pButton\n            pRipple\n            [ngClass]=\"[todayButtonStyleClass]\"\n          ></button>\n          <button\n            type=\"button\"\n            [label]=\"getTranslation('clear')\"\n            (keydown)=\"onContainerButtonKeydown($event)\"\n            (click)=\"onClearButtonClick($event)\"\n            pButton\n            pRipple\n            [ngClass]=\"[clearButtonStyleClass]\"\n          ></button>\n        </div>\n        <ng-content select=\"p-footer\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n      </div>\n    </span>\n  `,\n  animations: [\n    trigger('overlayAnimation', [\n      state(\n        'visibleTouchUI',\n        style({\n          transform: 'translate(-50%,-50%)',\n          opacity: 1\n        })\n      ),\n      transition('void => visible', [\n        style({ opacity: 0, transform: 'scaleY(0.8)' }),\n        animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))\n      ]),\n      transition('visible => void', [animate('{{hideTransitionParams}}', style({ opacity: 0 }))]),\n      transition('void => visibleTouchUI', [\n        style({ opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)' }),\n        animate('{{showTransitionParams}}')\n      ]),\n      transition('visibleTouchUI => void', [\n        animate(\n          '{{hideTransitionParams}}',\n          style({\n            opacity: 0,\n            transform: 'translate3d(-50%, -40%, 0) scale(0.9)'\n          })\n        )\n      ])\n    ])\n  ],\n  host: {\n    class: 'p-element p-inputwrapper',\n    '[class.p-inputwrapper-filled]': 'filled',\n    '[class.p-inputwrapper-focus]': 'focus',\n    '[class.p-calendar-clearable]': 'showClear && !disabled'\n  },\n  providers: [CALENDAR_VALUE_ACCESSOR],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./calendar.css']\n})\nexport class Calendar implements OnInit, OnDestroy, ControlValueAccessor {\n  @Input() style: any;\n\n  @Input() styleClass: string;\n\n  @Input() inputStyle: any;\n\n  @Input() inputId: string;\n\n  @Input() name: string;\n\n  @Input() inputStyleClass: string;\n\n  @Input() placeholder: string;\n\n  @Input() ariaLabelledBy: string;\n\n  @Input() iconAriaLabel: string;\n\n  @Input() disabled: any;\n\n  @Input() dateFormat: string;\n\n  @Input() multipleSeparator: string = ',';\n\n  @Input() rangeSeparator: string = '-';\n\n  @Input() inline: boolean = false;\n\n  @Input() showOtherMonths: boolean = true;\n\n  @Input() selectOtherMonths: boolean;\n\n  @Input() showIcon: boolean;\n\n  @Input() icon: string = 'pi pi-calendar';\n\n  @Input() appendTo: any;\n\n  @Input() readonlyInput: boolean;\n\n  @Input() shortYearCutoff: any = '+10';\n\n  @Input() monthNavigator: boolean;\n\n  @Input() yearNavigator: boolean;\n\n  @Input() hourFormat: string = '24';\n\n  @Input() timeOnly: boolean;\n\n  @Input() stepHour: number = 1;\n\n  @Input() stepMinute: number = 1;\n\n  @Input() stepSecond: number = 1;\n\n  @Input() showSeconds: boolean = false;\n\n  @Input() required: boolean;\n\n  @Input() showOnFocus: boolean = true;\n\n  @Input() showWeek: boolean = false;\n\n  @Input() showClear: boolean = false;\n\n  @Input() dataType: string = 'date';\n\n  @Input() selectionMode: string = 'single';\n\n  @Input() maxDateCount: number;\n\n  @Input() showButtonBar: boolean;\n\n  @Input() todayButtonStyleClass: string = 'p-button-text';\n\n  @Input() clearButtonStyleClass: string = 'p-button-text';\n\n  @Input() autoZIndex: boolean = true;\n\n  @Input() baseZIndex: number = 0;\n\n  @Input() panelStyleClass: string;\n\n  @Input() panelStyle: any;\n\n  @Input() keepInvalid: boolean = false;\n\n  @Input() hideOnDateTimeSelect: boolean = true;\n\n  @Input() touchUI: boolean;\n\n  @Input() timeSeparator: string = ':';\n\n  @Input() focusTrap: boolean = true;\n\n  @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n  @Input() hideTransitionOptions: string = '.1s linear';\n\n  @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n  @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n  @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n  @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n  @Output() onClear: EventEmitter<any> = new EventEmitter();\n\n  @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n  @Output() onTodayClick: EventEmitter<any> = new EventEmitter();\n\n  @Output() onClearClick: EventEmitter<any> = new EventEmitter();\n\n  @Output() onMonthChange: EventEmitter<any> = new EventEmitter();\n\n  @Output() onYearChange: EventEmitter<any> = new EventEmitter();\n\n  @Output() onClickOutside: EventEmitter<any> = new EventEmitter();\n\n  @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n  @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n  @Input() tabindex: number;\n\n  @ViewChild('container', { static: false }) containerViewChild: ElementRef;\n\n  @ViewChild('inputfield', { static: false }) inputfieldViewChild: ElementRef;\n\n  @ViewChild('contentWrapper', { static: false }) set content(content: ElementRef) {\n    this.contentViewChild = content;\n\n    if (this.contentViewChild) {\n      if (this.isMonthNavigate) {\n        Promise.resolve(null).then(() => this.updateFocus());\n        this.isMonthNavigate = false;\n      } else {\n        if (!this.focus) {\n          this.initFocusableCell();\n        }\n      }\n    }\n  }\n\n  contentViewChild: ElementRef;\n\n  value: any;\n\n  dates: any[];\n\n  months: any[];\n\n  weekDays: string[];\n\n  currentMonth: number;\n\n  currentYear: number;\n\n  currentHour: number;\n\n  currentMinute: number;\n\n  currentSecond: number;\n\n  pm: boolean;\n\n  mask: HTMLDivElement;\n\n  maskClickListener: Function;\n\n  overlay: HTMLDivElement;\n\n  responsiveStyleElement: any;\n\n  overlayVisible: boolean;\n\n  onModelChange: Function = () => {};\n\n  onModelTouched: Function = () => {};\n\n  calendarElement: any;\n\n  timePickerTimer: any;\n\n  documentClickListener: any;\n\n  animationEndListener: any;\n\n  ticksTo1970: number;\n\n  yearOptions: number[];\n\n  focus: boolean;\n\n  isKeydown: boolean;\n\n  filled: boolean;\n\n  inputFieldValue: string = null;\n\n  _minDate: Date;\n\n  _maxDate: Date;\n\n  _showTime: boolean;\n\n  _yearRange: string;\n\n  preventDocumentListener: boolean;\n\n  dateTemplate: TemplateRef<any>;\n\n  headerTemplate: TemplateRef<any>;\n\n  footerTemplate: TemplateRef<any>;\n\n  disabledDateTemplate: TemplateRef<any>;\n\n  decadeTemplate: TemplateRef<any>;\n\n  _disabledDates: Array<Date>;\n\n  _disabledDays: Array<number>;\n\n  selectElement: any;\n\n  todayElement: any;\n\n  focusElement: any;\n\n  scrollHandler: any;\n\n  documentResizeListener: any;\n\n  navigationState: any = null;\n\n  isMonthNavigate: boolean;\n\n  initialized: boolean;\n\n  translationSubscription: Subscription;\n\n  _locale: LocaleSettings;\n\n  _responsiveOptions: any[];\n\n  currentView: string;\n\n  attributeSelector: string;\n\n  _numberOfMonths: number = 1;\n\n  _firstDayOfWeek: number;\n\n  _view: CalendarTypeView = 'date';\n\n  preventFocus: boolean;\n\n  @Input() get view(): CalendarTypeView {\n    return this._view;\n  }\n\n  set view(view: CalendarTypeView) {\n    this._view = view;\n    this.currentView = this._view;\n  }\n\n  @Input() get defaultDate(): Date {\n    return this._defaultDate;\n  }\n\n  set defaultDate(defaultDate: Date) {\n    this._defaultDate = defaultDate;\n\n    if (this.initialized) {\n      const date = defaultDate || new Date();\n      this.currentMonth = date.getMonth();\n      this.currentYear = date.getFullYear();\n      this.initTime(date);\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  _defaultDate: Date;\n\n  @Input() get minDate(): Date {\n    return this._minDate;\n  }\n\n  set minDate(date: Date) {\n    this._minDate = date;\n\n    if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  @Input() get maxDate(): Date {\n    return this._maxDate;\n  }\n\n  set maxDate(date: Date) {\n    this._maxDate = date;\n\n    if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  @Input() get disabledDates(): Date[] {\n    return this._disabledDates;\n  }\n\n  set disabledDates(disabledDates: Date[]) {\n    this._disabledDates = disabledDates;\n    if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  @Input() get disabledDays(): number[] {\n    return this._disabledDays;\n  }\n\n  set disabledDays(disabledDays: number[]) {\n    this._disabledDays = disabledDays;\n\n    if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  @Input() get yearRange(): string {\n    return this._yearRange;\n  }\n\n  set yearRange(yearRange: string) {\n    this._yearRange = yearRange;\n\n    if (yearRange) {\n      const years = yearRange.split(':');\n      const yearStart = parseInt(years[0]);\n      const yearEnd = parseInt(years[1]);\n\n      this.populateYearOptions(yearStart, yearEnd);\n    }\n  }\n\n  @Input() get showTime(): boolean {\n    return this._showTime;\n  }\n\n  set showTime(showTime: boolean) {\n    this._showTime = showTime;\n\n    if (this.currentHour === undefined) {\n      this.initTime(this.value || new Date());\n    }\n    this.updateInputfield();\n  }\n\n  get locale() {\n    return this._locale;\n  }\n\n  @Input() get responsiveOptions(): any[] {\n    return this._responsiveOptions;\n  }\n\n  set responsiveOptions(responsiveOptions: any[]) {\n    this._responsiveOptions = responsiveOptions;\n\n    this.destroyResponsiveStyleElement();\n    this.createResponsiveStyle();\n  }\n\n  @Input() get numberOfMonths(): number {\n    return this._numberOfMonths;\n  }\n\n  set numberOfMonths(numberOfMonths: number) {\n    this._numberOfMonths = numberOfMonths;\n\n    this.destroyResponsiveStyleElement();\n    this.createResponsiveStyle();\n  }\n\n  @Input() get firstDayOfWeek(): number {\n    return this._firstDayOfWeek;\n  }\n\n  set firstDayOfWeek(firstDayOfWeek: number) {\n    this._firstDayOfWeek = firstDayOfWeek;\n\n    this.createWeekDays();\n  }\n\n  @Input()\n  set locale(newLocale: LocaleSettings) {\n    console.warn('Locale property has no effect, use new i18n API instead.');\n  }\n\n  constructor(\n    public el: ElementRef,\n    public renderer: Renderer2,\n    public cd: ChangeDetectorRef,\n    private zone: NgZone,\n    private config: PrimeNGConfig,\n    public overlayService: OverlayService\n  ) {}\n\n  ngOnInit() {\n    this.attributeSelector = UniqueComponentId();\n    const date = this.defaultDate || new Date();\n    this.createResponsiveStyle();\n    this.currentMonth = date.getMonth();\n    this.currentYear = date.getFullYear();\n    this.currentView = this.view;\n\n    if (this.view === 'date') {\n      this.createWeekDays();\n      this.initTime(date);\n      this.createMonths(this.currentMonth, this.currentYear);\n      this.ticksTo1970 =\n        ((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000;\n    }\n\n    this.translationSubscription = this.config.translationObserver.subscribe(() => {\n      this.createWeekDays();\n      this.cd.markForCheck();\n    });\n\n    this.initialized = true;\n  }\n\n  ngAfterContentInit() {\n    this.templates.forEach((item) => {\n      switch (item.getType()) {\n        case 'date':\n          this.dateTemplate = item.template;\n          break;\n\n        case 'decade':\n          this.decadeTemplate = item.template;\n          break;\n\n        case 'disabledDate':\n          this.disabledDateTemplate = item.template;\n          break;\n\n        case 'header':\n          this.headerTemplate = item.template;\n          break;\n\n        case 'footer':\n          this.footerTemplate = item.template;\n          break;\n\n        default:\n          this.dateTemplate = item.template;\n          break;\n      }\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.inline) {\n      this.contentViewChild && this.contentViewChild.nativeElement.setAttribute(this.attributeSelector, '');\n\n      if (!this.disabled) {\n        this.initFocusableCell();\n        if (this.numberOfMonths === 1) {\n          this.contentViewChild.nativeElement.style.width = DomHandler.getOuterWidth(this.containerViewChild.nativeElement) + 'px';\n        }\n      }\n    }\n  }\n\n  getTranslation(option: string) {\n    return this.config.getTranslation(option);\n  }\n\n  populateYearOptions(start, end) {\n    this.yearOptions = [];\n\n    for (let i = start; i <= end; i++) {\n      this.yearOptions.push(i);\n    }\n  }\n\n  createWeekDays() {\n    this.weekDays = [];\n    let dayIndex = this.getFirstDateOfWeek();\n    let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);\n    for (let i = 0; i < 7; i++) {\n      this.weekDays.push(dayLabels[dayIndex]);\n      dayIndex = dayIndex == 6 ? 0 : ++dayIndex;\n    }\n  }\n\n  monthPickerValues() {\n    let monthPickerValues = [];\n    for (let i = 0; i <= 11; i++) {\n      monthPickerValues.push(this.config.getTranslation('monthNamesShort')[i]);\n    }\n\n    return monthPickerValues;\n  }\n\n  yearPickerValues() {\n    let yearPickerValues = [];\n    let base = this.currentYear - (this.currentYear % 10);\n    for (let i = 0; i < 10; i++) {\n      yearPickerValues.push(base + i);\n    }\n\n    return yearPickerValues;\n  }\n\n  createMonths(month: number, year: number) {\n    this.months = this.months = [];\n    for (let i = 0; i < this.numberOfMonths; i++) {\n      let m = month + i;\n      let y = year;\n      if (m > 11) {\n        m = (m % 11) - 1;\n        y = year + 1;\n      }\n\n      this.months.push(this.createMonth(m, y));\n    }\n  }\n\n  getWeekNumber(date: Date) {\n    let checkDate = new Date(date.getTime());\n    checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n    let time = checkDate.getTime();\n    checkDate.setMonth(0);\n    checkDate.setDate(1);\n    return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;\n  }\n\n  createMonth(month: number, year: number) {\n    let dates = [];\n    let firstDay = this.getFirstDayOfMonthIndex(month, year);\n    let daysLength = this.getDaysCountInMonth(month, year);\n    let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n    let dayNo = 1;\n    let today = new Date();\n    let weekNumbers = [];\n    let monthRows = Math.ceil((daysLength + firstDay) / 7);\n\n    for (let i = 0; i < monthRows; i++) {\n      let week = [];\n\n      if (i == 0) {\n        for (let j = prevMonthDaysLength - firstDay + 1; j <= prevMonthDaysLength; j++) {\n          let prev = this.getPreviousMonthAndYear(month, year);\n          week.push({\n            day: j,\n            month: prev.month,\n            year: prev.year,\n            otherMonth: true,\n            today: this.isToday(today, j, prev.month, prev.year),\n            selectable: this.isSelectable(j, prev.month, prev.year, true)\n          });\n        }\n\n        let remainingDaysLength = 7 - week.length;\n        for (let j = 0; j < remainingDaysLength; j++) {\n          week.push({\n            day: dayNo,\n            month: month,\n            year: year,\n            today: this.isToday(today, dayNo, month, year),\n            selectable: this.isSelectable(dayNo, month, year, false)\n          });\n          dayNo++;\n        }\n      } else {\n        for (let j = 0; j < 7; j++) {\n          if (dayNo > daysLength) {\n            let next = this.getNextMonthAndYear(month, year);\n            week.push({\n              day: dayNo - daysLength,\n              month: next.month,\n              year: next.year,\n              otherMonth: true,\n              today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n              selectable: this.isSelectable(dayNo - daysLength, next.month, next.year, true)\n            });\n          } else {\n            week.push({\n              day: dayNo,\n              month: month,\n              year: year,\n              today: this.isToday(today, dayNo, month, year),\n              selectable: this.isSelectable(dayNo, month, year, false)\n            });\n          }\n\n          dayNo++;\n        }\n      }\n\n      if (this.showWeek) {\n        weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));\n      }\n\n      dates.push(week);\n    }\n\n    return {\n      month: month,\n      year: year,\n      dates: dates,\n      weekNumbers: weekNumbers\n    };\n  }\n\n  initTime(date: Date) {\n    this.pm = date.getHours() > 11;\n\n    if (this.showTime) {\n      this.currentMinute = date.getMinutes();\n      this.currentSecond = date.getSeconds();\n      this.setCurrentHourPM(date.getHours());\n    } else if (this.timeOnly) {\n      this.currentMinute = 0;\n      this.currentHour = 0;\n      this.currentSecond = 0;\n    }\n  }\n\n  navBackward(event) {\n    if (this.disabled) {\n      event.preventDefault();\n      return;\n    }\n\n    this.isMonthNavigate = true;\n\n    if (this.currentView === 'month') {\n      this.decrementYear();\n      setTimeout(() => {\n        this.updateFocus();\n      }, 1);\n    } else if (this.currentView === 'year') {\n      this.decrementDecade();\n      setTimeout(() => {\n        this.updateFocus();\n      }, 1);\n    } else {\n      if (this.currentMonth === 0) {\n        this.currentMonth = 11;\n        this.decrementYear();\n      } else {\n        this.currentMonth--;\n      }\n\n      this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  navForward(event) {\n    if (this.disabled) {\n      event.preventDefault();\n      return;\n    }\n\n    this.isMonthNavigate = true;\n\n    if (this.currentView === 'month') {\n      this.incrementYear();\n      setTimeout(() => {\n        this.updateFocus();\n      }, 1);\n    } else if (this.currentView === 'year') {\n      this.incrementDecade();\n      setTimeout(() => {\n        this.updateFocus();\n      }, 1);\n    } else {\n      if (this.currentMonth === 11) {\n        this.currentMonth = 0;\n        this.incrementYear();\n      } else {\n        this.currentMonth++;\n      }\n\n      this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n      this.createMonths(this.currentMonth, this.currentYear);\n    }\n  }\n\n  decrementYear() {\n    this.currentYear--;\n\n    if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n      let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n      this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);\n    }\n  }\n\n  decrementDecade() {\n    this.currentYear = this.currentYear - 10;\n  }\n\n  incrementDecade() {\n    this.currentYear = this.currentYear + 10;\n  }\n\n  incrementYear() {\n    this.currentYear++;\n\n    if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n      let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n      this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);\n    }\n  }\n\n  switchToMonthView(event) {\n    this.setCurrentView('month');\n    event.preventDefault();\n  }\n\n  switchToYearView(event) {\n    this.setCurrentView('year');\n    event.preventDefault();\n  }\n\n  onDateSelect(event, dateMeta) {\n    if (this.disabled || !dateMeta.selectable) {\n      event.preventDefault();\n      return;\n    }\n\n    if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n      this.value = this.value.filter((date, i) => {\n        return !this.isDateEquals(date, dateMeta);\n      });\n      if (this.value.length === 0) {\n        this.value = null;\n      }\n      this.updateModel(this.value);\n    } else {\n      if (this.shouldSelectDate(dateMeta)) {\n        this.selectDate(dateMeta);\n      }\n    }\n\n    if (this.isSingleSelection() && this.hideOnDateTimeSelect) {\n      setTimeout(() => {\n        event.preventDefault();\n        this.hideOverlay();\n\n        if (this.mask) {\n          this.disableModality();\n        }\n\n        this.cd.markForCheck();\n      }, 150);\n    }\n\n    this.updateInputfield();\n    event.preventDefault();\n  }\n\n  shouldSelectDate(dateMeta) {\n    if (this.isMultipleSelection()) return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;\n    else return true;\n  }\n\n  onMonthSelect(event, index) {\n    if (this.view === 'month') {\n      this.onDateSelect(event, { year: this.currentYear, month: index, day: 1, selectable: true });\n    } else {\n      this.currentMonth = index;\n      this.createMonths(this.currentMonth, this.currentYear);\n      this.setCurrentView('date');\n      this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n    }\n  }\n\n  onYearSelect(event, year) {\n    if (this.view === 'year') {\n      this.onDateSelect(event, { year: year, month: 0, day: 1, selectable: true });\n    } else {\n      this.currentYear = year;\n      this.setCurrentView('month');\n      this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n    }\n  }\n\n  updateInputfield() {\n    let formattedValue = '';\n\n    if (this.value) {\n      if (this.isSingleSelection()) {\n        formattedValue = this.formatDateTime(this.value);\n      } else if (this.isMultipleSelection()) {\n        for (let i = 0; i < this.value.length; i++) {\n          let dateAsString = this.formatDateTime(this.value[i]);\n          formattedValue += dateAsString;\n          if (i !== this.value.length - 1) {\n            formattedValue += this.multipleSeparator + ' ';\n          }\n        }\n      } else if (this.isRangeSelection()) {\n        if (this.value && this.value.length) {\n          let startDate = this.value[0];\n          let endDate = this.value[1];\n\n          formattedValue = this.formatDateTime(startDate);\n          if (endDate) {\n            formattedValue += ' ' + this.rangeSeparator + ' ' + this.formatDateTime(endDate);\n          }\n        }\n      }\n    }\n\n    this.inputFieldValue = formattedValue;\n    this.updateFilledState();\n    if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n      this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n    }\n  }\n\n  formatDateTime(date) {\n    let formattedValue = this.keepInvalid ? date : null;\n\n    if (this.isValidDate(date)) {\n      if (this.timeOnly) {\n        formattedValue = this.formatTime(date);\n      } else {\n        formattedValue = this.formatDate(date, this.getDateFormat());\n        if (this.showTime) {\n          formattedValue += ' ' + this.formatTime(date);\n        }\n      }\n    }\n\n    return formattedValue;\n  }\n\n  setCurrentHourPM(hours: number) {\n    if (this.hourFormat == '12') {\n      this.pm = hours > 11;\n      if (hours >= 12) {\n        this.currentHour = hours == 12 ? 12 : hours - 12;\n      } else {\n        this.currentHour = hours == 0 ? 12 : hours;\n      }\n    } else {\n      this.currentHour = hours;\n    }\n  }\n\n  setCurrentView(currentView: CalendarTypeView) {\n    this.currentView = currentView;\n    this.cd.detectChanges();\n    this.alignOverlay();\n  }\n\n  selectDate(dateMeta) {\n    let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n    if (this.showTime) {\n      if (this.hourFormat == '12') {\n        if (this.currentHour === 12) date.setHours(this.pm ? 12 : 0);\n        else date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n      } else {\n        date.setHours(this.currentHour);\n      }\n\n      date.setMinutes(this.currentMinute);\n      date.setSeconds(this.currentSecond);\n    }\n\n    if (this.minDate && this.minDate > date) {\n      date = this.minDate;\n      this.setCurrentHourPM(date.getHours());\n      this.currentMinute = date.getMinutes();\n      this.currentSecond = date.getSeconds();\n    }\n\n    if (this.maxDate && this.maxDate < date) {\n      date = this.maxDate;\n      this.setCurrentHourPM(date.getHours());\n      this.currentMinute = date.getMinutes();\n      this.currentSecond = date.getSeconds();\n    }\n\n    if (this.isSingleSelection()) {\n      this.updateModel(date);\n    } else if (this.isMultipleSelection()) {\n      this.updateModel(this.value ? [...this.value, date] : [date]);\n    } else if (this.isRangeSelection()) {\n      if (this.value && this.value.length) {\n        let startDate = this.value[0];\n        let endDate = this.value[1];\n\n        if (!endDate && date.getTime() >= startDate.getTime()) {\n          endDate = date;\n        } else {\n          startDate = date;\n          endDate = null;\n        }\n\n        this.updateModel([startDate, endDate]);\n      } else {\n        this.updateModel([date, null]);\n      }\n    }\n\n    this.onSelect.emit(date);\n  }\n\n  updateModel(value) {\n    this.value = value;\n\n    if (this.dataType == 'date') {\n      this.onModelChange(this.value);\n    } else if (this.dataType == 'string') {\n      if (this.isSingleSelection()) {\n        this.onModelChange(this.formatDateTime(this.value));\n      } else {\n        let stringArrValue = null;\n        if (this.value) {\n          stringArrValue = this.value.map((date) => this.formatDateTime(date));\n        }\n        this.onModelChange(stringArrValue);\n      }\n    }\n  }\n\n  getFirstDayOfMonthIndex(month: number, year: number) {\n    let day = new Date();\n    day.setDate(1);\n    day.setMonth(month);\n    day.setFullYear(year);\n\n    let dayIndex = day.getDay() + this.getSundayIndex();\n    return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n  }\n\n  getDaysCountInMonth(month: number, year: number) {\n    return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n  }\n\n  getDaysCountInPrevMonth(month: number, year: number) {\n    let prev = this.getPreviousMonthAndYear(month, year);\n    return this.getDaysCountInMonth(prev.month, prev.year);\n  }\n\n  getPreviousMonthAndYear(month: number, year: number) {\n    let m, y;\n\n    if (month === 0) {\n      m = 11;\n      y = year - 1;\n    } else {\n      m = month - 1;\n      y = year;\n    }\n\n    return { month: m, year: y };\n  }\n\n  getNextMonthAndYear(month: number, year: number) {\n    let m, y;\n\n    if (month === 11) {\n      m = 0;\n      y = year + 1;\n    } else {\n      m = month + 1;\n      y = year;\n    }\n\n    return { month: m, year: y };\n  }\n\n  getSundayIndex() {\n    let firstDayOfWeek = this.getFirstDateOfWeek();\n\n    return firstDayOfWeek > 0 ? 7 - firstDayOfWeek : 0;\n  }\n\n  isSelected(dateMeta): boolean {\n    if (this.value) {\n      if (this.isSingleSelection()) {\n        return this.isDateEquals(this.value, dateMeta);\n      } else if (this.isMultipleSelection()) {\n        let selected = false;\n        for (let date of this.value) {\n          selected = this.isDateEquals(date, dateMeta);\n          if (selected) {\n            break;\n          }\n        }\n\n        return selected;\n      } else if (this.isRangeSelection()) {\n        if (this.value[1])\n          return (\n            this.isDateEquals(this.value[0], dateMeta) ||\n            this.isDateEquals(this.value[1], dateMeta) ||\n            this.isDateBetween(this.value[0], this.value[1], dateMeta)\n          );\n        else return this.isDateEquals(this.value[0], dateMeta);\n      }\n    } else {\n      return false;\n    }\n  }\n\n  isComparable() {\n    return this.value != null && typeof this.value !== 'string';\n  }\n\n  isMonthSelected(month) {\n    if (this.isComparable() && !this.isMultipleSelection()) {\n      const [start, end] = this.isRangeSelection() ? this.value : [this.value, this.value];\n      const selected = new Date(this.currentYear, month, 1);\n      return selected >= start && selected <= (end ?? start);\n    }\n    return false;\n  }\n\n  isMonthDisabled(month) {\n    return !this.isSelectable(1, month, this.currentYear, false);\n  }\n\n  isYearSelected(year) {\n    if (this.isComparable()) {\n      let value = this.isRangeSelection() ? this.value[0] : this.value;\n\n      return !this.isMultipleSelection() ? value.getFullYear() === year : false;\n    }\n\n    return false;\n  }\n\n  isDateEquals(value, dateMeta) {\n    if (value && value instanceof Date)\n      return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n    else return false;\n  }\n\n  isDateBetween(start, end, dateMeta) {\n    let between: boolean = false;\n    if (start && end) {\n      let date: Date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n      return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n    }\n\n    return between;\n  }\n\n  isSingleSelection(): boolean {\n    return this.selectionMode === 'single';\n  }\n\n  isRangeSelection(): boolean {\n    return this.selectionMode === 'range';\n  }\n\n  isMultipleSelection(): boolean {\n    return this.selectionMode === 'multiple';\n  }\n\n  isToday(today, day, month, year): boolean {\n    return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n  }\n\n  isSelectable(day, month, year, otherMonth): boolean {\n    let validMin = true;\n    let validMax = true;\n    let validDate = true;\n    let validDay = true;\n\n    if (otherMonth && !this.selectOtherMonths) {\n      return false;\n    }\n\n    if (this.minDate) {\n      if (this.minDate.getFullYear() > year) {\n        validMin = false;\n      } else if (this.minDate.getFullYear() === year) {\n        if (this.minDate.getMonth() > month) {\n          validMin = false;\n        } else if (this.minDate.getMonth() === month) {\n          if (this.minDate.getDate() > day) {\n            validMin = false;\n          }\n        }\n      }\n    }\n\n    if (this.maxDate) {\n      if (this.maxDate.getFullYear() < year) {\n        validMax = false;\n      } else if (this.maxDate.getFullYear() === year) {\n        if (this.maxDate.getMonth() < month) {\n          validMax = false;\n        } else if (this.maxDate.getMonth() === month) {\n          if (this.maxDate.getDate() < day) {\n            validMax = false;\n          }\n        }\n      }\n    }\n\n    if (this.disabledDates) {\n      validDate = !this.isDateDisabled(day, month, year);\n    }\n\n    if (this.disabledDays) {\n      validDay = !this.isDayDisabled(day, month, year);\n    }\n\n    return validMin && validMax && validDate && validDay;\n  }\n\n  isDateDisabled(day: number, month: number, year: number): boolean {\n    if (this.disabledDates) {\n      for (let disabledDate of this.disabledDates) {\n        if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  isDayDisabled(day: number, month: number, year: number): boolean {\n    if (this.disabledDays) {\n      let weekday = new Date(year, month, day);\n      let weekdayNumber = weekday.getDay();\n      return this.disabledDays.indexOf(weekdayNumber) !== -1;\n    }\n    return false;\n  }\n\n  onInputFocus(event: Event) {\n    this.focus = true;\n    if (this.showOnFocus) {\n      this.showOverlay();\n    }\n    this.onFocus.emit(event);\n  }\n\n  onInputClick() {\n    if (this.showOnFocus && !this.overlayVisible) {\n      this.showOverlay();\n    }\n  }\n\n  onInputBlur(event: Event) {\n    this.focus = false;\n    this.onBlur.emit(event);\n    if (!this.keepInvalid) {\n      this.updateInputfield();\n    }\n    this.onModelTouched();\n  }\n\n  onButtonClick(event, inputfield) {\n    if (!this.overlayVisible) {\n      inputfield.focus();\n      this.showOverlay();\n    } else {\n      this.hideOverlay();\n    }\n  }\n\n  clear() {\n    this.inputFieldValue = null;\n    this.value = null;\n    this.onModelChange(this.value);\n    this.onClear.emit();\n  }\n\n  onOverlayClick(event) {\n    this.overlayService.add({\n      originalEvent: event,\n      target: this.el.nativeElement\n    });\n  }\n\n  getMonthName(index) {\n    return this.config.getTranslation('monthNames')[index];\n  }\n\n  getYear(month) {\n    return this.currentView === 'month' ? this.currentYear : month.year;\n  }\n\n  switchViewButtonDisabled() {\n    return this.numberOfMonths > 1 || this.disabled;\n  }\n\n  onPrevButtonClick(event) {\n    this.navigationState = { backward: true, button: true };\n    this.navBackward(event);\n  }\n\n  onNextButtonClick(event) {\n    this.navigationState = { backward: false, button: true };\n    this.navForward(event);\n  }\n\n  onContainerButtonKeydown(event) {\n    switch (event.which) {\n      //tab\n      case 9:\n        if (!this.inline) {\n          this.trapFocus(event);\n        }\n        break;\n\n      //escape\n      case 27:\n        this.overlayVisible = false;\n        event.preventDefault();\n        break;\n\n      default:\n        //Noop\n        break;\n    }\n  }\n\n  onInputKeydown(event) {\n    this.isKeydown = true;\n    if (event.keyCode === 40 && this.contentViewChild) {\n      this.trapFocus(event);\n    } else if (event.keyCode === 27) {\n      if (this.overlayVisible) {\n        this.overlayVisible = false;\n        event.preventDefault();\n      }\n    } else if (event.keyCode === 13) {\n      if (this.overlayVisible) {\n        this.overlayVisible = false;\n        event.preventDefault();\n      }\n    } else if (event.keyCode === 9 && this.contentViewChild) {\n      DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach((el) => (el.tabIndex = '-1'));\n      if (this.overlayVisible) {\n        this.overlayVisible = false;\n      }\n    }\n  }\n\n  onDateCellKeydown(event, date, groupIndex) {\n    const cellContent = event.currentTarget;\n    const cell = cellContent.parentElement;\n\n    switch (event.which) {\n      //down arrow\n      case 40: {\n        cellContent.tabIndex = '-1';\n        let cellIndex = DomHandler.index(cell);\n        let nextRow = cell.parentElement.nextElementSibling;\n        if (nextRow) {\n          let focusCell = nextRow.children[cellIndex].children[0];\n          if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n            this.navigationState = { backward: false };\n            this.navForward(event);\n          } else {\n            nextRow.children[cellIndex].children[0].tabIndex = '0';\n            nextRow.children[cellIndex].children[0].focus();\n          }\n        } else {\n          this.navigationState = { backward: false };\n          this.navForward(event);\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //up arrow\n      case 38: {\n        cellContent.tabIndex = '-1';\n        let cellIndex = DomHandler.index(cell);\n        let prevRow = cell.parentElement.previousElementSibling;\n        if (prevRow) {\n          let focusCell = prevRow.children[cellIndex].children[0];\n          if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n            this.navigationState = { backward: true };\n            this.navBackward(event);\n          } else {\n            focusCell.tabIndex = '0';\n            focusCell.focus();\n          }\n        } else {\n          this.navigationState = { backward: true };\n          this.navBackward(event);\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //left arrow\n      case 37: {\n        cellContent.tabIndex = '-1';\n        let prevCell = cell.previousElementSibling;\n        if (prevCell) {\n          let focusCell = prevCell.children[0];\n          if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {\n            this.navigateToMonth(true, groupIndex);\n          } else {\n            focusCell.tabIndex = '0';\n            focusCell.focus();\n          }\n        } else {\n          this.navigateToMonth(true, groupIndex);\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //right arrow\n      case 39: {\n        cellContent.tabIndex = '-1';\n        let nextCell = cell.nextElementSibling;\n        if (nextCell) {\n          let focusCell = nextCell.children[0];\n          if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n            this.navigateToMonth(false, groupIndex);\n          } else {\n            focusCell.tabIndex = '0';\n            focusCell.focus();\n          }\n        } else {\n          this.navigateToMonth(false, groupIndex);\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //enter\n      //space\n      case 13:\n      case 32: {\n        this.onDateSelect(event, date);\n        event.preventDefault();\n        break;\n      }\n\n      //escape\n      case 27: {\n        this.overlayVisible = false;\n        event.preventDefault();\n        break;\n      }\n\n      //tab\n      case 9: {\n        if (!this.inline) {\n          this.trapFocus(event);\n        }\n        break;\n      }\n\n      default:\n        //no op\n        break;\n    }\n  }\n\n  onMonthCellKeydown(event, index) {\n    const cell = event.currentTarget;\n    switch (event.which) {\n      //arrows\n      case 38:\n      case 40: {\n        cell.tabIndex = '-1';\n        var cells = cell.parentElement.children;\n        var cellIndex = DomHandler.index(cell);\n        let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex - 3];\n        if (nextCell) {\n          nextCell.tabIndex = '0';\n          nextCell.focus();\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //left arrow\n      case 37: {\n        cell.tabIndex = '-1';\n        let prevCell = cell.previousElementSibling;\n        if (prevCell) {\n          prevCell.tabIndex = '0';\n          prevCell.focus();\n        } else {\n          this.navigationState = { backward: true };\n          this.navBackward(event);\n        }\n\n        event.preventDefault();\n        break;\n      }\n\n      //right arrow\n      case 39: {\n        cell.tabIndex = '-1';\n        let nextCell = cell.nextElementSibling;\n        if (nextCell) {\n          nextCell.tabIndex = '0';\n          nextCell.focus();\n        } else {\n          this.navigationState = { backward: false };\n          this.navForward(event);\n        }\n\n        event.preventDefault();\n        break;\n      }\n\n      //enter\n      case 13: {\n        this.onMonthSelect(event, index);\n        event.preventDefault();\n        break;\n      }\n\n      //enter\n      //space\n      case 13:\n      case 32: {\n        this.overlayVisible = false;\n        event.preventDefault();\n        break;\n      }\n\n      //escape\n      case 27: {\n        this.overlayVisible = false;\n        event.preventDefault();\n        break;\n      }\n\n      //tab\n      case 9: {\n        if (!this.inline) {\n          this.trapFocus(event);\n        }\n        break;\n      }\n\n      default:\n        //no op\n        break;\n    }\n  }\n\n  onYearCellKeydown(event, index) {\n    const cell = event.currentTarget;\n\n    switch (event.which) {\n      //arrows\n      case 38:\n      case 40: {\n        cell.tabIndex = '-1';\n        var cells = cell.parentElement.children;\n        var cellIndex = DomHandler.index(cell);\n        let nextCell = cells[event.which === 40 ? cellIndex + 2 : cellIndex - 2];\n        if (nextCell) {\n          nextCell.tabIndex = '0';\n          nextCell.focus();\n        }\n        event.preventDefault();\n        break;\n      }\n\n      //left arrow\n      case 37: {\n        cell.tabIndex = '-1';\n        let prevCell = cell.previousElementSibling;\n        if (prevCell) {\n          prevCell.tabIndex = '0';\n          prevCell.focus();\n        } else {\n          this.navigationState = { backward: true };\n          this.navBackward(event);\n        }\n\n        event.preventDefault();\n        break;\n      }\n\n      //right arrow\n      case 39: {\n        cell.tabIndex = '-1';\n        let nextCell = cell.nextElementSibling;\n        if (nextCell) {\n          nextCell.tabIndex = '0';\n          nextCell.focus();\n        } else {\n          this.navigationState = { backward: false };\n          this.navForward(event);\n        }\n\n        event.preventDefault();\n        break;\n      }\n\n      //enter\n      //space\n      case 13:\n      case 32: {\n        this.onYearSelect(event, index);\n        event.preventDefault();\n        break;\n      }\n\n      //escape\n      case 27: {\n        this.overlayVisible = false;\n        event.preventDefault();\n        break;\n      }\n\n      //tab\n      case 9: {\n        this.trapFocus(event);\n        break;\n      }\n\n      default:\n        //no op\n        break;\n    }\n  }\n\n  navigateToMonth(prev, groupIndex) {\n    if (prev) {\n      if (this.numberOfMonths === 1 || groupIndex === 0) {\n        this.navigationState = { backward: true };\n        this.navBackward(event);\n      } else {\n        let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];\n        let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n        let focusCell = cells[cells.length - 1];\n        focusCell.tabIndex = '0';\n        focusCell.focus();\n      }\n    } else {\n      if (this.numberOfMonths === 1 || groupIndex === this.numberOfMonths - 1) {\n        this.navigationState = { backward: false };\n        this.navForward(event);\n      } else {\n        let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];\n        let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n        focusCell.tabIndex = '0';\n        focusCell.focus();\n      }\n    }\n  }\n\n  updateFocus() {\n    let cell;\n\n    if (this.navigationState) {\n      if (this.navigationState.button) {\n        this.initFocusableCell();\n\n        if (this.navigationState.backward) DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();\n        else DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();\n      } else {\n        if (this.navigationState.backward) {\n          let cells;\n\n          if (this.currentView === 'month') {\n            cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n          } else if (this.currentView === 'year') {\n            cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n          } else {\n            cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n          }\n\n          if (cells && cells.length > 0) {\n            cell = cells[cells.length - 1];\n          }\n        } else {\n          if (this.currentView === 'month') {\n            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n          } else if (this.currentView === 'year') {\n            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n          } else {\n            cell = DomHandler.findSingle(\n              this.contentViewChild.nativeElement,\n              '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)'\n            );\n          }\n        }\n\n        if (cell) {\n          cell.tabIndex = '0';\n          cell.focus();\n        }\n      }\n\n      this.navigationState = null;\n    } else {\n      this.initFocusableCell();\n    }\n  }\n\n  initFocusableCell() {\n    const contentEl = this.contentViewChild?.nativeElement;\n    let cell;\n\n    if (this.currentView === 'month') {\n      let cells = DomHandler.find(contentEl, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n      let selectedCell = DomHandler.findSingle(contentEl, '.p-monthpicker .p-monthpicker-month.p-highlight');\n      cells.forEach((cell) => (cell.tabIndex = -1));\n      cell = selectedCell || cells[0];\n\n      if (cells.length === 0) {\n        let disabledCells = DomHandler.find(contentEl, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = \"0\"]');\n        disabledCells.forEach((cell) => (cell.tabIndex = -1));\n      }\n    } else if (this.currentView === 'year') {\n      let cells = DomHandler.find(contentEl, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n      let selectedCell = DomHandler.findSingle(contentEl, '.p-yearpicker .p-yearpicker-year.p-highlight');\n      cells.forEach((cell) => (cell.tabIndex = -1));\n      cell = selectedCell || cells[0];\n\n      if (cells.length === 0) {\n        let disabledCells = DomHandler.find(contentEl, '.p-yearpicker .p-yearpicker-year.p-disabled[tabindex = \"0\"]');\n        disabledCells.forEach((cell) => (cell.tabIndex = -1));\n      }\n    } else {\n      cell = DomHandler.findSingle(contentEl, 'span.p-highlight');\n      if (!cell) {\n        let todayCell = DomHandler.findSingle(contentEl, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');\n        if (todayCell) cell = todayCell;\n        else cell = DomHandler.findSingle(contentEl, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n      }\n    }\n\n    if (cell) {\n      cell.tabIndex = '0';\n\n      if (!this.preventFocus && (!this.navigationState || !this.navigationState.button)) {\n        setTimeout(() => {\n          cell.focus();\n        }, 1);\n      }\n\n      this.preventFocus = false;\n    }\n  }\n\n  trapFocus(event) {\n    let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);\n\n    if (focusableElements && focusableElements.length > 0) {\n      if (!focusableElements[0].ownerDocument.activeElement) {\n        focusableElements[0].focus();\n      } else {\n        let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n        if (event.shiftKey) {\n          if (focusedIndex == -1 || focusedIndex === 0) {\n            if (this.focusTrap) {\n              focusableElements[focusableElements.length - 1].focus();\n            } else {\n              if (focusedIndex === -1) return this.hideOverlay();\n              else if (focusedIndex === 0) return;\n            }\n          } else {\n            focusableElements[focusedIndex - 1].focus();\n          }\n        } else {\n          if (focusedIndex == -1 || focusedIndex === focusableElements.length - 1) {\n            if (!this.focusTrap && focusedIndex != -1) return this.hideOverlay();\n            else focusableElements[0].focus();\n          } else {\n            focusableElements[focusedIndex + 1].focus();\n          }\n        }\n      }\n    }\n\n    event.preventDefault();\n  }\n\n  onMonthDropdownChange(m: string) {\n    this.currentMonth = parseInt(m);\n    this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n    this.createMonths(this.currentMonth, this.currentYear);\n  }\n\n  onYearDropdownChange(y: string) {\n    this.currentYear = parseInt(y);\n    this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n    this.createMonths(this.currentMonth, this.currentYear);\n  }\n\n  convertTo24Hour = function (hours: number, pm: boolean) {\n    if (this.hourFormat == '12') {\n      if (hours === 12) {\n        return pm ? 12 : 0;\n      } else {\n        return pm ? hours + 12 : hours;\n      }\n    }\n    return hours;\n  };\n\n  validateTime(hour: number, minute: number, second: number, pm: boolean) {\n    let value = this.value;\n    const convertedHour = this.convertTo24Hour(hour, pm);\n    if (this.isRangeSelection()) {\n      value = this.value[1] || this.value[0];\n    }\n    if (this.isMultipleSelection()) {\n      value = this.value[this.value.length - 1];\n    }\n    const valueDateString = value ? value.toDateString() : null;\n    if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n      if (this.minDate.getHours() > convertedHour) {\n        return false;\n      }\n      if (this.minDate.getHours() === convertedHour) {\n        if (this.minDate.getMinutes() > minute) {\n          return false;\n        }\n        if (this.minDate.getMinutes() === minute) {\n          if (this.minDate.getSeconds() > second) {\n            return false;\n          }\n        }\n      }\n    }\n\n    if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n      if (this.maxDate.getHours() < convertedHour) {\n        return false;\n      }\n      if (this.maxDate.getHours() === convertedHour) {\n        if (this.maxDate.getMinutes() < minute) {\n          return false;\n        }\n        if (this.maxDate.getMinutes() === minute) {\n          if (this.maxDate.getSeconds() < second) {\n            return false;\n          }\n        }\n      }\n    }\n    return true;\n  }\n\n  incrementHour(event) {\n    const prevHour = this.currentHour;\n    let newHour = this.currentHour + this.stepHour;\n    let newPM = this.pm;\n\n    if (this.hourFormat == '24') newHour = newHour >= 24 ? newHour - 24 : newHour;\n    else if (this.hourFormat == '12') {\n      // Before the AM/PM break, now after\n      if (prevHour < 12 && newHour > 11) {\n        newPM = !this.pm;\n      }\n      newHour = newHour >= 13 ? newHour - 12 : newHour;\n    }\n\n    if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n      this.currentHour = newHour;\n      this.pm = newPM;\n    }\n    event.preventDefault();\n  }\n\n  onTimePickerElementMouseDown(event: Event, type: number, direction: number) {\n    if (!this.disabled) {\n      this.repeat(event, null, type, direction);\n      event.preventDefault();\n    }\n  }\n\n  onTimePickerElementMouseUp(event: Event) {\n    if (!this.disabled) {\n      this.clearTimePickerTimer();\n      this.updateTime();\n    }\n  }\n\n  onTimePickerElementMouseLeave() {\n    if (!this.disabled && this.timePickerTimer) {\n      this.clearTimePickerTimer();\n      this.updateTime();\n    }\n  }\n\n  repeat(event: Event, interval: number, type: number, direction: number) {\n    let i = interval || 500;\n\n    this.clearTimePickerTimer();\n    this.timePickerTimer = setTimeout(() => {\n      this.repeat(event, 100, type, direction);\n      this.cd.markForCheck();\n    }, i);\n\n    switch (type) {\n      case 0:\n        if (direction === 1) this.incrementHour(event);\n        else this.decrementHour(event);\n        break;\n\n      case 1:\n        if (direction === 1) this.incrementMinute(event);\n        else this.decrementMinute(event);\n        break;\n\n      case 2:\n        if (direction === 1) this.incrementSecond(event);\n        else this.decrementSecond(event);\n        break;\n    }\n\n    this.updateInputfield();\n  }\n\n  clearTimePickerTimer() {\n    if (this.timePickerTimer) {\n      clearTimeout(this.timePickerTimer);\n      this.timePickerTimer = null;\n    }\n  }\n\n  decrementHour(event) {\n    let newHour = this.currentHour - this.stepHour;\n    let newPM = this.pm;\n\n    if (this.hourFormat == '24') newHour = newHour < 0 ? 24 + newHour : newHour;\n    else if (this.hourFormat == '12') {\n      // If we were at noon/midnight, then switch\n      if (this.currentHour === 12) {\n        newPM = !this.pm;\n      }\n      newHour = newHour <= 0 ? 12 + newHour : newHour;\n    }\n\n    if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n      this.currentHour = newHour;\n      this.pm = newPM;\n    }\n\n    event.preventDefault();\n  }\n\n  incrementMinute(event) {\n    let newMinute = this.currentMinute + this.stepMinute;\n    newMinute = newMinute > 59 ? newMinute - 60 : newMinute;\n    if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n      this.currentMinute = newMinute;\n    }\n\n    event.preventDefault();\n  }\n\n  decrementMinute(event) {\n    let newMinute = this.currentMinute - this.stepMinute;\n    newMinute = newMinute < 0 ? 60 + newMinute : newMinute;\n    if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n      this.currentMinute = newMinute;\n    }\n\n    event.preventDefault();\n  }\n\n  incrementSecond(event) {\n    let newSecond = this.currentSecond + this.stepSecond;\n    newSecond = newSecond > 59 ? newSecond - 60 : newSecond;\n    if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n      this.currentSecond = newSecond;\n    }\n\n    event.preventDefault();\n  }\n\n  decrementSecond(event) {\n    let newSecond = this.currentSecond - this.stepSecond;\n    newSecond = newSecond < 0 ? 60 + newSecond : newSecond;\n    if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n      this.currentSecond = newSecond;\n    }\n\n    event.preventDefault();\n  }\n\n  updateTime() {\n    let value = this.value;\n    if (this.isRangeSelection()) {\n      value = this.value[1] || this.value[0];\n    }\n    if (this.isMultipleSelection()) {\n      value = this.value[this.value.length - 1];\n    }\n    value = value ? new Date(value.getTime()) : new Date();\n\n    if (this.hourFormat == '12') {\n      if (this.currentHour === 12) value.setHours(this.pm ? 12 : 0);\n      else value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n    } else {\n      value.setHours(this.currentHour);\n    }\n\n    value.setMinutes(this.currentMinute);\n    value.setSeconds(this.currentSecond);\n    if (this.isRangeSelection()) {\n      if (this.value[1]) value = [this.value[0], value];\n      else value = [value, null];\n    }\n\n    if (this.isMultipleSelection()) {\n      value = [...this.value.slice(0, -1), value];\n    }\n\n    this.updateModel(value);\n    this.onSelect.emit(value);\n    this.updateInputfield();\n  }\n\n  toggleAMPM(event) {\n    const newPM = !this.pm;\n    if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {\n      this.pm = newPM;\n      this.updateTime();\n    }\n    event.preventDefault();\n  }\n\n  onUserInput(event) {\n    // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n    if (!this.isKeydown) {\n      return;\n    }\n    this.isKeydown = false;\n\n    let val = event.target.value;\n    try {\n      let value = this.parseValueFromString(val);\n      if (this.isValidSelection(value)) {\n        this.updateModel(value);\n        this.updateUI();\n      }\n    } catch (err) {\n      //invalid date\n      let value = this.keepInvalid ? val : null;\n      this.updateModel(value);\n    }\n\n    this.filled = val != null && val.length;\n    this.onInput.emit(event);\n  }\n\n  isValidSelection(value): boolean {\n    let isValid = true;\n    if (this.isSingleSelection()) {\n      if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {\n        isValid = false;\n      }\n    } else if (value.every((v) => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {\n      if (this.isRangeSelection()) {\n        isValid = value.length > 1 && value[1] > value[0] ? true : false;\n      }\n    }\n    return isValid;\n  }\n\n  parseValueFromString(text: string): Date | Date[] {\n    if (!text || text.trim().length === 0) {\n      return null;\n    }\n\n    let value: any;\n\n    if (this.isSingleSelection()) {\n      value = this.parseDateTime(text);\n    } else if (this.isMultipleSelection()) {\n      let tokens = text.split(this.multipleSeparator);\n      value = [];\n      for (let token of tokens) {\n        value.push(this.parseDateTime(token.trim()));\n      }\n    } else if (this.isRangeSelection()) {\n      let tokens = text.split(' ' + this.rangeSeparator + ' ');\n      value = [];\n      for (let i = 0; i < tokens.length; i++) {\n        value[i] = this.parseDateTime(tokens[i].trim());\n      }\n    }\n\n    return value;\n  }\n\n  parseDateTime(text): Date {\n    let date: Date;\n    let parts: string[] = text.split(' ');\n\n    if (this.timeOnly) {\n      date = new Date();\n      this.populateTime(date, parts[0], parts[1]);\n    } else {\n      const dateFormat = this.getDateFormat();\n      if (this.showTime) {\n        let ampm = this.hourFormat == '12' ? parts.pop() : null;\n        let timeString = parts.pop();\n\n        date = this.parseDate(parts.join(' '), dateFormat);\n        this.populateTime(date, timeString, ampm);\n      } else {\n        date = this.parseDate(text, dateFormat);\n      }\n    }\n\n    return date;\n  }\n\n  populateTime(value, timeString, ampm) {\n    if (this.hourFormat == '12' && !ampm) {\n      throw 'Invalid Time';\n    }\n\n    this.pm = ampm === 'PM' || ampm === 'pm';\n    let time = this.parseTime(timeString);\n    value.setHours(time.hour);\n    value.setMinutes(time.minute);\n    value.setSeconds(time.second);\n  }\n\n  isValidDate(date) {\n    return date instanceof Date && ObjectUtils.isNotEmpty(date);\n  }\n\n  updateUI() {\n    let propValue = this.value;\n    if (Array.isArray(propValue)) {\n      propValue = propValue[0];\n    }\n\n    let val =\n      this.defaultDate && this.isValidDate(this.defaultDate) && !this.value\n        ? this.defaultDate\n        : propValue && this.isValidDate(propValue)\n        ? propValue\n        : new Date();\n\n    this.currentMonth = val.getMonth();\n    this.currentYear = val.getFullYear();\n    this.createMonths(this.currentMonth, this.currentYear);\n\n    if (this.showTime || this.timeOnly) {\n      this.setCurrentHourPM(val.getHours());\n      this.currentMinute = val.getMinutes();\n      this.currentSecond = val.getSeconds();\n    }\n  }\n\n  showOverlay() {\n    if (!this.overlayVisible) {\n      this.updateUI();\n\n      if (!this.touchUI) {\n        this.preventFocus = true;\n      }\n\n      this.overlayVisible = true;\n    }\n  }\n\n  hideOverlay() {\n    this.overlayVisible = false;\n    this.clearTimePickerTimer();\n\n    if (this.touchUI) {\n      this.disableModality();\n    }\n\n    this.cd.markForCheck();\n  }\n\n  toggle() {\n    if (!this.inline) {\n      if (!this.overlayVisible) {\n        this.showOverlay();\n        this.inputfieldViewChild.nativeElement.focus();\n      } else {\n        this.hideOverlay();\n      }\n    }\n  }\n\n  onOverlayAnimationStart(event: AnimationEvent) {\n    switch (event.toState) {\n      case 'visible':\n      case 'visibleTouchUI':\n        if (!this.inline) {\n          this.overlay = event.element;\n          this.overlay.setAttribute(this.attributeSelector, '');\n          this.appendOverlay();\n          this.updateFocus();\n          if (this.autoZIndex) {\n            if (this.touchUI) ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);\n            else ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);\n          }\n\n          this.alignOverlay();\n          this.onShow.emit(event);\n        }\n        break;\n\n      case 'void':\n        this.onOverlayHide();\n        this.onClose.emit(event);\n        break;\n    }\n  }\n\n  onOverlayAnimationDone(event: AnimationEvent) {\n    switch (event.toState) {\n      case 'visible':\n      case 'visibleTouchUI':\n        if (!this.inline) {\n          this.bindDocumentClickListener();\n          this.bindDocumentResizeListener();\n          this.bindScrollListener();\n        }\n        break;\n\n      case 'void':\n        if (this.autoZIndex) {\n          ZIndexUtils.clear(event.element);\n        }\n        break;\n    }\n  }\n\n  appendOverlay() {\n    if (this.appendTo) {\n      if (this.appendTo === 'body') document.body.appendChild(this.overlay);\n      else DomHandler.appendChild(this.overlay, this.appendTo);\n    }\n  }\n\n  restoreOverlayAppend() {\n    if (this.overlay && this.appendTo) {\n      this.el.nativeElement.appendChild(this.overlay);\n    }\n  }\n\n  alignOverlay() {\n    if (this.touchUI) {\n      this.enableModality(this.overlay);\n    } else if (this.overlay) {\n      if (this.appendTo) {\n        if (this.view === 'date') {\n          this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';\n          this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n        } else {\n          this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n        }\n\n        DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n      } else {\n        DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n      }\n    }\n  }\n\n  enableModality(element) {\n    if (!this.mask && !this.touchUI) {\n      this.mask = document.createElement('div');\n      this.mask.style.zIndex = String(parseInt(element.style.zIndex) - 1);\n      let maskStyleClass =\n        'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';\n      DomHandler.addMultipleClasses(this.mask, maskStyleClass);\n\n      this.maskClickListener = this.renderer.listen(this.mask, 'click', (event: any) => {\n        this.disableModality();\n      });\n      document.body.appendChild(this.mask);\n      DomHandler.addClass(document.body, 'p-overflow-hidden');\n    }\n  }\n\n  disableModality() {\n    if (this.mask) {\n      DomHandler.addClass(this.mask, 'p-component-overlay-leave');\n      this.animationEndListener = this.destroyMask.bind(this);\n      this.mask.addEventListener('animationend', this.animationEndListener);\n    }\n  }\n\n  destroyMask() {\n    if (!this.mask) {\n      return;\n    }\n\n    document.body.removeChild(this.mask);\n    let bodyChildren = document.body.children;\n    let hasBlockerMasks: boolean;\n    for (let i = 0; i < bodyChildren.length; i++) {\n      let bodyChild = bodyChildren[i];\n      if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {\n        hasBlockerMasks = true;\n        break;\n      }\n    }\n\n    if (!hasBlockerMasks) {\n      DomHandler.removeClass(document.body, 'p-overflow-hidden');\n    }\n\n    this.unbindAnimationEndListener();\n    this.unbindMaskClickListener();\n    this.mask = null;\n  }\n\n  unbindMaskClickListener() {\n    if (this.maskClickListener) {\n      this.maskClickListener();\n      this.maskClickListener = null;\n    }\n  }\n\n  unbindAnimationEndListener() {\n    if (this.animationEndListener && this.mask) {\n      this.mask.removeEventListener('animationend', this.animationEndListener);\n      this.animationEndListener = null;\n    }\n  }\n\n  writeValue(value: any): void {\n    this.value = value;\n    if (this.value && typeof this.value === 'string') {\n      try {\n        this.value = this.parseValueFromString(this.value);\n      } catch {\n        if (this.keepInvalid) {\n          this.value = value;\n        }\n      }\n    }\n\n    this.updateInputfield();\n    this.updateUI();\n    this.cd.markForCheck();\n  }\n\n  registerOnChange(fn: Function): void {\n    this.onModelChange = fn;\n  }\n\n  registerOnTouched(fn: Function): void {\n    this.onModelTouched = fn;\n  }\n\n  setDisabledState(val: boolean): void {\n    this.disabled = val;\n    this.cd.markForCheck();\n  }\n\n  getDateFormat() {\n    return this.dateFormat || this.getTranslation('dateFormat');\n  }\n\n  getFirstDateOfWeek() {\n    return this._firstDayOfWeek || this.getTranslation(TranslationKeys.FIRST_DAY_OF_WEEK);\n  }\n\n  // Ported from jquery-ui datepicker formatDate\n  formatDate(date, format) {\n    if (!date) {\n      return '';\n    }\n\n    let iFormat;\n    const lookAhead = (match) => {\n        const matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;\n        if (matches) {\n          iFormat++;\n        }\n        return matches;\n      },\n      formatNumber = (match, value, len) => {\n        let num = '' + value;\n        if (lookAhead(match)) {\n          while (num.length < len) {\n            num = '0' + num;\n          }\n        }\n        return num;\n      },\n      formatName = (match, value, shortNames, longNames) => {\n        return lookAhead(match) ? longNames[value] : shortNames[value];\n      };\n    let output = '';\n    let literal = false;\n\n    if (date) {\n      for (iFormat = 0; iFormat < format.length; iFormat++) {\n        if (literal) {\n          if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n            literal = false;\n          } else {\n            output += format.charAt(iFormat);\n          }\n        } else {\n          switch (format.charAt(iFormat)) {\n            case 'd':\n              output += formatNumber('d', date.getDate(), 2);\n              break;\n            case 'D':\n              output += formatName(\n                'D',\n                date.getDay(),\n                this.getTranslation(TranslationKeys.DAY_NAMES_SHORT),\n                this.getTranslation(TranslationKeys.DAY_NAMES)\n              );\n              break;\n            case 'o':\n              output += formatNumber(\n                'o',\n                Math.round(\n                  (new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) /\n                    86400000\n                ),\n                3\n              );\n              break;\n            case 'm':\n              output += formatNumber('m', date.getMonth() + 1, 2);\n              break;\n            case 'M':\n              output += formatName(\n                'M',\n                date.getMonth(),\n                this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT),\n                this.getTranslation(TranslationKeys.MONTH_NAMES)\n              );\n              break;\n            case 'y':\n              output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);\n              break;\n            case '@':\n              output += date.getTime();\n              break;\n            case '!':\n              output += date.getTime() * 10000 + this.ticksTo1970;\n              break;\n            case \"'\":\n              if (lookAhead(\"'\")) {\n                output += \"'\";\n              } else {\n                literal = true;\n              }\n              break;\n            default:\n              output += format.charAt(iFormat);\n          }\n        }\n      }\n    }\n    return output;\n  }\n\n  formatTime(date) {\n    if (!date) {\n      return '';\n    }\n\n    let output = '';\n    let hours = date.getHours();\n    let minutes = date.getMinutes();\n    let seconds = date.getSeconds();\n\n    if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n      hours -= 12;\n    }\n\n    if (this.hourFormat == '12') {\n      output += hours === 0 ? 12 : hours < 10 ? '0' + hours : hours;\n    } else {\n      output += hours < 10 ? '0' + hours : hours;\n    }\n    output += ':';\n    output += minutes < 10 ? '0' + minutes : minutes;\n\n    if (this.showSeconds) {\n      output += ':';\n      output += seconds < 10 ? '0' + seconds : seconds;\n    }\n\n    if (this.hourFormat == '12') {\n      output += date.getHours() > 11 ? ' PM' : ' AM';\n    }\n\n    return output;\n  }\n\n  parseTime(value) {\n    let tokens: string[] = value.split(':');\n    let validTokenLength = this.showSeconds ? 3 : 2;\n\n    if (tokens.length !== validTokenLength) {\n      throw 'Invalid time';\n    }\n\n    let h = parseInt(tokens[0]);\n    let m = parseInt(tokens[1]);\n    let s = this.showSeconds ? parseInt(tokens[2]) : null;\n\n    if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n      throw 'Invalid time';\n    } else {\n      if (this.hourFormat == '12') {\n        if (h !== 12 && this.pm) {\n          h += 12;\n        } else if (!this.pm && h === 12) {\n          h -= 12;\n        }\n      }\n\n      return { hour: h, minute: m, second: s };\n    }\n  }\n\n  // Ported from jquery-ui datepicker parseDate\n  parseDate(value, format) {\n    if (format == null || value == null) {\n      throw 'Invalid arguments';\n    }\n\n    value = typeof value === 'object' ? value.toString() : value + '';\n    if (value === '') {\n      return null;\n    }\n\n    let iFormat,\n      dim,\n      extra,\n      iValue = 0,\n      shortYearCutoff =\n        typeof this.shortYearCutoff !== 'string'\n          ? this.shortYearCutoff\n          : (new Date().getFullYear() % 100) + parseInt(this.shortYearCutoff, 10),\n      year = -1,\n      month = -1,\n      day = -1,\n      doy = -1,\n      literal = false,\n      date,\n      lookAhead = (match) => {\n        let matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;\n        if (matches) {\n          iFormat++;\n        }\n        return matches;\n      },\n      getNumber = (match) => {\n        let isDoubled = lookAhead(match),\n          size = match === '@' ? 14 : match === '!' ? 20 : match === 'y' && isDoubled ? 4 : match === 'o' ? 3 : 2,\n          minSize = match === 'y' ? size : 1,\n          digits = new RegExp('^\\\\d{' + minSize + ',' + size + '}'),\n          num = value.substring(iValue).match(digits);\n        if (!num) {\n          throw 'Missing number at position ' + iValue;\n        }\n        iValue += num[0].length;\n        return parseInt(num[0], 10);\n      },\n      getName = (match, shortNames, longNames) => {\n        let index = -1;\n        let arr = lookAhead(match) ? longNames : shortNames;\n        let names = [];\n\n        for (let i = 0; i < arr.length; i++) {\n          names.push([i, arr[i]]);\n        }\n        names.sort((a, b) => {\n          return -(a[1].length - b[1].length);\n        });\n\n        for (let i = 0; i < names.length; i++) {\n          let name = names[i][1];\n          if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n            index = names[i][0];\n            iValue += name.length;\n            break;\n          }\n        }\n\n        if (index !== -1) {\n          return index + 1;\n        } else {\n          throw 'Unknown name at position ' + iValue;\n        }\n      },\n      checkLiteral = () => {\n        if (value.charAt(iValue) !== format.charAt(iFormat)) {\n          throw 'Unexpected literal at position ' + iValue;\n        }\n        iValue++;\n      };\n\n    if (this.view === 'month') {\n      day = 1;\n    }\n\n    for (iFormat = 0; iFormat < format.length; iFormat++) {\n      if (literal) {\n        if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n          literal = false;\n        } else {\n          checkLiteral();\n        }\n      } else {\n        switch (format.charAt(iFormat)) {\n          case 'd':\n            day = getNumber('d');\n            break;\n          case 'D':\n            getName('D', this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n            break;\n          case 'o':\n            doy = getNumber('o');\n            break;\n          case 'm':\n            month = getNumber('m');\n            break;\n          case 'M':\n            month = getName('M', this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n            break;\n          case 'y':\n            year = getNumber('y');\n            break;\n          case '@':\n            date = new Date(getNumber('@'));\n            year = date.getFullYear();\n            month = date.getMonth() + 1;\n            day = date.getDate();\n            break;\n          case '!':\n            date = new Date((getNumber('!') - this.ticksTo1970) / 10000);\n            year = date.getFullYear();\n            month = date.getMonth() + 1;\n            day = date.getDate();\n            break;\n          case \"'\":\n            if (lookAhead(\"'\")) {\n              checkLiteral();\n            } else {\n              literal = true;\n            }\n            break;\n          default:\n            checkLiteral();\n        }\n      }\n    }\n\n    if (iValue < value.length) {\n      extra = value.substr(iValue);\n      if (!/^\\s+/.test(extra)) {\n        throw 'Extra/unparsed characters found in date: ' + extra;\n      }\n    }\n\n    if (year === -1) {\n      year = new Date().getFullYear();\n    } else if (year < 100) {\n      year += new Date().getFullYear() - (new Date().getFullYear() % 100) + (year <= shortYearCutoff ? 0 : -100);\n    }\n\n    if (doy > -1) {\n      month = 1;\n      day = doy;\n      do {\n        dim = this.getDaysCountInMonth(year, month - 1);\n        if (day <= dim) {\n          break;\n        }\n        month++;\n        day -= dim;\n      } while (true);\n    }\n\n    if (this.view === 'year') {\n      month = month === -1 ? 1 : month;\n      day = day === -1 ? 1 : day;\n    }\n\n    date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n\n    if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n      throw 'Invalid date'; // E.g. 31/02/00\n    }\n\n    return date;\n  }\n\n  daylightSavingAdjust(date) {\n    if (!date) {\n      return null;\n    }\n\n    date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\n    return date;\n  }\n\n  updateFilledState() {\n    this.filled = this.inputFieldValue && this.inputFieldValue != '';\n  }\n\n  onTodayButtonClick(event) {\n    let date: Date = new Date();\n    let dateMeta = {\n      day: date.getDate(),\n      month: date.getMonth(),\n      year: date.getFullYear(),\n      otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear,\n      today: true,\n      selectable: true\n    };\n\n    this.onDateSelect(event, dateMeta);\n    this.onTodayClick.emit(event);\n  }\n\n  onClearButtonClick(event) {\n    this.updateModel(null);\n    this.updateInputfield();\n    this.hideOverlay();\n    this.onClearClick.emit(event);\n  }\n\n  createResponsiveStyle() {\n    if (this.numberOfMonths > 1 && this.responsiveOptions) {\n      if (!this.responsiveStyleElement) {\n        this.responsiveStyleElement = document.createElement('style');\n        this.responsiveStyleElement.type = 'text/css';\n        document.body.appendChild(this.responsiveStyleElement);\n      }\n\n      let innerHTML = '';\n      if (this.responsiveOptions) {\n        let responsiveOptions = [...this.responsiveOptions]\n          .filter((o) => !!(o.breakpoint && o.numMonths))\n          .sort((o1, o2) => -1 * o1.breakpoint.localeCompare(o2.breakpoint, undefined, { numeric: true }));\n\n        for (let i = 0; i < responsiveOptions.length; i++) {\n          let { breakpoint, numMonths } = responsiveOptions[i];\n          let styles = `\n                        .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${numMonths}) .p-datepicker-next {\n                            display: inline-flex !important;\n                        }\n                    `;\n\n          for (let j = numMonths; j < this.numberOfMonths; j++) {\n            styles += `\n                            .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${j + 1}) {\n                                display: none !important;\n                            }\n                        `;\n          }\n\n          innerHTML += `\n                        @media screen and (max-width: ${breakpoint}) {\n                            ${styles}\n                        }\n                    `;\n        }\n      }\n\n      this.responsiveStyleElement.innerHTML = innerHTML;\n    }\n  }\n\n  destroyResponsiveStyleElement() {\n    if (this.responsiveStyleElement) {\n      this.responsiveStyleElement.remove();\n      this.responsiveStyleElement = null;\n    }\n  }\n\n  bindDocumentClickListener() {\n    if (!this.documentClickListener) {\n      this.zone.runOutsideAngular(() => {\n        const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n        this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', (event) => {\n          if (this.isOutsideClicked(event) && this.overlayVisible) {\n            this.zone.run(() => {\n              this.hideOverlay();\n              this.onClickOutside.emit(event);\n\n              this.cd.markForCheck();\n            });\n          }\n        });\n      });\n    }\n  }\n\n  unbindDocumentClickListener() {\n    if (this.documentClickListener) {\n      this.documentClickListener();\n      this.documentClickListener = null;\n    }\n  }\n\n  bindDocumentResizeListener() {\n    if (!this.documentResizeListener && !this.touchUI) {\n      this.documentResizeListener = this.onWindowResize.bind(this);\n      window.addEventListener('resize', this.documentResizeListener);\n    }\n  }\n\n  unbindDocumentResizeListener() {\n    if (this.documentResizeListener) {\n      window.removeEventListener('resize', this.documentResizeListener);\n      this.documentResizeListener = null;\n    }\n  }\n\n  bindScrollListener() {\n    if (!this.scrollHandler) {\n      this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n        if (this.overlayVisible) {\n          this.hideOverlay();\n        }\n      });\n    }\n\n    this.scrollHandler.bindScrollListener();\n  }\n\n  unbindScrollListener() {\n    if (this.scrollHandler) {\n      this.scrollHandler.unbindScrollListener();\n    }\n  }\n\n  isOutsideClicked(event: Event) {\n    return !(\n      this.el.nativeElement.isSameNode(event.target) ||\n      this.isNavIconClicked(event) ||\n      this.el.nativeElement.contains(event.target) ||\n      (this.overlay && this.overlay.contains(<Node>event.target))\n    );\n  }\n\n  isNavIconClicked(event: Event) {\n    return (\n      DomHandler.hasClass(event.target, 'p-datepicker-prev') ||\n      DomHandler.hasClass(event.target, 'p-datepicker-prev-icon') ||\n      DomHandler.hasClass(event.target, 'p-datepicker-next') ||\n      DomHandler.hasClass(event.target, 'p-datepicker-next-icon')\n    );\n  }\n\n  onWindowResize() {\n    if (this.overlayVisible && !DomHandler.isTouchDevice()) {\n      this.hideOverlay();\n    }\n  }\n\n  onOverlayHide() {\n    this.currentView = this.view;\n\n    if (this.mask) {\n      this.destroyMask();\n    }\n\n    this.unbindDocumentClickListener();\n    this.unbindDocumentResizeListener();\n    this.unbindScrollListener();\n    this.overlay = null;\n  }\n\n  ngOnDestroy() {\n    if (this.scrollHandler) {\n      this.scrollHandler.destroy();\n      this.scrollHandler = null;\n    }\n\n    if (this.translationSubscription) {\n      this.translationSubscription.unsubscribe();\n    }\n\n    if (this.overlay && this.autoZIndex) {\n      ZIndexUtils.clear(this.overlay);\n    }\n\n    this.destroyResponsiveStyleElement();\n    this.clearTimePickerTimer();\n    this.restoreOverlayAppend();\n    this.onOverlayHide();\n  }\n}\n\n@NgModule({\n  imports: [CommonModule, ButtonModule, SharedModule, RippleModule],\n  exports: [Calendar],\n  declarations: [Calendar]\n})\nexport class CalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AA8Ba,MAAA,uBAAuB,GAAQ;AAC1C,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC;AACvC,IAAA,KAAK,EAAE,IAAI;EACX;MAkaW,QAAQ,CAAA;IAsZnB,WACS,CAAA,EAAc,EACd,QAAmB,EACnB,EAAqB,EACpB,IAAY,EACZ,MAAqB,EACtB,cAA8B,EAAA;AAL9B,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AACd,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;AACnB,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;AACpB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AACZ,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;AACtB,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AArY9B,QAAA,IAAiB,CAAA,iBAAA,GAAW,GAAG,CAAC;AAEhC,QAAA,IAAc,CAAA,cAAA,GAAW,GAAG,CAAC;AAE7B,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAExB,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;AAMhC,QAAA,IAAI,CAAA,IAAA,GAAW,gBAAgB,CAAC;AAMhC,QAAA,IAAe,CAAA,eAAA,GAAQ,KAAK,CAAC;AAM7B,QAAA,IAAU,CAAA,UAAA,GAAW,IAAI,CAAC;AAI1B,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;AAErB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AAEvB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AAEvB,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAI7B,QAAA,IAAW,CAAA,WAAA,GAAY,IAAI,CAAC;AAE5B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAE3B,QAAA,IAAQ,CAAA,QAAA,GAAW,MAAM,CAAC;AAE1B,QAAA,IAAa,CAAA,aAAA,GAAW,QAAQ,CAAC;AAMjC,QAAA,IAAqB,CAAA,qBAAA,GAAW,eAAe,CAAC;AAEhD,QAAA,IAAqB,CAAA,qBAAA,GAAW,eAAe,CAAC;AAEhD,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAE3B,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AAMvB,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAE7B,QAAA,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;AAIrC,QAAA,IAAa,CAAA,aAAA,GAAW,GAAG,CAAC;AAE5B,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;AAE1B,QAAA,IAAqB,CAAA,qBAAA,GAAW,iCAAiC,CAAC;AAElE,QAAA,IAAqB,CAAA,qBAAA,GAAW,YAAY,CAAC;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEvD,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;AAyDzD,QAAA,IAAA,CAAA,aAAa,GAAa,MAAK,GAAG,CAAC;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAa,MAAK,GAAG,CAAC;AAoBpC,QAAA,IAAe,CAAA,eAAA,GAAW,IAAI,CAAC;AAoC/B,QAAA,IAAe,CAAA,eAAA,GAAQ,IAAI,CAAC;AAgB5B,QAAA,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC;AAI5B,QAAA,IAAK,CAAA,KAAA,GAAqB,MAAM,CAAC;AA66CjC,QAAA,IAAA,CAAA,eAAe,GAAG,UAAU,KAAa,EAAE,EAAW,EAAA;AACpD,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBAC3B,IAAI,KAAK,KAAK,EAAE,EAAE;oBAChB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,iBAAA;AAAM,qBAAA;oBACL,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC;AAChC,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;KA3xCE;IAxRJ,IAAoD,OAAO,CAAC,OAAmB,EAAA;AAC7E,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAEhC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAoHD,IAAA,IAAa,IAAI,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,IAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;KAC/B;AAED,IAAA,IAAa,WAAW,GAAA;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAED,IAAI,WAAW,CAAC,WAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAID,IAAA,IAAa,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAI,OAAO,CAAC,IAAU,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAErB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAED,IAAA,IAAa,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAI,OAAO,CAAC,IAAU,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAErB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAED,IAAA,IAAa,aAAa,GAAA;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAI,aAAa,CAAC,aAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAED,IAAA,IAAa,YAAY,GAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAI,YAAY,CAAC,YAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAED,IAAA,IAAa,SAAS,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IAAI,SAAS,CAAC,SAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAE5B,QAAA,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,SAAA;KACF;AAED,IAAA,IAAa,QAAQ,GAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAI,QAAQ,CAAC,QAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,IAAa,iBAAiB,GAAA;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAED,IAAI,iBAAiB,CAAC,iBAAwB,EAAA;AAC5C,QAAA,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAE5C,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;AAED,IAAA,IAAa,cAAc,GAAA;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAED,IAAI,cAAc,CAAC,cAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;AAED,IAAA,IAAa,cAAc,GAAA;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAED,IAAI,cAAc,CAAC,cAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,IACI,MAAM,CAAC,SAAyB,EAAA;AAClC,QAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;KAC1E;IAWD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,WAAW;AACd,gBAAA,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;AACzH,SAAA;AAED,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAK;YAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE;AACpB,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAClC,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AAER,gBAAA,KAAK,cAAc;AACjB,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AAER,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;AAER,gBAAA;AACE,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAClC,MAAM;AACT,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAEtG,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;oBAC7B,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AAC1H,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KAC3C;IAED,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,YAAA,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,SAAA;KACF;IAED,iBAAiB,GAAA;QACf,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAA;AAED,QAAA,OAAO,iBAAiB,CAAC;KAC1B;IAED,gBAAgB,GAAA;QACd,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,OAAO,gBAAgB,CAAC;KACzB;IAED,YAAY,CAAC,KAAa,EAAE,IAAY,EAAA;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,GAAG,EAAE,EAAE;gBACV,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACjB,gBAAA,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACd,aAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,SAAA;KACF;AAED,IAAA,aAAa,CAAC,IAAU,EAAA;QACtB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACzC,QAAA,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KAChF;IAED,WAAW,CAAC,KAAa,EAAE,IAAY,EAAA;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC;QAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,gBAAA,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC9E,IAAI,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC;AACR,wBAAA,GAAG,EAAE,CAAC;wBACN,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACpD,wBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9D,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAED,gBAAA,IAAI,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,CAAC,IAAI,CAAC;AACR,wBAAA,GAAG,EAAE,KAAK;AACV,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAC9C,wBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACzD,qBAAA,CAAC,CAAC;AACH,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,KAAK,GAAG,UAAU,EAAE;wBACtB,IAAI,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBACjD,IAAI,CAAC,IAAI,CAAC;4BACR,GAAG,EAAE,KAAK,GAAG,UAAU;4BACvB,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACrE,4BAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/E,yBAAA,CAAC,CAAC;AACJ,qBAAA;AAAM,yBAAA;wBACL,IAAI,CAAC,IAAI,CAAC;AACR,4BAAA,GAAG,EAAE,KAAK;AACV,4BAAA,KAAK,EAAE,KAAK;AACZ,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAC9C,4BAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACzD,yBAAA,CAAC,CAAC;AACJ,qBAAA;AAED,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,aAAA;AAED,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,SAAA;QAED,OAAO;AACL,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,WAAW,EAAE,WAAW;SACzB,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,IAAU,EAAA;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxC,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACxB,SAAA;KACF;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAE5B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YACtC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;AAED,IAAA,UAAU,CAAC,KAAK,EAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAE5B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YACtC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,SAAA;KACF;IAED,aAAa,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAChE,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACxH,SAAA;KACF;IAED,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KAC1C;IAED,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KAC1C;IAED,aAAa,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC1F,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACxH,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,gBAAgB,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACzC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;gBACzC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5C,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3B,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE;YACzD,UAAU,CAAC,MAAK;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEnB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,iBAAA;AAED,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aACxB,EAAE,GAAG,CAAC,CAAC;AACT,SAAA;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,gBAAgB,CAAC,QAAQ,EAAA;QACvB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;;AAC9H,YAAA,OAAO,IAAI,CAAC;KAClB;IAED,aAAa,CAAC,KAAK,EAAE,KAAK,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9F,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACnF,SAAA;KACF;IAED,YAAY,CAAC,KAAK,EAAE,IAAI,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClF,SAAA;KACF;IAED,gBAAgB,GAAA;QACd,IAAI,cAAc,GAAG,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC5B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACrC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,cAAc,IAAI,YAAY,CAAC;oBAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,wBAAA,cAAc,IAAI,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;AAChD,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAClC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACnC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5B,oBAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAChD,oBAAA,IAAI,OAAO,EAAE;AACX,wBAAA,cAAc,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAClF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YACtE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;AACrE,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAI,EAAA;AACjB,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,aAAA;AAAM,iBAAA;AACL,gBAAA,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,cAAc,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/C,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,cAAc,CAAC;KACvB;AAED,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,IAAI,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;AAClD,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAC5C,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,cAAc,CAAC,WAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,QAAQ,EAAA;AACjB,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;oBACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AACxE,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;AACvC,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;AACvC,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACnC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5B,gBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;oBACrD,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;AAAM,qBAAA;oBACL,SAAS,GAAG,IAAI,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;gBAED,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACxC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,aAAA;AAAM,iBAAA;gBACL,IAAI,cAAc,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,iBAAA;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACpC,aAAA;AACF,SAAA;KACF;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY,EAAA;AACjD,QAAA,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACrB,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB,QAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACpD,QAAA,OAAO,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;KAChD;IAED,mBAAmB,CAAC,KAAa,EAAE,IAAY,EAAA;AAC7C,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAC5E;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY,EAAA;QACjD,IAAI,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACxD;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY,EAAA;QACjD,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,CAAC,GAAG,EAAE,CAAC;AACP,YAAA,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACd,CAAC,GAAG,IAAI,CAAC;AACV,SAAA;QAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KAC9B;IAED,mBAAmB,CAAC,KAAa,EAAE,IAAY,EAAA;QAC7C,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,IAAI,KAAK,KAAK,EAAE,EAAE;YAChB,CAAC,GAAG,CAAC,CAAC;AACN,YAAA,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACd,CAAC,GAAG,IAAI,CAAC;AACV,SAAA;QAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KAC9B;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE/C,QAAA,OAAO,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;KACpD;AAED,IAAA,UAAU,CAAC,QAAQ,EAAA;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChD,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBAC3B,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,oBAAA,IAAI,QAAQ,EAAE;wBACZ,MAAM;AACP,qBAAA;AACF,iBAAA;AAED,gBAAA,OAAO,QAAQ,CAAC;AACjB,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAClC,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACf,oBAAA,QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;wBAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAC1D;;AACC,oBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAED,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;KAC7D;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACtD,YAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACrF,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACtD,YAAA,OAAO,QAAQ,IAAI,KAAK,IAAI,QAAQ,KAAK,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,GAAG,GAAI,KAAK,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC9D;AAED,IAAA,cAAc,CAAC,IAAI,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAEjE,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,KAAK,CAAC;AAC3E,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAA;AAC1B,QAAA,IAAI,KAAK,IAAI,KAAK,YAAY,IAAI;YAChC,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC;;AACrH,YAAA,OAAO,KAAK,CAAC;KACnB;AAED,IAAA,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAA;QAChC,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,KAAK,IAAI,GAAG,EAAE;AAChB,YAAA,IAAI,IAAI,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvE,YAAA,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7E,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;IAED,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;KACxC;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC;KACvC;IAED,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC;KAC1C;AAED,IAAA,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAA;QAC7B,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;KAC9F;AAED,IAAA,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAA;QACvC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE;gBACrC,QAAQ,GAAG,KAAK,CAAC;AAClB,aAAA;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;gBAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE;oBACnC,QAAQ,GAAG,KAAK,CAAC;AAClB,iBAAA;qBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;oBAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE;wBAChC,QAAQ,GAAG,KAAK,CAAC;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE;gBACrC,QAAQ,GAAG,KAAK,CAAC;AAClB,aAAA;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;gBAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE;oBACnC,QAAQ,GAAG,KAAK,CAAC;AAClB,iBAAA;qBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;oBAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE;wBAChC,QAAQ,GAAG,KAAK,CAAC;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,SAAA;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,QAAQ,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAClD,SAAA;AAED,QAAA,OAAO,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC;KACtD;AAED,IAAA,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,IAAY,EAAA;QACrD,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;gBAC3C,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;AAC9G,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,aAAa,CAAC,GAAW,EAAE,KAAa,EAAE,IAAY,EAAA;QACpD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,YAAA,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,aAAa,CAAC,KAAK,EAAE,UAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;AAED,IAAA,cAAc,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC9B,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,YAAY,CAAC,KAAK,EAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;KACxD;AAED,IAAA,OAAO,CAAC,KAAK,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;KACrE;IAED,wBAAwB,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;KACjD;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACzB;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAA;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;AAED,IAAA,wBAAwB,CAAC,KAAK,EAAA;QAC5B,QAAQ,KAAK,CAAC,KAAK;;AAEjB,YAAA,KAAK,CAAC;AACJ,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvB,iBAAA;gBACD,MAAM;;AAGR,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AAER,YAAA;;gBAEE,MAAM;AACT,SAAA;KACF;AAED,IAAA,cAAc,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACjD,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;YAC/B,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;YAC/B,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,aAAA;AACF,SAAA;aAAM,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvD,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3G,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,aAAA;AACF,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC;QAEvC,QAAQ,KAAK,CAAC,KAAK;;YAEjB,KAAK,EAAE,EAAE;AACP,gBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;AACpD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;wBAChD,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,wBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,qBAAA;AAAM,yBAAA;AACL,wBAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;AACvD,wBAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACjD,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC;AACxD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;wBAChD,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,wBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,qBAAA;AAAM,yBAAA;AACL,wBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAC3C,gBAAA,IAAI,QAAQ,EAAE;oBACZ,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,oBAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC,EAAE;AAC3H,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACxC,qBAAA;AAAM,yBAAA;AACL,wBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACxC,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACvC,gBAAA,IAAI,QAAQ,EAAE;oBACZ,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;AAChD,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,qBAAA;AAAM,yBAAA;AACL,wBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;;AAID,YAAA,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,CAAC,EAAE;AACN,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvB,iBAAA;gBACD,MAAM;AACP,aAAA;AAED,YAAA;;gBAEE,MAAM;AACT,SAAA;KACF;IAED,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,QAAQ,KAAK,CAAC,KAAK;;AAEjB,YAAA,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;AACzE,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAC3C,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACvC,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;;AAID,YAAA,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,CAAC,EAAE;AACN,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvB,iBAAA;gBACD,MAAM;AACP,aAAA;AAED,YAAA;;gBAEE,MAAM;AACT,SAAA;KACF;IAED,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QAEjC,QAAQ,KAAK,CAAC,KAAK;;AAEjB,YAAA,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;AACzE,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAC3C,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACvC,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,iBAAA;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;;AAID,YAAA,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;AACP,aAAA;;YAGD,KAAK,CAAC,EAAE;AACN,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;AACP,aAAA;AAED,YAAA;;gBAEE,MAAM;AACT,SAAA;KACF;IAED,eAAe,CAAC,IAAI,EAAE,UAAU,EAAA;AAC9B,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE;gBACjD,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,6DAA6D,CAAC,CAAC;gBAC/G,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxC,gBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;gBACvE,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACxB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,kBAAkB,EAAE,6DAA6D,CAAC,CAAC;AACzH,gBAAA,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;AACnB,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC;QAET,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAEzB,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ;AAAE,oBAAA,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;;AACvH,oBAAA,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;AAC/F,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AACjC,oBAAA,IAAI,KAAK,CAAC;AAEV,oBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;AAChC,wBAAA,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,sDAAsD,CAAC,CAAC;AACtH,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AACtC,wBAAA,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;AACnH,qBAAA;AAAM,yBAAA;AACL,wBAAA,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;AAC7H,qBAAA;AAED,oBAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7B,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChC,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;AAChC,wBAAA,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,sDAAsD,CAAC,CAAC;AAC3H,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AACtC,wBAAA,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;AACxH,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,GAAG,UAAU,CAAC,UAAU,CAC1B,IAAI,CAAC,gBAAgB,CAAC,aAAa,EACnC,6DAA6D,CAC9D,CAAC;AACH,qBAAA;AACF,iBAAA;AAED,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACpB,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,SAAA;KACF;IAED,iBAAiB,GAAA;;QACf,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC;AAET,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAChC,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;YAC/F,IAAI,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;AACvG,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,IAAI,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,gEAAgE,CAAC,CAAC;AACjH,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YACtC,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;YAC5F,IAAI,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,8CAA8C,CAAC,CAAC;AACpG,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,IAAI,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,6DAA6D,CAAC,CAAC;AAC9G,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,yDAAyD,CAAC,CAAC;AAC5G,gBAAA,IAAI,SAAS;oBAAE,IAAI,GAAG,SAAS,CAAC;;oBAC3B,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,6DAA6D,CAAC,CAAC;AAC7G,aAAA;AACF,SAAA;AAED,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AAEpB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;gBACjF,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd,EAAE,CAAC,CAAC,CAAC;AACP,aAAA;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,SAAA;KACF;AAED,IAAA,SAAS,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAE7F,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE;AACrD,gBAAA,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAE/F,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;wBAC5C,IAAI,IAAI,CAAC,SAAS,EAAE;4BAClB,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACzD,yBAAA;AAAM,6BAAA;4BACL,IAAI,YAAY,KAAK,CAAC,CAAC;AAAE,gCAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;iCAC9C,IAAI,YAAY,KAAK,CAAC;gCAAE,OAAO;AACrC,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACvE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,CAAC,CAAC;AAAE,4BAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;;AAChE,4BAAA,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACnC,qBAAA;AAAM,yBAAA;wBACL,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,qBAAqB,CAAC,CAAS,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACxD;AAED,IAAA,oBAAoB,CAAC,CAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACxD;AAaD,IAAA,YAAY,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,EAAW,EAAA;AACpE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,eAAe,EAAE;YACtF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,aAAa,EAAE;AAC3C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;gBAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;AACtC,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;oBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;AACtC,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,eAAe,EAAE;YACtF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,aAAa,EAAE;AAC3C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;gBAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;AACtC,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;oBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;AACtC,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,aAAa,CAAC,KAAK,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAAE,YAAA,OAAO,GAAG,OAAO,IAAI,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC;AACzE,aAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;;AAEhC,YAAA,IAAI,QAAQ,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,EAAE;AACjC,gBAAA,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,aAAA;AACD,YAAA,OAAO,GAAG,OAAO,IAAI,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC;AAClD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;AACjB,SAAA;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,4BAA4B,CAAC,KAAY,EAAE,IAAY,EAAE,SAAiB,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,SAAA;KACF;AAED,IAAA,0BAA0B,CAAC,KAAY,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;IAED,6BAA6B,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;YAC1C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;AAED,IAAA,MAAM,CAAC,KAAY,EAAE,QAAgB,EAAE,IAAY,EAAE,SAAiB,EAAA;AACpE,QAAA,IAAI,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC;QAExB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB,EAAE,CAAC,CAAC,CAAC;AAEN,QAAA,QAAQ,IAAI;AACV,YAAA,KAAK,CAAC;gBACJ,IAAI,SAAS,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;AAC1C,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM;AAER,YAAA,KAAK,CAAC;gBACJ,IAAI,SAAS,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;AAC5C,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM;AAER,YAAA,KAAK,CAAC;gBACJ,IAAI,SAAS,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;AAC5C,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM;AACT,SAAA;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,aAAa,CAAC,KAAK,EAAA;QACjB,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAAE,YAAA,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;AACvE,aAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;;AAEhC,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE;AAC3B,gBAAA,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,aAAA;AACD,YAAA,OAAO,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;AACjD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;AACjB,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACrD,QAAA,SAAS,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACrD,QAAA,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACrD,QAAA,SAAS,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACrD,QAAA,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,UAAU,GAAA;AACR,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,KAAK,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE;AAAE,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;gBACzD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AACzE,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;;AAC7C,gBAAA,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,YAAA,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAED,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI;YACF,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;;AAEZ,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED,IAAA,gBAAgB,CAAC,KAAK,EAAA;QACpB,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE;gBACrF,OAAO,GAAG,KAAK,CAAC;AACjB,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE;AACnG,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAClE,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,oBAAoB,CAAC,IAAY,EAAA;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,KAAU,CAAC;AAEf,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACrC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChD,KAAK,GAAG,EAAE,CAAC;AACX,YAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;AACxB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAClC,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;YACzD,KAAK,GAAG,EAAE,CAAC;AACX,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,aAAa,CAAC,IAAI,EAAA;AAChB,QAAA,IAAI,IAAU,CAAC;QACf,IAAI,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,gBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAE7B,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3C,aAAA;AAAM,iBAAA;gBACL,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAA;QAClC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACpC,YAAA,MAAM,cAAc,CAAC;AACtB,SAAA;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACtC,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;AAED,IAAA,WAAW,CAAC,IAAI,EAAA;QACd,OAAO,IAAI,YAAY,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC7D;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,GAAG,GACL,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;cACjE,IAAI,CAAC,WAAW;cAChB,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AAC1C,kBAAE,SAAS;AACX,kBAAE,IAAI,IAAI,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;AACvC,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEhB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAChD,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,aAAA;AACF,SAAA;KACF;AAED,IAAA,uBAAuB,CAAC,KAAqB,EAAA;QAC3C,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;oBACtD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,IAAI,IAAI,CAAC,OAAO;4BAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;4BACjG,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9F,qBAAA;oBAED,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,iBAAA;gBACD,MAAM;AAER,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;AACT,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,KAAqB,EAAA;QAC1C,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,iBAAA;gBACD,MAAM;AAER,YAAA,KAAK,MAAM;gBACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClC,iBAAA;gBACD,MAAM;AACT,SAAA;KACF;IAED,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBACjE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1D,SAAA;KACF;IAED,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,SAAA;KACF;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,SAAA;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACzE,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AACvG,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AACpG,iBAAA;AAED,gBAAA,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;AACnF,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;AACnF,aAAA;AACF,SAAA;KACF;AAED,IAAA,cAAc,CAAC,OAAO,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,cAAc,GAChB,qHAAqH,CAAC;YACxH,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AAEzD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,KAAU,KAAI;gBAC/E,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,aAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACzD,SAAA;KACF;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACvE,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,OAAO;AACR,SAAA;QAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,eAAwB,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE;gBACrE,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;AACP,aAAA;AACF,SAAA;QAED,IAAI,CAAC,eAAe,EAAE;YACpB,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC5D,SAAA;QAED,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,uBAAuB,GAAA;QACrB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;KACF;IAED,0BAA0B,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAClC,SAAA;KACF;AAED,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAChD,IAAI;gBACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,aAAA;YAAC,OAAM,EAAA,EAAA;gBACN,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;AAED,IAAA,gBAAgB,CAAC,EAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;AAED,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC1B;AAED,IAAA,gBAAgB,CAAC,GAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;KAC7D;IAED,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;KACvF;;IAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,KAAI;YACxB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;AACpF,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;SAChB,EACD,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,KAAI;AACnC,YAAA,IAAI,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AACpB,gBAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;AACvB,oBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACjB,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,EACD,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,KAAI;AACnD,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACjE,SAAC,CAAC;QACJ,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;AACpD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;wBACrD,OAAO,GAAG,KAAK,CAAC;AACjB,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC/C,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,UAAU,CAClB,GAAG,EACH,IAAI,CAAC,MAAM,EAAE,EACb,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,EACpD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAC/C,CAAC;4BACF,MAAM;AACR,wBAAA,KAAK,GAAG;4BACN,MAAM,IAAI,YAAY,CACpB,GAAG,EACH,IAAI,CAAC,KAAK,CACR,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AACrH,gCAAA,QAAQ,CACX,EACD,CAAC,CACF,CAAC;4BACF,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACpD,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,UAAU,CAClB,GAAG,EACH,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,EACtD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CACjD,CAAC;4BACF,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC;4BACxH,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BACzB,MAAM;AACR,wBAAA,KAAK,GAAG;4BACN,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;4BACpD,MAAM;AACR,wBAAA,KAAK,GAAG;AACN,4BAAA,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;gCAClB,MAAM,IAAI,GAAG,CAAC;AACf,6BAAA;AAAM,iCAAA;gCACL,OAAO,GAAG,IAAI,CAAC;AAChB,6BAAA;4BACD,MAAM;AACR,wBAAA;AACE,4BAAA,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,UAAU,CAAC,IAAI,EAAA;QACb,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE;YACxD,KAAK,IAAI,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,MAAM,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/D,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;AAC5C,SAAA;QACD,MAAM,IAAI,GAAG,CAAC;AACd,QAAA,MAAM,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;QAEjD,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,IAAI,GAAG,CAAC;AACd,YAAA,MAAM,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAClD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,YAAA,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;AAChD,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,SAAS,CAAC,KAAK,EAAA;QACb,IAAI,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;AAEhD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE;AACtC,YAAA,MAAM,cAAc,CAAC;AACtB,SAAA;QAED,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAEtD,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;AACjI,YAAA,MAAM,cAAc,CAAC;AACtB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;oBACvB,CAAC,IAAI,EAAE,CAAC;AACT,iBAAA;qBAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;oBAC/B,CAAC,IAAI,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1C,SAAA;KACF;;IAGD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAA;AACrB,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACnC,YAAA,MAAM,mBAAmB,CAAC;AAC3B,SAAA;AAED,QAAA,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QAClE,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,OAAO,EACT,GAAG,EACH,KAAK,EACL,MAAM,GAAG,CAAC,EACV,eAAe,GACb,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ;cACpC,IAAI,CAAC,eAAe;cACpB,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,EAC3E,IAAI,GAAG,CAAC,CAAC,EACT,KAAK,GAAG,CAAC,CAAC,EACV,GAAG,GAAG,CAAC,CAAC,EACR,GAAG,GAAG,CAAC,CAAC,EACR,OAAO,GAAG,KAAK,EACf,IAAI,EACJ,SAAS,GAAG,CAAC,KAAK,KAAI;YACpB,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;AAClF,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,EACD,SAAS,GAAG,CAAC,KAAK,KAAI;YACpB,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAC9B,IAAI,GAAG,KAAK,KAAK,GAAG,GAAG,EAAE,GAAG,KAAK,KAAK,GAAG,GAAG,EAAE,GAAG,KAAK,KAAK,GAAG,IAAI,SAAS,GAAG,CAAC,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EACvG,OAAO,GAAG,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,EAClC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,EACzD,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC9C,aAAA;AACD,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC7B,EACD,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,KAAI;AACzC,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC;YACpD,IAAI,KAAK,GAAG,EAAE,CAAC;AAEf,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,aAAA;YACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,gBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACtC,aAAC,CAAC,CAAC;AAEH,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;oBAC1E,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;oBACtB,MAAM;AACP,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,OAAO,KAAK,GAAG,CAAC,CAAC;AAClB,aAAA;AAAM,iBAAA;gBACL,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAC5C,aAAA;AACH,SAAC,EACD,YAAY,GAAG,MAAK;AAClB,YAAA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBACnD,MAAM,iCAAiC,GAAG,MAAM,CAAC;AAClD,aAAA;AACD,YAAA,MAAM,EAAE,CAAC;AACX,SAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACzB,GAAG,GAAG,CAAC,CAAC;AACT,SAAA;AAED,QAAA,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;AACpD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;oBACrD,OAAO,GAAG,KAAK,CAAC;AACjB,iBAAA;AAAM,qBAAA;AACL,oBAAA,YAAY,EAAE,CAAC;AAChB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B,oBAAA,KAAK,GAAG;AACN,wBAAA,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACrB,MAAM;AACR,oBAAA,KAAK,GAAG;wBACN,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;wBACnH,MAAM;AACR,oBAAA,KAAK,GAAG;AACN,wBAAA,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACrB,MAAM;AACR,oBAAA,KAAK,GAAG;AACN,wBAAA,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACvB,MAAM;AACR,oBAAA,KAAK,GAAG;wBACN,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;wBAC/H,MAAM;AACR,oBAAA,KAAK,GAAG;AACN,wBAAA,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACtB,MAAM;AACR,oBAAA,KAAK,GAAG;wBACN,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,wBAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1B,wBAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,wBAAA,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBACrB,MAAM;AACR,oBAAA,KAAK,GAAG;AACN,wBAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;AAC7D,wBAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1B,wBAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,wBAAA,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBACrB,MAAM;AACR,oBAAA,KAAK,GAAG;AACN,wBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AAClB,4BAAA,YAAY,EAAE,CAAC;AAChB,yBAAA;AAAM,6BAAA;4BACL,OAAO,GAAG,IAAI,CAAC;AAChB,yBAAA;wBACD,MAAM;AACR,oBAAA;AACE,wBAAA,YAAY,EAAE,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AACzB,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACvB,MAAM,2CAA2C,GAAG,KAAK,CAAC;AAC3D,aAAA;AACF,SAAA;AAED,QAAA,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AACf,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;aAAM,IAAI,IAAI,GAAG,GAAG,EAAE;AACrB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,eAAe,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5G,SAAA;AAED,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACZ,KAAK,GAAG,CAAC,CAAC;YACV,GAAG,GAAG,GAAG,CAAC;YACV,GAAG;gBACD,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,GAAG,IAAI,GAAG,EAAE;oBACd,MAAM;AACP,iBAAA;AACD,gBAAA,KAAK,EAAE,CAAC;gBACR,GAAG,IAAI,GAAG,CAAC;AACZ,aAAA,QAAQ,IAAI,EAAE;AAChB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjC,YAAA,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;YAC1F,MAAM,cAAc,CAAC;AACtB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,oBAAoB,CAAC,IAAI,EAAA;QACvB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,QAAA,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;KAClE;AAED,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,IAAI,GAAS,IAAI,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,QAAQ,GAAG;AACb,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW;AAC5F,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED,IAAA,kBAAkB,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,qBAAqB,GAAA;QACnB,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACrD,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAChC,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,UAAU,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACxD,aAAA;YAED,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAChD,qBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9C,qBAAA,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEnG,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACrD,oBAAA,IAAI,MAAM,GAAG,CAAA;wCACiB,IAAI,CAAC,iBAAiB,CAAA,gCAAA,EAAmC,SAAS,CAAA;;;qBAGrF,CAAC;AAEZ,oBAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;AACpD,wBAAA,MAAM,IAAI,CAAA;AACsB,0CAAA,EAAA,IAAI,CAAC,iBAAiB,CAAmC,gCAAA,EAAA,CAAC,GAAG,CAAC,CAAA;;;yBAGjF,CAAC;AACf,qBAAA;AAED,oBAAA,SAAS,IAAI,CAAA;wDACiC,UAAU,CAAA;8BACpC,MAAM,CAAA;;qBAEf,CAAC;AACb,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,SAAS,CAAC;AACnD,SAAA;KACF;IAED,6BAA6B,GAAA;QAC3B,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACpC,SAAA;KACF;IAED,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,MAAM,cAAc,GAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,GAAG,UAAU,CAAC;AAEvF,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,KAAK,KAAI;oBACvF,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvD,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;4BACjB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEhC,4BAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,2BAA2B,GAAA;QACzB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACnC,SAAA;KACF;IAED,0BAA0B,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAChE,SAAA;KACF;IAED,4BAA4B,GAAA;QAC1B,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACpC,SAAA;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAK;gBACjG,IAAI,IAAI,CAAC,cAAc,EAAE;oBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;KACzC;IAED,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC3C,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;AAC3B,QAAA,OAAO,EACL,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5C,aAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;QAC3B,QACE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC;YACtD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC;YAC3D,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC;YACtD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAC3D;KACH;IAED,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YACtD,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC3B,SAAA;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;AAC5C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,SAAA;QAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;qGA/vFU,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,QAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,szEALR,CAAC,uBAAuB,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAkInB,aAAa,EA5gBpB,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsWT,EAAA,CAAA,EACW,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EAAA;QACV,OAAO,CAAC,kBAAkB,EAAE;AAC1B,YAAA,KAAK,CACH,gBAAgB,EAChB,KAAK,CAAC;AACJ,gBAAA,SAAS,EAAE,sBAAsB;AACjC,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA,CAAC,CACH;YACD,UAAU,CAAC,iBAAiB,EAAE;gBAC5B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAC/C,gBAAA,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;aAC3E,CAAC;AACF,YAAA,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3F,UAAU,CAAC,wBAAwB,EAAE;gBACnC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,uCAAuC,EAAE,CAAC;gBACzE,OAAO,CAAC,0BAA0B,CAAC;aACpC,CAAC;YACF,UAAU,CAAC,wBAAwB,EAAE;AACnC,gBAAA,OAAO,CACL,0BAA0B,EAC1B,KAAK,CAAC;AACJ,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,uCAAuC;AACnD,iBAAA,CAAC,CACH;aACF,CAAC;SACH,CAAC;AACH,KAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAYU,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAjZpB,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EACZ,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsWT,EAAA,CAAA,EACW,UAAA,EAAA;wBACV,OAAO,CAAC,kBAAkB,EAAE;AAC1B,4BAAA,KAAK,CACH,gBAAgB,EAChB,KAAK,CAAC;AACJ,gCAAA,SAAS,EAAE,sBAAsB;AACjC,gCAAA,OAAO,EAAE,CAAC;AACX,6BAAA,CAAC,CACH;4BACD,UAAU,CAAC,iBAAiB,EAAE;gCAC5B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAC/C,gCAAA,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;6BAC3E,CAAC;AACF,4BAAA,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC3F,UAAU,CAAC,wBAAwB,EAAE;gCACnC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,uCAAuC,EAAE,CAAC;gCACzE,OAAO,CAAC,0BAA0B,CAAC;6BACpC,CAAC;4BACF,UAAU,CAAC,wBAAwB,EAAE;AACnC,gCAAA,OAAO,CACL,0BAA0B,EAC1B,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,uCAAuC;AACnD,iCAAA,CAAC,CACH;6BACF,CAAC;yBACH,CAAC;AACH,qBAAA,EACK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AACjC,wBAAA,+BAA+B,EAAE,QAAQ;AACzC,wBAAA,8BAA8B,EAAE,OAAO;AACvC,wBAAA,8BAA8B,EAAE,wBAAwB;qBACzD,EACU,SAAA,EAAA,CAAC,uBAAuB,CAAC,EACnB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA,CAAA;uOAI5B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAEI,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEyB,SAAS,EAAA,CAAA;sBAAxC,eAAe;uBAAC,aAAa,CAAA;gBAErB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEqC,kBAAkB,EAAA,CAAA;sBAA5D,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAEG,mBAAmB,EAAA,CAAA;sBAA9D,SAAS;gBAAC,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAEU,OAAO,EAAA,CAAA;sBAA1D,SAAS;gBAAC,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAiIjC,IAAI,EAAA,CAAA;sBAAhB,KAAK;gBASO,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAkBO,OAAO,EAAA,CAAA;sBAAnB,KAAK;gBAYO,OAAO,EAAA,CAAA;sBAAnB,KAAK;gBAYO,aAAa,EAAA,CAAA;sBAAzB,KAAK;gBAWO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAYO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAgBO,QAAQ,EAAA,CAAA;sBAApB,KAAK;gBAiBO,iBAAiB,EAAA,CAAA;sBAA7B,KAAK;gBAWO,cAAc,EAAA,CAAA;sBAA1B,KAAK;gBAWO,cAAc,EAAA,CAAA;sBAA1B,KAAK;gBAWF,MAAM,EAAA,CAAA;sBADT,KAAK;;MAs3EK,cAAc,CAAA;;2GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,CAvwFd,QAAQ,CAAA,EAAA,OAAA,EAAA,CAmwFT,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAnwFrD,QAAQ,CAAA,EAAA,CAAA,CAAA;AAuwFR,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAJf,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;2FAIrD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;oBACjE,OAAO,EAAE,CAAC,QAAQ,CAAC;oBACnB,YAAY,EAAE,CAAC,QAAQ,CAAC;iBACzB,CAAA;;;AC1sGD;;AAEG;;;;"}