ng-virtual-list 14.11.2 → 14.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/README.md +1 -0
  2. package/esm2020/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +7 -1
  3. package/esm2020/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +2 -7
  4. package/esm2020/lib/components/ng-list-item/ng-virtual-list-item.module.mjs +3 -3
  5. package/esm2020/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +3 -3
  6. package/esm2020/lib/components/ng-scroll-bar/ng-scroll-bar.module.mjs +3 -3
  7. package/esm2020/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +19 -8
  8. package/esm2020/lib/components/ng-scroller/ng-scroller.module.mjs +3 -3
  9. package/esm2020/lib/const/index.mjs +9 -1
  10. package/esm2020/lib/interfaces/index.mjs +1 -1
  11. package/esm2020/lib/interfaces/scrolling-settings.mjs +2 -0
  12. package/esm2020/lib/ng-virtual-list.component.mjs +92 -29
  13. package/fesm2015/ng-virtual-list.mjs +128 -43
  14. package/fesm2015/ng-virtual-list.mjs.map +1 -1
  15. package/fesm2020/ng-virtual-list.mjs +123 -41
  16. package/fesm2020/ng-virtual-list.mjs.map +1 -1
  17. package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +2 -0
  18. package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +0 -2
  19. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +6 -1
  20. package/lib/const/index.d.ts +2 -1
  21. package/lib/interfaces/index.d.ts +2 -1
  22. package/lib/interfaces/scrolling-settings.d.ts +38 -0
  23. package/lib/ng-virtual-list.component.d.ts +16 -2
  24. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/utils/disposable-component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/const/index.ts","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.html","../../../projects/ng-virtual-list/src/lib/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.module.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.module.ts","../../../projects/ng-virtual-list/src/lib/interfaces/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import { CollectionModes, MethodsForSelecting, SnappingMethods, TextDirections } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams } from '../interfaces';\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.STANDART;\r\n\r\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth' as ScrollBehavior;\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const FOCUS = 'focus';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 = 500;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item__container';\r\n","import { ITemplateContext } from \"../interfaces\";\r\n\r\nexport const ID = 'id',\r\n TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)',\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n\r\n export const DEFAULT_TEMPLATE_CONTEXT: ITemplateContext = {\r\n data: undefined,\r\n prevData: undefined,\r\n nextData: undefined,\r\n measures: null,\r\n config: {\r\n focused: false,\r\n selected: false,\r\n collapsed: false,\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical: false,\r\n dynamic: false,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: '0',\r\n },\r\n reseted: false,\r\n index: -1,\r\n api: null,\r\n };\r\n ","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as unknown as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as unknown as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === (handler as any));\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as unknown as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler as any);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as unknown as E, listener as unknown as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 10, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/core/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache(async = true) {\r\n if (async) {\r\n this._clearScrollDirectionDebounce.execute();\r\n return;\r\n }\r\n\r\n this._scrollDirectionCache = [];\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as unknown as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/core/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<ComponentRef<C>> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1, snapped = !!snappedComponents ? [...snappedComponents] : [];\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item.id;\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!Array.isArray(untrackedComponentsByTypeMap[type])) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (Array.isArray(list) && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../interfaces\";\r\nimport {\r\n HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snipedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n isUpdating: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends IItem, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = TrackBoxEvents;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type OnTickEventListener = () => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnTickEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nexport interface IGetMetricsReturns {\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\ninterface IItem<I = any> {\r\n [prop: string]: I;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'n';\r\n\r\ntype Cache = ISize & { method?: ItemDisplayMethods } & IItem;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/core/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = true;\r\n }\r\n }\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b?.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n\r\n this._isReseted = reseted;\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n this._newItems = [];\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item[trackBy];\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item[trackBy];\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n this._newItems.push(id);\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0, reverse: boolean = false): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; reverse ? j >= 0 : j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, bufferSize: minBufferSize,\r\n scrollSize, snap, itemConfigMap, enabledBufferOptimization, previousTotalSize, crudDetected,\r\n deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot,\r\n snipedPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n deltaOfNewItems = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id === fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = this._newItems.indexOf(id) > -1 || (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsWeights.splice(leftItemsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n deltaOfNewItems += componentSizeDelta;\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n itemsFromStartToScrollEnd = Math.floor(typicalItemSize !== 0 ? scrollSize / typicalItemSize : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(typicalItemSize !== 0 ? (scrollSize + size) / typicalItemSize : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = (totalLength * typicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n isUpdating,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snipedPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio);\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? startPosition : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : startPosition,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: items.length,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex, iterations = 0;\r\n\r\n while (renderItems > 0) {\r\n iterations++;\r\n if (iterations > totalLength || i >= totalLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n\r\n const id = collectionItem[trackBy], cache = this.get(id)!,\r\n size = dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = snap && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n zIndex: '0',\r\n };\r\n\r\n count++;\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n nextSticky.config.zIndex = '3';\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (!!nextEndSticky && !!endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.clearScrollDirectionCache(false);\r\n\r\n this.deltaDirection = 0;\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snappedDisplayComponents, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (!!this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (!!this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","export const NGVL_INDEX = 'ngvl-index',\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","export const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: ScrollBehavior | 'auto' | 'instant' | 'smooth') => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, takeUntil, tap } from 'rxjs';\r\nimport { TrackBox, TrackBoxEvents } from './core/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IAnimationParams, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirection, TextDirections } from './enums';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK,\r\n ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | null) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._trackBox?.changes(immediately, force);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.selectable)) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.sticky > 0 && config.collapsable)) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (collapsed === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\r\n }\r\n }\r\n\r\n areaFocus(id: Id | null) {\r\n this._$focusedId.next(id);\r\n }\r\n\r\n initialize(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n\r\n dispose(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $itemClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$itemClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set сollapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get сollapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n * @param force - Forced update.\r\n */\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._internalService.update(immediately, force);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * Base disposable component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/disposable-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n template: ``,\r\n})\r\nexport class DisposableComponent implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}","import { ChangeDetectorRef, ElementRef, inject, TemplateRef } from '@angular/core';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../const';\r\nimport { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, DEFAULT_TEMPLATE_CONTEXT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN,\r\n} from '../const';\r\nimport { TextDirection, TextDirections } from '../../../enums';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { BehaviorSubject, combineLatest, takeUntil, tap } from 'rxjs';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class BaseVirtualListItemComponent extends DisposableComponent {\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected _cdr = inject(ChangeDetectorRef);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected _$config = new BehaviorSubject<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n $config = this._$config.asObservable();\r\n\r\n protected _$measures = new BehaviorSubject<IDisplayObjectMeasures | null>(null);\r\n $measures = this._$measures.asObservable();\r\n\r\n protected _$focused = new BehaviorSubject<boolean>(false);\r\n $focused = this._$focused.asObservable();\r\n\r\n protected _$part = new BehaviorSubject<string>(PART_DEFAULT_ITEM);\r\n $part = this._$part.asObservable();\r\n\r\n protected _data: IRenderVirtualListItem | null = null;\r\n get data() { return this._data; }\r\n protected readonly _$data = new BehaviorSubject<IRenderVirtualListItem | null>(this._data);\r\n protected readonly $data = this._$data.asObservable();\r\n\r\n set item(v: IRenderVirtualListItem | null) {\r\n if (this._data === v || this._data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this._$data.next(v);\r\n }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean; }>({});\r\n $classes = this._$classes.asObservable();\r\n\r\n private _$index = new BehaviorSubject<number>(-1);\r\n $index = this._$index.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<ITemplateContext>(DEFAULT_TEMPLATE_CONTEXT);\r\n $templateContext = this._$templateContext.asObservable();\r\n\r\n public regular: boolean = false;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n protected itemRenderer: TemplateRef<any> | undefined;\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this.itemRenderer === v) {\r\n return;\r\n }\r\n\r\n this.itemRenderer = v;\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n constructor() {\r\n super();\r\n\r\n const $data = this.$data,\r\n $config = this.$config,\r\n $measures = this.$measures,\r\n $focused = this.$focused;\r\n\r\n combineLatest([$data, $focused]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, focused]) => {\r\n this._$classes.next({\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: focused,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n $config.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(config => {\r\n this._$index.next(config?.tabIndex ?? -1);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $config, $measures]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, config, measures]) => {\r\n this._$templateContext.next({\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n });\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this._$measures.next(v?.measures ? { ...v.measures } : null)\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;\r\n if (data) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n el.removeAttribute(ID);\r\n }\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, isSelected: boolean, isCollapsed: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n }\r\n if (this._$focused.getValue()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._$part.next(part);\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };\r\n }\r\n\r\n show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = TRANSLATE_3D_HIDDEN;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { fromEvent, of, race, Subject } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[itemClick]',\r\n})\r\nexport class ItemClickDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | null) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n @Output()\r\n onClick = new EventEmitter<PointerEvent | TouchEvent>();\r\n\r\n constructor(private _elementRef: ElementRef) {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n if (e) {\r\n this.onClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit } from '@angular/core';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, filter, debounceTime, BehaviorSubject, takeUntil } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { FocusAlignment, Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { FocusAlignments } from '../../enums';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { createDisplayId, getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrls: ['./ng-virtual-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n private _$maxClickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n $maxClickDistance = this._$maxClickDistance.asObservable();\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$maxClickDistance.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = this.$data,\r\n $focused = this.$focused;\r\n\r\n $focused.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);\r\n }),\r\n ).subscribe();\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$focused.next(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$focused.next(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this._data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, length = this._service.collection?.length ?? 0;\r\n let index = tabIndex;\r\n while (index <= length) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.style.visibility !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n while (index >= 0) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focus(align: FocusAlignment = FocusAlignments.CENTER, index: number = -1) {\r\n if (this._service.listElement) {\r\n const tabIndex = index > -1 ? index : this._data?.config?.tabIndex ?? 0;\r\n let i = tabIndex;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(i));\r\n if (!!element) {\r\n this._service.focus(element, align);\r\n }\r\n }\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","<ng-container *ngIf=\"($data | async) as data\">\r\n <div itemClick [maxClickDistance]=\"$maxClickDistance | async\" [part]=\"$part | async\"\r\n [attr.ngvl-index]=\"data.config.tabIndex || -1\" tabindex=\"-1\" class=\"ngvl-item__container\"\r\n [ngClass]=\"$classes | async\" (onClick)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)||''\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","export const objectAsReadonly = <T = { [x: string]: any } | null | undefined>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as unknown as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","import { CollectionMode, CollectionModes } from \"../enums\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * easeOutQuad\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/animator/ease.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\n/**\r\n * easeLinear\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/animator/ease.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const easeLinear = (t: number) => {\r\n return t + t;\r\n};\r\n","import { Easing } from './types';\r\nimport { easeLinear } from './ease';\r\n\r\ninterface IAnimatorParams {\r\n startValue: number;\r\n endValue: number;\r\n duration?: number;\r\n getPropValue?: () => number;\r\n easingFunction?: Easing;\r\n onUpdate?: (data: IAnimatorUpdateData) => void;\r\n onComplete?: (data: IAnimatorUpdateData) => void;\r\n}\r\n\r\ninterface IAnimatorUpdateData {\r\n timestamp: number;\r\n delta: number;\r\n value: number;\r\n}\r\n\r\nexport const DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n\r\nexport class Animator {\r\n private _animationId: number = 0;\r\n\r\n animate(params: IAnimatorParams) {\r\n const {\r\n startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n this.stop();\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start;\r\n\r\n let isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = startPosDelta + start + diff * easedProgress,\r\n currentValue = val,\r\n t = Date.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n }\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant' as ScrollBehavior,\r\n AUTO = 'auto' as ScrollBehavior,\r\n SMOOTH = 'smooth' as ScrollBehavior,\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","export const calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n};\r\n","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","import {\r\n Component, ElementRef, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION } from '../const';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView extends DisposableComponent {\r\n @ViewChild('scrollContent')\r\n scrollContent: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('scrollViewport')\r\n scrollViewport: ElementRef<HTMLDivElement> | undefined;\r\n\r\n protected _$direction = new BehaviorSubject<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: ScrollerDirections) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get direcendOffsettion() { return this._$endOffset.getValue(); }\r\n\r\n protected _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this._$viewportBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = this._$startOffset.getValue();\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = this._$endOffset.getValue();\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this._$startOffset.getValue();\r\n this._actualTotalSize = v + startOffset;\r\n }\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n { width: contentWidth } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n { height: contentHeight } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);\r\n }\r\n\r\n protected _$viewportBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $viewportBounds = this._$viewportBounds.asObservable();\r\n\r\n protected _$contentBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $contentBounds = this._$contentBounds.asObservable();\r\n\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n constructor() {\r\n super();\r\n\r\n const $direction = this.$direction;\r\n $direction.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$isVertical.next(v === ScrollerDirection.VERTICAL);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : w - startOffset - endOffset,\r\n height = isVertical ? h - startOffset - endOffset : h,\r\n bounds = this._$viewportBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$viewportBounds.next({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : w - startOffset,\r\n height = isVertical ? h - startOffset : h,\r\n bounds = this._$contentBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$contentBounds.next({ width, height });\r\n }\r\n }\r\n}","import {\r\n Component, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { BehaviorSubject, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP,\r\n TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_VELOCITY_TIMESTAMP,\r\n OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n protected _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() !== v) {\r\n this._$scrollBehavior.next(v);\r\n }\r\n }\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n protected _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() !== v) {\r\n this._$overscrollEnabled.next(v);\r\n }\r\n }\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n set delta(v: number) {\r\n this._startPosition += v;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const $viewport = of(this.scrollViewport).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $content = of(this.scrollContent).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\r\n this.stopScrolling();\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this.y : this.x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = (startPos + delta), position = dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp;\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true });\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (this._$scrollBehavior.getValue() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (this._$scrollBehavior.getValue() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this._$overscrollEnabled.getValue()) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this._$overscrollEnabled.getValue()) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._$isVertical.getValue()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets);\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * SPEED_SCALE : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0.1;\r\n aSum = (aSum * MASS) + a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * FRICTION_FORCE;\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\r\n const dvSign = Math.sign(v),\r\n duration = DURATION, maxDuration = MAX_DURATION,\r\n maxDistance = dvSign * MAX_DIST, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / MASS,\r\n distance = Math.abs(s) < MAX_DIST ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / MASS,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n const isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL,\r\n startOffset = this._normalizeValueFromZero ? 0 : this._$startOffset.getValue(),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n result = value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false) {\r\n const isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n this._animator.animate({\r\n startValue, endValue, duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n }, onComplete: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n this._$scrollEnd.next(userAction);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this.stopScrolling();\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined): boolean {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this._$isVertical.getValue();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n this.y = yy;\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n this.x = xx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (this._y !== y) {\r\n if (isVertical) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshY(y);\r\n this.y = y;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshX(x);\r\n this.x = x;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshX(value: number) {\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(${(this._inversion ? 1 : -1) * value}px, 0, 0)`;\r\n }\r\n\r\n refreshY(value: number) {\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(0, ${(this._inversion ? 1 : -1) * value}px, 0)`;\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this._$isVertical.getValue(), offset);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","import { IScrollBarTemplateContext } from \"../interfaces\";\r\n\r\nexport const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n\r\nexport const DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT: IScrollBarTemplateContext = {\r\n api: null,\r\n width: 0,\r\n height: 0,\r\n fillPositions: [0, 1],\r\n params: {}\r\n}\r\n","import { Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, fromEvent, of, startWith, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport { DEFAULT_SCROLLBAR_INTERACTIVE } from '../../const';\r\nimport {\r\n DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT,\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * ScrollBar component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrls: ['./ng-scroll-bar.component.scss'],\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n @ViewChild('defaultRenderer', { read: TemplateRef<any> })\r\n protected _defaultRenderer: TemplateRef<any> | undefined;\r\n\r\n protected _service = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n @Output()\r\n onDrag = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n @Output()\r\n onDragEnd = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n @Input()\r\n set thumbGradientPositions(v: GradientColorPositions) {\r\n if (this._$thumbGradientPositions.getValue() !== v) {\r\n this._$thumbGradientPositions.next(v);\r\n }\r\n }\r\n get thumbGradientPositions() { return this._$thumbGradientPositions.getValue(); }\r\n\r\n private _$size = new BehaviorSubject<number>(DEFAULT_SIZE);\r\n readonly $size = this._$size.asObservable();\r\n\r\n @Input()\r\n set size(v: number) {\r\n if (this._$size.getValue() !== v) {\r\n this._$size.next(v);\r\n }\r\n }\r\n get size() { return this._$size.getValue(); }\r\n\r\n private _$thickness = new BehaviorSubject<number>(DEFAULT_THICKNESS);\r\n readonly $thickness = this._$thickness.asObservable();\r\n\r\n @Input()\r\n set thickness(v: number) {\r\n if (this._$thickness.getValue() !== v) {\r\n this._$thickness.next(v);\r\n }\r\n }\r\n get thickness() { return this._$thickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(0);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$endOffset.getValue(); }\r\n\r\n private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n @Input()\r\n set prepared(v: boolean) {\r\n if (this._$prepared.getValue() !== v) {\r\n this._$prepared.next(v);\r\n }\r\n }\r\n get prepared() { return this._$prepared.getValue(); }\r\n\r\n private _$interactive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $interactive = this._$interactive.asObservable();\r\n\r\n @Input()\r\n set interactive(v: boolean) {\r\n if (this._$interactive.getValue() !== v) {\r\n this._$interactive.next(v);\r\n }\r\n }\r\n get interactive() { return this._$interactive.getValue(); }\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n @Input()\r\n set show(v: boolean) {\r\n if (this._$show.getValue() !== v) {\r\n this._$show.next(v);\r\n }\r\n }\r\n get show() { return this._$show.getValue(); }\r\n\r\n private _$params = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n readonly $params = this._$params.asObservable();\r\n\r\n @Input()\r\n set params(v: { [propName: string]: any } | null) {\r\n if (this._$params.getValue() !== v) {\r\n this._$params.next(v);\r\n }\r\n }\r\n get params() { return this._$params.getValue(); }\r\n\r\n private _$renderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $renderer = this._$renderer.asObservable();\r\n\r\n @Input()\r\n set renderer(v: TemplateRef<any> | null) {\r\n if (this._$renderer.getValue() !== v) {\r\n this._$renderer.next(v);\r\n }\r\n }\r\n get renderer() { return this._$renderer.getValue(); }\r\n\r\n private _$thumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $thumbRenderer = this._$thumbRenderer.asObservable();\r\n\r\n private _$hoverState = new BehaviorSubject<boolean>(false);\r\n readonly $hoverState = this._$hoverState.asObservable();\r\n\r\n private _$pressedState = new BehaviorSubject<boolean>(false);\r\n readonly $pressedState = this._$pressedState.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [className: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n private _$templateContext = new BehaviorSubject<IScrollBarTemplateContext>(DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT);\r\n readonly $templateContext = this._$templateContext.asObservable();\r\n\r\n private _$styles = new BehaviorSubject<{ [styleName: string]: any }>({});\r\n readonly $styles = this._$styles.asObservable();\r\n\r\n private _$thumbWidth = new BehaviorSubject<number>(0);\r\n readonly $thumbWidth = this._$thumbWidth.asObservable();\r\n\r\n private _$thumbHeight = new BehaviorSubject<number>(0);\r\n readonly $thumbHeight = this._$thumbHeight.asObservable();\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n const $thumbWidth = this.$thumbWidth,\r\n $thumbHeight = this.$thumbHeight,\r\n $thumbGradientPositions = this.$thumbGradientPositions,\r\n $params = this.$params;\r\n\r\n combineLatest([$thumbWidth, $thumbHeight, $thumbGradientPositions, $params]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([thumbWidth, thumbHeight, thumbGradientPositions, params]) => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: thumbWidth,\r\n height: thumbHeight,\r\n fillPositions: thumbGradientPositions,\r\n params: params ?? {},\r\n };\r\n this._$templateContext.next(context);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = this.$prepared;\r\n $prepared.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshX(this._x);\r\n this.refreshY(this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$thickness, this.$size]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([isVertical, thickness, size]) => {\r\n this._$thumbWidth.next(isVertical ? thickness : size);\r\n this._$thumbHeight.next(isVertical ? size : thickness);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $renderer = this.$renderer.pipe(\r\n startWith(null),\r\n );\r\n\r\n $renderer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n switchMap(renderer => {\r\n return of((renderer ?? this._defaultRenderer) ?? null);\r\n }),\r\n tap(v => {\r\n this._$thumbRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe)\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$pressedState.next(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$pressedState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $pressedState = this.$pressedState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $hoverState = this.$hoverState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n combineLatest([\r\n $pressedState, $hoverState,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n distinctUntilChanged(),\r\n tap(([pressed, hover]) => {\r\n if (pressed) {\r\n this._service.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._service.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._service.state = ScrollbarStates.NORMAL;\r\n return;\r\n }),\r\n ).subscribe();\r\n\r\n this.$size.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.totalSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$interactive.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.interactive = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$show, this.$isVertical, this.$thickness]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([show, isVertical, thickness]) => {\r\n const sizePropName = isVertical ? WIDTH : HEIGHT;\r\n this._$styles.next({\r\n [sizePropName]: `${show ? thickness : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n this.$scroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n const event = this.createDragEvent(false);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this._$isVertical.getValue(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this._$startOffset.getValue() / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this._$endOffset.getValue() - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect()\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._service.click(event);\r\n }\r\n}\r\n","<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"$styles | async\" [ngClass]=\"($classes | async)!\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"($isVertical | async)! == false\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"($thumbRenderer | async)!\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)!\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n MEASURE_VELOCITY_TIMER = 20;\r\n","import { Directive, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n})\r\nexport class LocaleSensitiveDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n this._$langTextDir.next(v);\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n\r\n private _$listDir = new BehaviorSubject<ScrollerDirections | null>(ScrollerDirection.VERTICAL);\r\n readonly $listDir = this._$listDir.asObservable();\r\n\r\n @Input()\r\n set listDir(v: ScrollerDirections | null) {\r\n this._$listDir.next(v);\r\n }\r\n get listDir() { return this._$listDir.getValue(); }\r\n\r\n constructor(private _elementRef: ElementRef<HTMLElement>) {\r\n const $langTextDir = this.$langTextDir,\r\n $listDir = this.$listDir;\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir!, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME,\r\n SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS, MEASURE_VELOCITY_TIMER } from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant' as ScrollBehavior;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item component\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrls: ['./ng-scroller.component.scss'],\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n})\r\nexport class NgScrollerComponent extends NgScrollView implements OnDestroy {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n @Output()\r\n readonly onScrollbarVisible = new EventEmitter<boolean>();\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() !== v) {\r\n this._$scrollbarInteractive.next(v);\r\n }\r\n }\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set focusedElement(v: Id | undefined) {\r\n if (this._$focusedElement.getValue() !== v) {\r\n this._$focusedElement.next(v);\r\n }\r\n }\r\n get focusedElement() { return this._$focusedElement.getValue(); }\r\n\r\n private _$content = new BehaviorSubject<HTMLElement | undefined>(undefined);\r\n readonly $content = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set content(v: HTMLElement | undefined) {\r\n if (this._$content.getValue() !== v) {\r\n this._$content.next(v);\r\n }\r\n }\r\n get content() { return this._$content.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() !== v) {\r\n this._$loading.next(v);\r\n }\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue(); }\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() !== v) {\r\n this._$scrollbarThickness.next(v);\r\n }\r\n }\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() !== v) {\r\n this._$scrollbarThumbRenderer.next(v);\r\n }\r\n }\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>(null);\r\n readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() !== v) {\r\n this._$scrollbarThumbParams.next(v);\r\n }\r\n }\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n private _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n private _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n private _$thumbColorPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbColorPositions = this._$thumbColorPositions.asObservable();\r\n\r\n private _$actualThumbSize = new BehaviorSubject<number>(0);\r\n readonly $actualThumbSize = this._$actualThumbSize.asObservable();\r\n\r\n private _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n\r\n private _$preparedSignal = new BehaviorSubject<boolean>(false);\r\n readonly $preparedSignal = this._$preparedSignal.asObservable();\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this._$preparedSignal.next(v);\r\n }\r\n }\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this._$isVertical.getValue() ? this._y : this._x;\r\n\r\n private _measureVelocityAnimationFrameId: number = -1;\r\n\r\n private _measureVelocityAnimationTimer: number = -1;\r\n\r\n private _velocities: Array<number> = [];\r\n\r\n protected _velocity: number = 0;\r\n get velocity() { return this._velocity; }\r\n\r\n protected _averageVelocity: number = 0;\r\n get averageVelocity() { return this._averageVelocity; }\r\n\r\n private _measureVelocityHandler = () => {\r\n this.measureVelocityExecutor();\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n constructor() {\r\n super();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$langTextDir.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbGradientPositions.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$thumbColorPositions.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$actualThumbSize.next(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $prepared = this.$preparedSignal;\r\n $prepared.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarEnabled = this.$scrollbarEnabled,\r\n $scrollbarShow = this.$scrollbarShow;\r\n\r\n combineLatest([$scrollbarEnabled, $scrollbarShow, $prepared]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([scrollbarEnabled, scrollbarShow, prepared]) => {\r\n this._$show.next(scrollbarEnabled && scrollbarShow && prepared);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $scrollbarMinSize = this.$scrollbarMinSize,\r\n $isVertical = this.$isVertical,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$classes, this.$direction, this.$grabbing]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([classes, direction, grabbing]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true, grabbing });\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$contentBounds, this.$viewportBounds, this.$isVertical, this.$direction, this.$grabbing, this.$scrollbarEnabled]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([contentBounds, viewportBounds, isVertical, direction, grabbing, scrollbarEnabled]) => {\r\n const { width: contentWidth, height: contentHeight } = contentBounds,\r\n { width, height } = viewportBounds,\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n this._$containerClasses.next({ [direction]: true, grabbing, enabled: scrollbarEnabled, scrollable: contentSize > viewportSize });\r\n }),\r\n ).subscribe();\r\n\r\n this.updateScrollBarHandler();\r\n this.runMeasureVelocity();\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this._$viewportBounds.getValue();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$viewportBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n const bounds: ISize = { width: content.offsetWidth, height: content.offsetHeight }, b = this._$contentBounds.getValue();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$contentBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private measureVelocity() {\r\n this._measureVelocityAnimationTimer = MEASURE_VELOCITY_TIMER;\r\n\r\n this.measureVelocityExecutor();\r\n };\r\n\r\n private measureVelocityExecutor() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this._$isVertical.getValue() ? this._y : this._x);\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._velocity = velocity;\r\n this._velocities.push(velocity);\r\n this._averageVelocity = avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS;\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n\r\n this.runMeasureVelocity();\r\n }\r\n\r\n stopMeasureVelocity() {\r\n if (this._measureVelocityAnimationFrameId > -1) {\r\n cancelAnimationFrame(this._measureVelocityAnimationFrameId);\r\n this._measureVelocityAnimationFrameId = -1;\r\n }\r\n }\r\n\r\n private runMeasureVelocity() {\r\n this.stopMeasureVelocity();\r\n if (this._measureVelocityAnimationTimer >= 0) {\r\n this._measureVelocityAnimationTimer--;\r\n this._measureVelocityAnimationFrameId = requestAnimationFrame(this._measureVelocityHandler);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportBounds = this._$viewportBounds.getValue(),\r\n contentBounds = this._$contentBounds.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this._$scrollbarMinSize.getValue(),\r\n });\r\n\r\n this._$thumbGradientPositions.next(thumbGradientPositions);\r\n this._$thumbSize.next(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable && this._$scrollbarEnabled.getValue());\r\n };\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset(this._$startOffset.getValue());\r\n this.totalSize = 0;\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n if (this._$isVertical.getValue()) {\r\n this.refreshY(this._y);\r\n } else {\r\n this.refreshX(this._x);\r\n }\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(userAction);\r\n this.stopScrolling();\r\n const isVertical = this._$isVertical.getValue(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: false, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = false;\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n if (!userAction) {\r\n return;\r\n }\r\n this.refresh(true, true);\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n this._$scrollbarScroll.next(false);\r\n this.fireScrollEvent(false);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.stopMeasureVelocity();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\"\r\n [renderer]=\"($scrollbarThumbRenderer | async)!\" [thickness]=\"($scrollbarThickness | async)!\"\r\n [params]=\"($scrollbarThumbParams | async)!\" [thumbGradientPositions]=\"($thumbColorPositions | async)!\"\r\n [loading]=\"($loading | async)!\" [prepared]=\"($preparedSignal | async)!\"\r\n [interactive]=\"($scrollbarInteractive | async)!\" [show]=\"($show | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n width: (isVertical ? bounds.width : itemSize) as any,\r\n height: (isVertical ? itemSize : bounds.height) as any,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: \"0\",\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_100_PERSENT, SIZE_AUTO,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n this._elementRef.nativeElement.removeAttribute(ID);\r\n }\r\n }\r\n\r\n override show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, from, takeUntil, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../../../enums';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * NgPrerenderScrollerComponent.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-scroller/ng-prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrls: ['../../../ng-scroller/ng-scroller.component.scss'],\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n protected _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n protected _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n protected _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n protected _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n protected _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n this._$viewportBounds.next({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n this._$contentBounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $classes = this.$classes,\r\n $direction = this.$direction;\r\n\r\n combineLatest(([$classes, $direction])).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([classes, direction]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true });\r\n }),\r\n ).subscribe();\r\n\r\n const $contentBounds = this.$contentBounds,\r\n $viewportBounds = this.$viewportBounds,\r\n $isVertical = this.$isVertical,\r\n $scrollbarEnabled = this.$scrollbarEnabled;\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this._$containerClasses.next({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: 1,\r\n });\r\n\r\n this._$thumbSize.next(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}\r\n","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"($actualClasses | async)\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnDestroy, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport { BehaviorSubject, combineLatest, filter, Subject, Subscription, takeUntil, tap } from \"rxjs\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../enums\";\r\nimport { DisposableComponent } from \"../../../../utils/disposable-component\";\r\n\r\n/**\r\n * NgPrerenderList.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList extends DisposableComponent implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n protected _$enabled = new BehaviorSubject<boolean>(false);\r\n readonly $enabled = this._$enabled.asObservable();\r\n @Input()\r\n set enabled(v: boolean) {\r\n if (this._$enabled.getValue() !== v) {\r\n this._$enabled.next(v);\r\n }\r\n }\r\n get enabled() { return this._$enabled.getValue(); }\r\n\r\n protected _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n @Input()\r\n set isVertical(v: boolean) {\r\n if (this._$isVertical.getValue() !== v) {\r\n this._$isVertical.next(v);\r\n }\r\n }\r\n get isVertical() { return this._$isVertical.getValue(); }\r\n\r\n protected _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n readonly $items = this._$items.asObservable();\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() !== v) {\r\n this._$items.next(v);\r\n }\r\n }\r\n get items() { return this._$items.getValue(); }\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n protected _$bounds = new BehaviorSubject<ISize | null>({ width: 0, height: 0 });\r\n readonly $bounds = this._$bounds.asObservable();\r\n @Input()\r\n set bounds(v: ISize | null) {\r\n if (this._$bounds.getValue() !== v) {\r\n this._$bounds.next(v);\r\n }\r\n }\r\n get bounds() { return this._$bounds.getValue(); }\r\n\r\n protected _$dynamic = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n readonly $dynamic = this._$dynamic.asObservable();\r\n @Input()\r\n set dynamic(v: boolean) {\r\n if (this._$dynamic.getValue() !== v) {\r\n this._$dynamic.next(v);\r\n }\r\n }\r\n get dynamic() { return this._$dynamic.getValue(); }\r\n\r\n protected _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\r\n @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() !== v) {\r\n this._$itemSize.next(v);\r\n }\r\n }\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n protected _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n readonly $trackBy = this._$trackBy.asObservable();\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() !== v) {\r\n this._$trackBy.next(v);\r\n }\r\n }\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n protected _$itemRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any> | null) {\r\n if (this._$itemRenderer.getValue() !== v) {\r\n this._$itemRenderer.next(v);\r\n }\r\n }\r\n get itemRenderer() { return this._$itemRenderer.getValue(); }\r\n\r\n protected _$itemComponentClass = new BehaviorSubject<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n readonly $itemComponentClass = this._$itemComponentClass.asObservable();\r\n @Input()\r\n set itemComponentClass(v: Component$1<BaseVirtualListItemComponent>) {\r\n if (this._$itemComponentClass.getValue() !== v) {\r\n this._$itemComponentClass.next(v);\r\n }\r\n }\r\n get itemComponentClass() { return this._$itemComponentClass.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({ prepared: true });\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $enabled = this.$enabled;\r\n $enabled.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(enabled => {\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(this.$bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(bounds => {\r\n const { width, height } = bounds!;\r\n const el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox) {\r\n this._trackBox.reset(this._$itemComponentClass.getValue(), items, this._$bounds.getValue()!, {\r\n itemRenderer: this._$itemRenderer.getValue()!,\r\n dynamic: this._$dynamic.getValue(),\r\n itemSize: this._$itemSize.getValue(),\r\n isVertical: this._$isVertical.getValue(),\r\n trackBy: this._$trackBy.getValue(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._$items.next(items ?? []);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [direction]=\"($direction | async)!\" [scrollbarEnabled]=\"($scrollbarEnabled | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { filter, Observable, of, switchMap, takeUntil } from \"rxjs\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../enums\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { DisposableComponent } from \"../../utils/disposable-component\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer extends DisposableComponent {\r\n @ViewChild('list', { read: NgPrerenderList })\r\n private _list: NgPrerenderList | null = null;\r\n\r\n @Input()\r\n enabled: boolean = false;\r\n\r\n @Input()\r\n direction: Direction = DEFAULT_DIRECTION;\r\n\r\n @Input()\r\n isVertical: boolean = true;\r\n\r\n @Input()\r\n scrollbarEnabled: boolean = DEFAULT_SCROLLBAR_ENABLED;\r\n\r\n @Input()\r\n startOffset: number = 0;\r\n\r\n @Input()\r\n endOffset: number = 0;\r\n\r\n @Input()\r\n bounds!: ISize;\r\n\r\n @Input()\r\n dynamic: boolean = DEFAULT_DYNAMIC_SIZE;\r\n\r\n @Input()\r\n itemSize: number = DEFAULT_ITEM_SIZE;\r\n\r\n @Input()\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n @Input()\r\n itemRenderer!: TemplateRef<any>;\r\n\r\n $render!: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const $list = of(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list;\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds!\" [direction]=\"direction\" [dynamic]=\"dynamic\" [isVertical]=\"isVertical\"\r\n [itemSize]=\"itemSize\" [trackBy]=\"trackBy\" [itemRenderer]=\"itemRenderer\" [startOffset]=\"startOffset\"\r\n [endOffset]=\"endOffset\" [scrollbarEnabled]=\"scrollbarEnabled\" [enabled]=\"enabled\"></ng-prerender-list>","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nexport const formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\r\n","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, ElementRef, EventEmitter, inject, Input,\r\n OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n Observable,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, FOCUS, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECT_METHOD, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2, PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, IRect, ISize, IRenderStabilizerOptions,\r\n} from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting,\r\n SnappingMethod, SnappingMethods, TextDirection, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/is-method-for-selecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { CMap } from './utils/cmap';\r\nimport { validateArray, validateBoolean, validateFloat, validateInt, validateObject, validateString } from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\nimport { DisposableComponent } from './utils/disposable-component';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrls: ['./ng-virtual-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\r\n})\r\nexport class NgVirtualListComponent extends DisposableComponent implements OnDestroy {\r\n private static __nextId: number = 0;\r\n\r\n private _id: number = NgVirtualListComponent.__nextId;\r\n\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n @ViewChild('prerender', { read: NgPrerenderContainer })\r\n private _prerender: NgPrerenderContainer | undefined;\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('scroller', { read: NgScrollerComponent })\r\n private _scrollerComponent: NgScrollerComponent | undefined;\r\n\r\n private _$scroller = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $scroller = this._$scroller.asObservable();\r\n\r\n private _$list = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $list = this._$list.asObservable();\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n @Output()\r\n onViewportChange = new EventEmitter<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n @Output()\r\n onItemClick = new EventEmitter<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n @Output()\r\n onSelect = new EventEmitter<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n @Output()\r\n onCollapse = new EventEmitter<Array<Id>>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n @Output()\r\n onScrollReachStart = new EventEmitter<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n @Output()\r\n onScrollReachEnd = new EventEmitter<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n protected readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n private _scrollbarThicknessTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThicknessTransform(v);\r\n\r\n this._$scrollbarThickness.next(transformedValue);\r\n };\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n protected readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n private _scrollbarMinSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarMinSizeTransform(v);\r\n\r\n this._$scrollbarMinSize.next(transformedValue);\r\n };\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue() as number; }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n protected readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n private _scrollbarThumbRendererTransform = (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbRendererTransform(v);\r\n\r\n this._$scrollbarThumbRenderer.next(transformedValue);\r\n };\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n protected readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n private _scrollbarThumbParamsTransform = (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbParamsTransform(v);\r\n\r\n this._$scrollbarThumbParams.next(transformedValue);\r\n };\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n protected readonly $loading = this._$loading.asObservable();\r\n\r\n private _loadingTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._loadingTransform(v);\r\n\r\n this._$loading.next(transformedValue);\r\n };\r\n get loading() { return this._$loading.getValue() as boolean; }\r\n\r\n private _$waitForPreparation = new BehaviorSubject<boolean>(DEFAULT_WAIT_FOR_PREPARATION);\r\n protected readonly $waitForPreparation = this._$waitForPreparation.asObservable();\r\n\r\n private _waitForPreparationTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n @Input()\r\n set waitForPreparation(v: boolean) {\r\n if (this._$waitForPreparation.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._waitForPreparationTransform(v);\r\n\r\n this._$waitForPreparation.next(transformedValue);\r\n };\r\n get waitForPreparation() { return this._$waitForPreparation.getValue() as boolean; }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n protected readonly $clickDistance = this._$clickDistance.asObservable();\r\n\r\n private _clickDistanceTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n @Input()\r\n set clickDistance(v: number) {\r\n if (this._$clickDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._clickDistanceTransform(v);\r\n\r\n this._$clickDistance.next(transformedValue);\r\n };\r\n get clickDistance() { return this._$clickDistance.getValue() as number; }\r\n\r\n private _$snapToEndTransitionInstantOffset = new BehaviorSubject<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET);\r\n protected readonly $snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.asObservable();\r\n\r\n private _snapToEndTransitionInstantOffsetTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n @Input()\r\n set snapToEndTransitionInstantOffset(v: number) {\r\n if (this._$snapToEndTransitionInstantOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToEndTransitionInstantOffsetTransform(v);\r\n\r\n this._$snapToEndTransitionInstantOffset.next(transformedValue);\r\n };\r\n get snapToEndTransitionInstantOffset() { return this._$snapToEndTransitionInstantOffset.getValue(); }\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n protected readonly $items = this._$items.asObservable();\r\n\r\n private _itemsTransform = (v: IVirtualListCollection) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy;\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `null`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemsTransform(v);\r\n\r\n this._$items.next(transformedValue);\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$defaultItemValue = new BehaviorSubject<IVirtualListItem | null>(null);\r\n protected readonly $defaultItemValue = this._$defaultItemValue.asObservable();\r\n\r\n @Input()\r\n set defaultItemValue(v: IVirtualListItem | null) {\r\n if (this._$defaultItemValue.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$defaultItemValue.next(v);\r\n };\r\n get defaultItemValue() { return this._$defaultItemValue.getValue(); }\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n protected readonly $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _selectedIdsTransform = (v: Array<Id> | Id | null) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `null`.');\r\n return this._isMultiSelecting ? [] : null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n @Input()\r\n set selectedIds(v: Array<Id> | Id | null) {\r\n if (this._$selectedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectedIdsTransform(v);\r\n\r\n this._$selectedIds.next(transformedValue);\r\n };\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n protected readonly $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _collapsedIdsTransform = (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n @Input()\r\n set collapsedIds(v: Array<Id>) {\r\n if (this._$collapsedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsedIdsTransform(v);\r\n\r\n this._$collapsedIds.next(transformedValue);\r\n };\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n private _$selectByClick = new BehaviorSubject<boolean>(DEFAULT_SELECT_BY_CLICK);\r\n protected readonly $selectByClick = this._$selectByClick.asObservable();\r\n\r\n private _selectByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set selectByClick(v: boolean) {\r\n if (this._$selectByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectByClickTransform(v);\r\n\r\n this._$selectByClick.next(transformedValue);\r\n };\r\n get selectByClick() { return this._$selectByClick.getValue(); }\r\n\r\n private _$collapseByClick = new BehaviorSubject<boolean>(DEFAULT_COLLAPSE_BY_CLICK);\r\n protected readonly $collapseByClick = this._$collapseByClick.asObservable();\r\n\r\n private _collapseByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set collapseByClick(v: boolean) {\r\n if (this._$collapseByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapseByClickTransform(v);\r\n\r\n this._$collapseByClick.next(transformedValue);\r\n };\r\n get collapseByClick() { return this._$collapseByClick.getValue(); }\r\n\r\n private _$snap = new BehaviorSubject<boolean>(DEFAULT_SNAP);\r\n protected readonly $snap = this._$snap.asObservable();\r\n\r\n private _snapTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snap\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n @Input()\r\n set snap(v: boolean) {\r\n if (this._$snap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapTransform(v);\r\n\r\n this._$snap.next(transformedValue);\r\n };\r\n get snap() { return this._$snap.getValue(); }\r\n\r\n private _$scrollStartOffset = new BehaviorSubject<number>(0);\r\n protected readonly $scrollStartOffset = this._$scrollStartOffset.asObservable();\r\n\r\n private _scrollStartOffsetTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollStartOffset(v: number) {\r\n if (this._$scrollStartOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollStartOffsetTransform(v);\r\n\r\n this._$scrollStartOffset.next(transformedValue);\r\n };\r\n get scrollStartOffset() { return this._$scrollStartOffset.getValue(); }\r\n\r\n private _$scrollEndOffset = new BehaviorSubject<number>(0);\r\n protected readonly $scrollEndOffset = this._$scrollEndOffset.asObservable();\r\n\r\n private _scrollEndOffsetTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollEndOffset(v: number) {\r\n if (this._$scrollEndOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollEndOffsetTransform(v);\r\n\r\n this._$scrollEndOffset.next(transformedValue);\r\n };\r\n get scrollEndOffset() { return this._$scrollEndOffset.getValue(); }\r\n\r\n private _$snapScrollToStart = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_START);\r\n protected readonly $snapScrollToStart = this._$snapScrollToStart.asObservable();\r\n\r\n private _snapScrollToStartTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToStart(v: boolean) {\r\n if (this._$snapScrollToStart.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToStartTransform(v);\r\n\r\n this._$snapScrollToStart.next(transformedValue);\r\n };\r\n get snapScrollToStart() { return this._$snapScrollToStart.getValue(); }\r\n\r\n private _$snapScrollToEnd = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_END);\r\n protected readonly $snapScrollToEnd = this._$snapScrollToEnd.asObservable();\r\n\r\n private _snapScrollToEndTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToEnd(v: boolean) {\r\n if (this._$snapScrollToEnd.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToEndTransform(v);\r\n\r\n this._$snapScrollToEnd.next(transformedValue);\r\n };\r\n get snapScrollToEnd() { return this._$snapScrollToEnd.getValue(); }\r\n\r\n private _snapScrollToBottomTransform = () => {\r\n throw Error('The snapScrollToBottom property is deprecated. Use the snapScrollToEnd property.');\r\n };\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n @Input()\r\n set snapScrollToBottom(v: boolean) {\r\n this._snapScrollToBottomTransform();\r\n }\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n protected readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n private _scrollbarEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarEnabledTransform(v);\r\n\r\n this._$scrollbarEnabled.next(transformedValue);\r\n };\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n protected readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n private _scrollbarInteractiveTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarInteractiveTransform(v);\r\n\r\n this._$scrollbarInteractive.next(transformedValue);\r\n };\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n protected readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n\r\n private _scrollBehaviorTransform = (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `string`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollBehaviorTransform(v);\r\n\r\n this._$scrollBehavior.next(transformedValue);\r\n };\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n private _$animationParams = new BehaviorSubject<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n protected readonly $animationParams = this._$animationParams.asObservable();\r\n\r\n private _animationParamsTransform = (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, navigateToItem: 150, navigateByKeyboard: 50 }\".\r\n */\r\n @Input()\r\n set animationParams(v: IAnimationParams) {\r\n if (this._$animationParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._animationParamsTransform(v);\r\n\r\n this._$animationParams.next(transformedValue);\r\n };\r\n get animationParams() { return this._$animationParams.getValue(); }\r\n\r\n private _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n protected readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n\r\n private _overscrollEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._overscrollEnabledTransform(v);\r\n\r\n this._$overscrollEnabled.next(transformedValue);\r\n };\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n private _$enabledBufferOptimization = new BehaviorSubject<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n protected readonly $enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();\r\n\r\n private _enabledBufferOptimizationTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n @Input()\r\n set enabledBufferOptimization(v: boolean) {\r\n if (this._$enabledBufferOptimization.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._enabledBufferOptimizationTransform(v);\r\n\r\n this._$enabledBufferOptimization.next(transformedValue);\r\n };\r\n get enabledBufferOptimization() { return this._$enabledBufferOptimization.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n protected readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n\r\n private _itemRendererTransform = (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any>) {\r\n if (this._$itemRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemRendererTransform(v);\r\n\r\n this._$itemRenderer.next(transformedValue);\r\n };\r\n get itemRenderer() { return this._$itemRenderer.getValue() as TemplateRef<any>; }\r\n\r\n private _$itemConfigMap = new BehaviorSubject<IVirtualListItemConfigMap>({});\r\n protected readonly $itemConfigMap = this._$itemConfigMap.asObservable();\r\n\r\n private _itemConfigMapTransform = (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets `sticky` position, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end.\r\n * Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and\r\n * collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n @Input()\r\n set itemConfigMap(v: IVirtualListItemConfigMap) {\r\n if (this._$itemConfigMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemConfigMapTransform(v);\r\n\r\n this._$itemConfigMap.next(transformedValue);\r\n };\r\n get itemConfigMap() { return this._$itemConfigMap.getValue(); }\r\n\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n protected readonly $itemSize = this._$itemSize.asObservable();\r\n\r\n private _itemSizeTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n\r\n const val = Number(v);\r\n return Number.isNaN(val) || val <= 0 ? DEFAULT_ITEM_SIZE : val;\r\n };\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property \r\n * to adjust the sizes of the items in the unallocated area.\r\n */\r\n @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemSizeTransform(v);\r\n\r\n this._$itemSize.next(transformedValue);\r\n };\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n private _$dynamicSize = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n protected readonly $dynamicSize = this._$dynamicSize.asObservable();\r\n\r\n private _dynamicSizeTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n @Input()\r\n set dynamicSize(v: boolean) {\r\n if (this._$dynamicSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._dynamicSizeTransform(v);\r\n\r\n this._$dynamicSize.next(transformedValue);\r\n };\r\n get dynamicSize() { return this._$dynamicSize.getValue(); }\r\n\r\n private _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n protected readonly $direction = this._$direction.asObservable();\r\n\r\n private _directionTransform = (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._directionTransform(v);\r\n\r\n this._$direction.next(transformedValue);\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$collectionMode = new BehaviorSubject<CollectionMode>(DEFAULT_COLLECTION_MODE);\r\n protected readonly $collectionMode = this._$collectionMode.asObservable();\r\n\r\n private _collectionModeTransform = (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n @Input()\r\n set collectionMode(v: CollectionMode) {\r\n if (this._$collectionMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collectionModeTransform(v);\r\n\r\n this._$collectionMode.next(transformedValue);\r\n };\r\n get collectionMode() { return this._$collectionMode.getValue(); }\r\n\r\n private _$bufferSize = new BehaviorSubject<number>(DEFAULT_BUFFER_SIZE);\r\n protected readonly $bufferSize = this._$bufferSize.asObservable();\r\n\r\n private _bufferSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n @Input()\r\n set bufferSize(v: number) {\r\n if (this._$bufferSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._bufferSizeTransform(v);\r\n\r\n this._$bufferSize.next(transformedValue);\r\n };\r\n get bufferSize() { return this._$bufferSize.getValue(); }\r\n\r\n private _$maxBufferSize = new BehaviorSubject<number>(DEFAULT_MAX_BUFFER_SIZE);\r\n protected readonly $maxBufferSize = this._$maxBufferSize.asObservable();\r\n\r\n private _maxBufferSizeTransform = (v: number) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this._$bufferSize.getValue();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n };\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n @Input()\r\n set maxBufferSize(v: number) {\r\n const val = this._maxBufferSizeTransform(v);\r\n if (this._$maxBufferSize.getValue() === val) {\r\n return;\r\n }\r\n\r\n this._$maxBufferSize.next(val);\r\n };\r\n get maxBufferSize() { return this._$maxBufferSize.getValue(); }\r\n\r\n private _$snappingMethod = new BehaviorSubject<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n protected readonly $snappingMethod = this._$snappingMethod.asObservable();\r\n\r\n private _snappingMethodTransform = (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n @Input()\r\n set snappingMethod(v: SnappingMethod) {\r\n if (this._$snappingMethod.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingMethodTransform(v);\r\n\r\n this._$snappingMethod.next(transformedValue);\r\n };\r\n get snappingMethod() { return this._$snappingMethod.getValue(); }\r\n\r\n private _$methodForSelecting = new BehaviorSubject<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n protected readonly $methodForSelecting = this._$methodForSelecting.asObservable();\r\n\r\n private _methodForSelectingTransform = (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"methodForSelecting\" parameter must have the value `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECT_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n @Input()\r\n set methodForSelecting(v: MethodForSelecting) {\r\n if (this._$methodForSelecting.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._methodForSelectingTransform(v);\r\n\r\n this._$methodForSelecting.next(transformedValue);\r\n };\r\n get methodForSelecting() { return this._$methodForSelecting.getValue(); }\r\n\r\n private _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n protected readonly $trackBy = this._$trackBy.asObservable();\r\n\r\n private _trackByTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._trackByTransform(v);\r\n\r\n this._$trackBy.next(transformedValue);\r\n };\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n private _$screenReaderMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected readonly $screenReaderMessage = this._$screenReaderMessage.asObservable();\r\n\r\n private _screenReaderMessageTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n @Input()\r\n protected set screenReaderMessage(v: string) {\r\n if (this._$screenReaderMessage.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._screenReaderMessageTransform(v);\r\n\r\n this._$screenReaderMessage.next(transformedValue);\r\n };\r\n protected get screenReaderMessage() { return this._$screenReaderMessage.getValue(); }\r\n\r\n private _$screenReaderFormattedMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected $screenReaderFormattedMessage = this._$screenReaderFormattedMessage.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n protected readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _langTextDirTransform = (v: TextDirection) => {\r\n const valid = validateString(v);\r\n\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._langTextDirTransform(v);\r\n\r\n this._$langTextDir.next(transformedValue);\r\n };\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n private _$isVertical = new BehaviorSubject<boolean>(this.isVertical);\r\n protected $isVertical = this._$isVertical.asObservable();\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | null>(null);\r\n protected $focusedElement = this._$focusedElement.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n protected $classes = this._$classes.asObservable();\r\n\r\n private _$prerenderEnabled = new BehaviorSubject<boolean>(false);\r\n protected $prerenderEnabled = this._$prerenderEnabled.asObservable();\r\n\r\n private _$actualItems = new BehaviorSubject<IVirtualListCollection>([]);\r\n\r\n private _$collapsedItemIds = new BehaviorSubject<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _$bounds = new BehaviorSubject<ISize | null>(null);\r\n protected $bounds: Observable<ISize | null> = this._$bounds.asObservable();\r\n\r\n private _$totalSize = new BehaviorSubject<number>(0);\r\n\r\n private _$listBounds = new BehaviorSubject<ISize | null>(null);\r\n\r\n private _$scrollSize = new BehaviorSubject<number>(0);\r\n protected readonly $scrollSize = this._$scrollSize.asObservable();\r\n\r\n private _$isScrollStart = new BehaviorSubject<boolean>(true);\r\n\r\n private _$isScrollEnd = new BehaviorSubject<boolean>(false);\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._$list.getValue(), scroller = this._$scroller.getValue(), bounds = this._$bounds.getValue(), snappedComponents = this._snappedDisplayComponents;\r\n if (list && scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this._$snappingMethod.getValue();\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0].instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this._$langTextDir.getValue();\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0,\r\n scrollBarSize = this._$scrollbarThickness.getValue();\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize + 2;\r\n top = sHeight;\r\n bottom = height;\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const { width, height } = this._$bounds.getValue()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize);\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n const scrollWidth = scroller?.scrollWidth ?? 0, scrollHeight = scroller?.scrollHeight ?? 0;\r\n if (isVertical) {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollHeight) {\r\n pos = scrollHeight;\r\n }\r\n } else {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollWidth) {\r\n pos = scrollWidth;\r\n }\r\n }\r\n\r\n this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior,\r\n fireUpdate: true, blending: true, userAction: true, duration: this._$animationParams.getValue().navigateToItem,\r\n };\r\n scroller.refresh(false);\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this._$trackBy.getValue());\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _scrollStateUpdateIndex: number = 0;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this._$dynamicSize.getValue() && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n protected getScrollStateVersion(totalSize: number, scrollSize: number, cacheVersion: number): string {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n if (totalSize < scrollSize) {\r\n this._scrollStateUpdateIndex = this._scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : this._scrollStateUpdateIndex + 1;\r\n }\r\n return `${this._scrollStateUpdateIndex}_${totalSize}_${scrollSize}_${cacheVersion}`;\r\n };\r\n\r\n constructor() {\r\n super();\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n this._service.animationParams = this._$animationParams.getValue();\r\n\r\n const $dynamicSize = this.$dynamicSize,\r\n $snapScrollToEnd = this.$snapScrollToEnd;\r\n combineLatest([$dynamicSize, $snapScrollToEnd]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dynamicSize, snapScrollToEnd]) => {\r\n this._$prerenderEnabled.next(dynamicSize && snapScrollToEnd);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this.$direction.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n map(v => this.isVertical),\r\n tap(v => {\r\n this._$isVertical.next(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n let hasUserAction = false, hasScrollbarUserAction = false;\r\n\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n\r\n const $resizeViewport = this._scrollerComponent!.$resizeViewport,\r\n $resizeContent = this._scrollerComponent!.$resizeContent!;\r\n\r\n $resizeViewport.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$bounds.next(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$listBounds.next(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = this.$trackBy;\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap((params) => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = this.$list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n );\r\n\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const scrollStartOffset = this._$scrollStartOffset.getValue(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = this.$scrollbarThickness;\r\n $scrollbarThickness.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(takeUntil(this._$unsubscribe)),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(takeUntil(this._$unsubscribe)),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(takeUntil(this._$unsubscribe));\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params!;\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.clickDistance = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $prerenderContainer = of(this._prerender);\r\n\r\n const $prerender = $prerenderContainer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap((v) => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $items = this.$items,\r\n $dynamicSize = this.$dynamicSize,\r\n $snapScrollToStart = this.$snapScrollToStart,\r\n $snapScrollToEnd = this.$snapScrollToEnd,\r\n $waitForPreparation = this.$waitForPreparation;\r\n\r\n combineLatest([$prerenderContainer, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(([prerenderContainer]) => !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([prerenderContainer, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n return $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.itemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n return $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.itemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$focusedElement.next(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = this.$defaultItemValue,\r\n $selectByClick = this.$selectByClick,\r\n $collapseByClick = this.$collapseByClick,\r\n $isScrollStart = this._$isScrollStart.asObservable(),\r\n $isScrollEnd = this._$isScrollEnd.asObservable(),\r\n $scrollStartOffset = this.$scrollStartOffset,\r\n $scrollEndOffset = this.$scrollEndOffset,\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = this.$bounds.pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = this._$listBounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = this.$scrollSize,\r\n $itemSize = this.$itemSize.pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $bufferSize = this.$bufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = this.$maxBufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = this.$itemConfigMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = this.$snap,\r\n $isLazy = this.$collectionMode.pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = this.$enabledBufferOptimization,\r\n $snappingMethod = this.$snappingMethod.pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = this.$methodForSelecting,\r\n $selectedIds = this.$selectedIds,\r\n $collapsedIds = this.$collapsedIds.pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = this._$actualItems.asObservable().pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n ),\r\n $screenReaderMessage = this.$screenReaderMessage,\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntil(this._$unsubscribe),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this._$screenReaderFormattedMessage.next(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $itemsComposition = $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy];\r\n if (hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n this._$actualItems.next(actualItems);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._$list.getValue()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST_BOX);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST_BOX);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n debounceTime(0),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n\r\n let isChunkLoading = false;\r\n const $loading = this.$loading;\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n bufferSize: number; maxBufferSize: number; snap: boolean; isVertical: boolean; dynamicSize: boolean;\r\n enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean; collapsedIds: Array<Id>;\r\n }, optimization: boolean = false, reupdate: boolean = false) => {\r\n const {\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction, collapsedIds,\r\n } = params;\r\n const scroller = this._scrollerComponent;\r\n let totalSize = 0;\r\n if (scroller) {\r\n const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :\r\n (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n this._$totalSize.next(totalSize);\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = Math.round(actualScrollSize + delta),\r\n roundedScrollPositionAfterUpdate = Math.round(scrollPositionAfterUpdate),\r\n roundedMaxPositionAfterUpdate = Math.round(totalSize - viewportSize);\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n this.snappingHandler();\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (!snapScrollToStart && snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n this._trackBox.isScrollEnd;\r\n return;\r\n }\r\n\r\n if ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate)) {\r\n this._trackBox.clearDelta();\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n combineLatest([$snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $collapsedItemIds, $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n collapsedIds, bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n const scroller = this._scrollerComponent, velocity = this._scrollerComponent?.averageVelocity ?? 0,\r\n maxScrollSize = isVertical ? (scroller?.scrollHeight || 0) : (scroller?.scrollWidth ?? 0),\r\n isEdges = scrollSize === 0 || scrollSize === maxScrollSize, isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = dynamicSize && !itemsChanged && hasUserAction && !isScrolling && (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1),\r\n rerenderOptimization = dynamicSize && !itemsChanged && (hasUserAction || hasScrollbarUserAction) && !isEdges && velocity > 0 &&\r\n (velocity > MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 || hasUserAction);\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n\r\n if (!isScrolling) {\r\n update({\r\n snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = this.$scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = this._scrollerComponent!.$scroll,\r\n $scrollerScrollEnd = this._scrollerComponent!.$scrollEnd,\r\n $scrollbarScroll = this._scrollerComponent!.$scrollbarScroll;\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this._isVertical, bounds = this._$bounds.getValue(), listBounds = this._$listBounds.getValue(),\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n maxScrollSize = isVertical ? (listBounds?.height ?? 0) - (bounds?.height ?? 0) : (listBounds?.width ?? 0) - (bounds?.width ?? 0),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n if (scrollSize > MIN_PIXELS_FOR_PREVENT_SNAPPING) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n if (scrollSize < (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n hasScrollbarUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n tap(({ event }) => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(event => {\r\n const trackBy = this.trackBy, scrollerComponent = this._scrollerComponent,\r\n {\r\n id, iteration = 0, blending = false,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { iteration: nextIteration, blending, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (scrollerComponent) {\r\n const items = this._$actualItems.getValue();\r\n if (items && items.length) {\r\n const dynamicSize = this.dynamicSize, itemSize = this.itemSize, snapScrollToEnd = this.snapScrollToEnd;\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize,\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snap: this.snap, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n scrollerComponent.totalSize = totalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, scrollCalled, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical,\r\n currentScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n scrollSize = index * this.itemSize;\r\n if (currentScrollSize !== scrollSize) {\r\n this._$preventScrollSnapping.next(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, scrollCalled, cb }]);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n tap(([finished, params]) => {\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n if (!finished && !scrollParams?.scrollCalled) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n if (!this.dynamicSize) {\r\n this._$fireUpdate.next(true);\r\n this._scrollerComponent?.refresh(false, true);\r\n }\r\n this.emitScrollEvent(true, false, true);\r\n scrollParams?.cb?.();\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = this.$itemRenderer;\r\n\r\n $itemRenderer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$itemRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(bounds => {\r\n const size: ISize = { width: bounds!.width ?? 0, height: bounds!.height ?? 0 };\r\n this.onViewportChange.emit(objectAsReadonly(size));\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this._isSingleSelecting || (this._isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds;\r\n if ((this._isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.selectedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n let isCollapsedIdsFirstEmit = 0;\r\n\r\n this._service.$collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$collapsedItemIds.next(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this.collapsedIds;\r\n if ((isCollapsedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isCollapsedIdsFirstEmit > 2) {\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isCollapsedIdsFirstEmit < 3) {\r\n isCollapsedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n if (maxScrollSize >= 0) {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n if (isScrollStart) {\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING));\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(isScrollEnd);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = isScrollEnd;\r\n }\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this.snapScrollToStart, snapScrollToEnd = this.snapScrollToEnd;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScrollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScrollSize > scrollSize ? -1 : currentScrollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this.scrollStartOffset, this.scrollEndOffset,\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod;\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction;\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode;\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this.itemRenderer;\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (!!listContainerRef) {\r\n const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = this.itemRenderer;\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this.itemRenderer;\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._$list.getValue(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n return this._service.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior);\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this.items, firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollStart.next(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = (options?.behavior ?? BEHAVIOR_INSTANT) as ScrollBehavior,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this.items, latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender;\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._$collapsedItemIds.next([]);\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._$totalSize.next(0);\r\n this._$scrollSize.next(0);\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.ngOnDestroy();\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (this._service) {\r\n this._service.dispose();\r\n }\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (!!this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($itemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [endOffset]=\"($scrollEndOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"$snap | async\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)!\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<ng-scroller class=\"ngvl__list-scroller\" #scroller [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [endOffset]=\"($scrollEndOffset | async)!\" [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)\"\r\n [focusedElement]=\"($focusedElement | async)!\" [loading]=\"($loading | async)!\"\r\n [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollbarEnabled]=\"($scrollbarEnabled | async)!\"\r\n [scrollbarInteractive]=\"($scrollbarInteractive | async)!\" [scrollbarMinSize]=\"($scrollbarMinSize | async)!\"\r\n [scrollBehavior]=\"($scrollBehavior | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickDirective } from './item-click.directive';\r\n\r\n@NgModule({\r\n declarations: [ItemClickDirective],\r\n exports: [ItemClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class ItemClickModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { ItemClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListModule { }\r\n","import { TemplateRef } from '@angular/core';\r\nimport { Id } from '../types';\r\nimport { ISize } from './size';\r\nimport { IRenderVirtualListItem } from '../models/render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/interfaces/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\nexport * from './lib/components/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/interfaces';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","PX","ITEM_ID","BehaviorSubject","BaseVirtualListItemComponent","EventEmitter","takeUntil","tap","switchMap","filter","i2.ItemClickDirective","ScrollerDirection","ScrollBox","TOP","LEFT","INSTANT","SCROLL_EVENT","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i2","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/utils/disposable-component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/const/index.ts","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.html","../../../projects/ng-virtual-list/src/lib/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.module.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.module.ts","../../../projects/ng-virtual-list/src/lib/interfaces/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import { CollectionModes, MethodsForSelecting, SnappingMethods, TextDirections } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams, IScrollingSettings } from '../interfaces';\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_SCROLLING_SETTINGS: IScrollingSettings = {\r\n frictionalForce: 0.035,\r\n maxDuration: 4000,\r\n mass: 0.005,\r\n maxDistance: 12500,\r\n speedScale: 15,\r\n optimization: true,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.STANDART;\r\n\r\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth' as ScrollBehavior;\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const FOCUS = 'focus';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 = 500;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item__container';\r\n","import { ITemplateContext } from \"../interfaces\";\r\n\r\nexport const ID = 'id',\r\n TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)',\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n\r\n export const DEFAULT_TEMPLATE_CONTEXT: ITemplateContext = {\r\n data: undefined,\r\n prevData: undefined,\r\n nextData: undefined,\r\n measures: null,\r\n config: {\r\n focused: false,\r\n selected: false,\r\n collapsed: false,\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical: false,\r\n dynamic: false,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: '0',\r\n },\r\n reseted: false,\r\n index: -1,\r\n api: null,\r\n };\r\n ","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as unknown as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as unknown as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === (handler as any));\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as unknown as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler as any);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as unknown as E, listener as unknown as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 10, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/core/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache(async = true) {\r\n if (async) {\r\n this._clearScrollDirectionDebounce.execute();\r\n return;\r\n }\r\n\r\n this._scrollDirectionCache = [];\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as unknown as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/core/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<ComponentRef<C>> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1, snapped = !!snappedComponents ? [...snappedComponents] : [];\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item.id;\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!Array.isArray(untrackedComponentsByTypeMap[type])) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (Array.isArray(list) && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../interfaces\";\r\nimport {\r\n HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snipedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n isUpdating: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends IItem, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = TrackBoxEvents;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type OnTickEventListener = () => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnTickEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nexport interface IGetMetricsReturns {\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\ninterface IItem<I = any> {\r\n [prop: string]: I;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'n';\r\n\r\ntype Cache = ISize & { method?: ItemDisplayMethods } & IItem;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/core/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = true;\r\n }\r\n }\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b?.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n\r\n this._isReseted = reseted;\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n this._newItems = [];\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item[trackBy];\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item[trackBy];\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n this._newItems.push(id);\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0, reverse: boolean = false): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; reverse ? j >= 0 : j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, bufferSize: minBufferSize,\r\n scrollSize, snap, itemConfigMap, enabledBufferOptimization, previousTotalSize, crudDetected,\r\n deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot,\r\n snipedPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n deltaOfNewItems = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id === fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = this._newItems.indexOf(id) > -1 || (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsWeights.splice(leftItemsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n deltaOfNewItems += componentSizeDelta;\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n itemsFromStartToScrollEnd = Math.floor(typicalItemSize !== 0 ? scrollSize / typicalItemSize : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(typicalItemSize !== 0 ? (scrollSize + size) / typicalItemSize : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = (totalLength * typicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n isUpdating,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snipedPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio);\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? startPosition : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : startPosition,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: items.length,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex, iterations = 0;\r\n\r\n while (renderItems > 0) {\r\n iterations++;\r\n if (iterations > totalLength || i >= totalLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n\r\n const id = collectionItem[trackBy], cache = this.get(id)!,\r\n size = dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = snap && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n zIndex: '0',\r\n };\r\n\r\n count++;\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n nextSticky.config.zIndex = '3';\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (!!nextEndSticky && !!endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.clearScrollDirectionCache(false);\r\n\r\n this.deltaDirection = 0;\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snappedDisplayComponents, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (!!this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (!!this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","export const NGVL_INDEX = 'ngvl-index',\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","export const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: ScrollBehavior | 'auto' | 'instant' | 'smooth') => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, takeUntil, tap } from 'rxjs';\r\nimport { TrackBox, TrackBoxEvents } from './core/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IAnimationParams, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirection, TextDirections } from './enums';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK,\r\n ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | null) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._trackBox?.changes(immediately, force);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.selectable)) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.sticky > 0 && config.collapsable)) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (collapsed === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\r\n }\r\n }\r\n\r\n areaFocus(id: Id | null) {\r\n this._$focusedId.next(id);\r\n }\r\n\r\n initialize(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n\r\n dispose(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $itemClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$itemClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set сollapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get сollapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n * @param force - Forced update.\r\n */\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._internalService.update(immediately, force);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * Base disposable component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/disposable-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n template: ``,\r\n})\r\nexport class DisposableComponent implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}","import { ChangeDetectorRef, ElementRef, inject, TemplateRef } from '@angular/core';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../const';\r\nimport { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, DEFAULT_TEMPLATE_CONTEXT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN,\r\n} from '../const';\r\nimport { TextDirection, TextDirections } from '../../../enums';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { BehaviorSubject, combineLatest, takeUntil, tap } from 'rxjs';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\nimport { createDisplayId } from '../utils';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class BaseVirtualListItemComponent extends DisposableComponent {\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n protected _cdr = inject(ChangeDetectorRef);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected _$config = new BehaviorSubject<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n $config = this._$config.asObservable();\r\n\r\n protected _$measures = new BehaviorSubject<IDisplayObjectMeasures | null>(null);\r\n $measures = this._$measures.asObservable();\r\n\r\n protected _$focused = new BehaviorSubject<boolean>(false);\r\n $focused = this._$focused.asObservable();\r\n\r\n protected _$part = new BehaviorSubject<string>(PART_DEFAULT_ITEM);\r\n $part = this._$part.asObservable();\r\n\r\n protected _data: IRenderVirtualListItem | null = null;\r\n get data() { return this._data; }\r\n protected readonly _$data = new BehaviorSubject<IRenderVirtualListItem | null>(this._data);\r\n protected readonly $data = this._$data.asObservable();\r\n\r\n set item(v: IRenderVirtualListItem | null) {\r\n if (this._data === v || this._data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this._$data.next(v);\r\n }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean; }>({});\r\n $classes = this._$classes.asObservable();\r\n\r\n private _$index = new BehaviorSubject<number>(-1);\r\n $index = this._$index.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<ITemplateContext>(DEFAULT_TEMPLATE_CONTEXT);\r\n $templateContext = this._$templateContext.asObservable();\r\n\r\n public regular: boolean = false;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n protected itemRenderer: TemplateRef<any> | undefined;\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this.itemRenderer === v) {\r\n return;\r\n }\r\n\r\n this.itemRenderer = v;\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n\r\n const $data = this.$data,\r\n $config = this.$config,\r\n $measures = this.$measures,\r\n $focused = this.$focused;\r\n\r\n combineLatest([$data, $focused]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, focused]) => {\r\n this._$classes.next({\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: focused,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n $config.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(config => {\r\n this._$index.next(config?.tabIndex ?? -1);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $config, $measures]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, config, measures]) => {\r\n this._$templateContext.next({\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n });\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this._$measures.next(v?.measures ? { ...v.measures } : null)\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;\r\n if (data) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n el.removeAttribute(ID);\r\n }\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, isSelected: boolean, isCollapsed: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n }\r\n if (this._$focused.getValue()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._$part.next(part);\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };\r\n }\r\n\r\n show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = TRANSLATE_3D_HIDDEN;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { fromEvent, of, race, Subject } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[itemClick]',\r\n})\r\nexport class ItemClickDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | null) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n @Output()\r\n onClick = new EventEmitter<PointerEvent | TouchEvent>();\r\n\r\n constructor(private _elementRef: ElementRef) {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n if (e) {\r\n this.onClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit } from '@angular/core';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, filter, debounceTime, BehaviorSubject, takeUntil } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { FocusAlignment, Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { FocusAlignments } from '../../enums';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrls: ['./ng-virtual-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n private _$maxClickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n $maxClickDistance = this._$maxClickDistance.asObservable();\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$maxClickDistance.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = this.$data,\r\n $focused = this.$focused;\r\n\r\n $focused.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);\r\n }),\r\n ).subscribe();\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$focused.next(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$focused.next(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this._data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, length = this._service.collection?.length ?? 0;\r\n let index = tabIndex;\r\n while (index <= length) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.style.visibility !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n while (index >= 0) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focus(align: FocusAlignment = FocusAlignments.CENTER, index: number = -1) {\r\n if (this._service.listElement) {\r\n const tabIndex = index > -1 ? index : this._data?.config?.tabIndex ?? 0;\r\n let i = tabIndex;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(i));\r\n if (!!element) {\r\n this._service.focus(element, align);\r\n }\r\n }\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","<ng-container *ngIf=\"($data | async) as data\">\r\n <div itemClick [maxClickDistance]=\"$maxClickDistance | async\" [part]=\"$part | async\"\r\n [attr.ngvl-index]=\"data.config.tabIndex || -1\" tabindex=\"-1\" class=\"ngvl-item__container\"\r\n [ngClass]=\"$classes | async\" (onClick)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)||''\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","export const objectAsReadonly = <T = { [x: string]: any } | null | undefined>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as unknown as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","import { CollectionMode, CollectionModes } from \"../enums\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * easeOutQuad\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/animator/ease.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\n/**\r\n * easeLinear\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/animator/ease.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const easeLinear = (t: number) => {\r\n return t + t;\r\n};\r\n","import { Easing } from './types';\r\nimport { easeLinear } from './ease';\r\n\r\ninterface IAnimatorParams {\r\n startValue: number;\r\n endValue: number;\r\n duration?: number;\r\n getPropValue?: () => number;\r\n easingFunction?: Easing;\r\n onUpdate?: (data: IAnimatorUpdateData) => void;\r\n onComplete?: (data: IAnimatorUpdateData) => void;\r\n}\r\n\r\ninterface IAnimatorUpdateData {\r\n timestamp: number;\r\n delta: number;\r\n value: number;\r\n}\r\n\r\nexport const DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n\r\nexport class Animator {\r\n private _animationId: number = 0;\r\n\r\n animate(params: IAnimatorParams) {\r\n const {\r\n startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n this.stop();\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start;\r\n\r\n let isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = startPosDelta + start + diff * easedProgress,\r\n currentValue = val,\r\n t = Date.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n }\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant' as ScrollBehavior,\r\n AUTO = 'auto' as ScrollBehavior,\r\n SMOOTH = 'smooth' as ScrollBehavior,\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","export const calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n};\r\n","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","import {\r\n Component, ElementRef, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION } from '../const';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView extends DisposableComponent {\r\n @ViewChild('scrollContent')\r\n scrollContent: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('scrollViewport')\r\n scrollViewport: ElementRef<HTMLDivElement> | undefined;\r\n\r\n protected _$direction = new BehaviorSubject<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: ScrollerDirections) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get direcendOffsettion() { return this._$endOffset.getValue(); }\r\n\r\n protected _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this._$viewportBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = this._$startOffset.getValue();\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = this._$endOffset.getValue();\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this._$startOffset.getValue();\r\n this._actualTotalSize = v + startOffset;\r\n }\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n { width: contentWidth } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n { height: contentHeight } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);\r\n }\r\n\r\n protected _$viewportBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $viewportBounds = this._$viewportBounds.asObservable();\r\n\r\n protected _$contentBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $contentBounds = this._$contentBounds.asObservable();\r\n\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n constructor() {\r\n super();\r\n\r\n const $direction = this.$direction;\r\n $direction.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$isVertical.next(v === ScrollerDirection.VERTICAL);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : w - startOffset - endOffset,\r\n height = isVertical ? h - startOffset - endOffset : h,\r\n bounds = this._$viewportBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$viewportBounds.next({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : w - startOffset,\r\n height = isVertical ? h - startOffset : h,\r\n bounds = this._$contentBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$contentBounds.next({ width, height });\r\n }\r\n }\r\n}","import {\r\n Component, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { BehaviorSubject, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_SETTINGS, INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP,\r\n TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_VELOCITY_TIMESTAMP,\r\n OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IScrollingSettings } from '../../interfaces';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n protected _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() !== v) {\r\n this._$scrollBehavior.next(v);\r\n }\r\n }\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n protected _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() !== v) {\r\n this._$overscrollEnabled.next(v);\r\n }\r\n }\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n protected _$scrollingSettings = new BehaviorSubject<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n readonly $scrollingSettings = this._$scrollingSettings.asObservable();\r\n @Input()\r\n set scrollingSettings(v: IScrollingSettings) {\r\n if (this._$scrollingSettings.getValue() !== v) {\r\n this._$scrollingSettings.next(v);\r\n }\r\n }\r\n get scrollingSettings() { return this._$scrollingSettings.getValue(); }\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n set delta(v: number) {\r\n this._startPosition += v;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const $viewport = of(this.scrollViewport).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $content = of(this.scrollContent).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\r\n this.stopScrolling();\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this.y : this.x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = (startPos + delta), position = dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp;\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true });\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (this._$scrollBehavior.getValue() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (this._$scrollBehavior.getValue() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this._$overscrollEnabled.getValue()) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this._$overscrollEnabled.getValue()) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._$isVertical.getValue()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets),\r\n speedScale = this.scrollingSettings?.speedScale ?? SPEED_SCALE;\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * speedScale : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n const mass = this.scrollingSettings?.mass ?? MASS;\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0.1;\r\n aSum = (aSum * mass) + a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * (this.scrollingSettings?.frictionalForce ?? FRICTION_FORCE);\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\r\n const dvSign = Math.sign(v),\r\n mass = this.scrollingSettings?.mass ?? MASS,\r\n duration = DURATION, maxDuration = this.scrollingSettings?.maxDuration ?? MAX_DURATION,\r\n maxDist = this.scrollingSettings?.maxDistance ?? MAX_DIST,\r\n maxDistance = dvSign * maxDist, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / mass,\r\n distance = Math.abs(s) < maxDist ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / mass,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n const isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL,\r\n startOffset = this._normalizeValueFromZero ? 0 : this._$startOffset.getValue(),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n result = value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false) {\r\n const isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n this._animator.animate({\r\n startValue, endValue, duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n }, onComplete: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n this._$scrollEnd.next(userAction);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this.stopScrolling();\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined): boolean {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this._$isVertical.getValue();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n this.y = yy;\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n this.x = xx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (this._y !== y) {\r\n if (isVertical) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshY(y);\r\n this.y = y;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshX(x);\r\n this.x = x;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshX(value: number) {\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(${(this._inversion ? 1 : -1) * value}px, 0, 0)`;\r\n }\r\n\r\n refreshY(value: number) {\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(0, ${(this._inversion ? 1 : -1) * value}px, 0)`;\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this._$isVertical.getValue(), offset);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","import { IScrollBarTemplateContext } from \"../interfaces\";\r\n\r\nexport const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n\r\nexport const DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT: IScrollBarTemplateContext = {\r\n api: null,\r\n width: 0,\r\n height: 0,\r\n fillPositions: [0, 1],\r\n params: {}\r\n}\r\n","import { Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, fromEvent, of, startWith, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport { DEFAULT_SCROLLBAR_INTERACTIVE } from '../../const';\r\nimport {\r\n DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT,\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * ScrollBar component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrls: ['./ng-scroll-bar.component.scss'],\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n @ViewChild('defaultRenderer', { read: TemplateRef<any> })\r\n protected _defaultRenderer: TemplateRef<any> | undefined;\r\n\r\n protected _service = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n @Output()\r\n onDrag = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n @Output()\r\n onDragEnd = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n @Input()\r\n set thumbGradientPositions(v: GradientColorPositions) {\r\n if (this._$thumbGradientPositions.getValue() !== v) {\r\n this._$thumbGradientPositions.next(v);\r\n }\r\n }\r\n get thumbGradientPositions() { return this._$thumbGradientPositions.getValue(); }\r\n\r\n private _$size = new BehaviorSubject<number>(DEFAULT_SIZE);\r\n readonly $size = this._$size.asObservable();\r\n\r\n @Input()\r\n set size(v: number) {\r\n if (this._$size.getValue() !== v) {\r\n this._$size.next(v);\r\n }\r\n }\r\n get size() { return this._$size.getValue(); }\r\n\r\n private _$thickness = new BehaviorSubject<number>(DEFAULT_THICKNESS);\r\n readonly $thickness = this._$thickness.asObservable();\r\n\r\n @Input()\r\n set thickness(v: number) {\r\n if (this._$thickness.getValue() !== v) {\r\n this._$thickness.next(v);\r\n }\r\n }\r\n get thickness() { return this._$thickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(0);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$endOffset.getValue(); }\r\n\r\n private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n @Input()\r\n set prepared(v: boolean) {\r\n if (this._$prepared.getValue() !== v) {\r\n this._$prepared.next(v);\r\n }\r\n }\r\n get prepared() { return this._$prepared.getValue(); }\r\n\r\n private _$interactive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $interactive = this._$interactive.asObservable();\r\n\r\n @Input()\r\n set interactive(v: boolean) {\r\n if (this._$interactive.getValue() !== v) {\r\n this._$interactive.next(v);\r\n }\r\n }\r\n get interactive() { return this._$interactive.getValue(); }\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n @Input()\r\n set show(v: boolean) {\r\n if (this._$show.getValue() !== v) {\r\n this._$show.next(v);\r\n }\r\n }\r\n get show() { return this._$show.getValue(); }\r\n\r\n private _$params = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n readonly $params = this._$params.asObservable();\r\n\r\n @Input()\r\n set params(v: { [propName: string]: any } | null) {\r\n if (this._$params.getValue() !== v) {\r\n this._$params.next(v);\r\n }\r\n }\r\n get params() { return this._$params.getValue(); }\r\n\r\n private _$renderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $renderer = this._$renderer.asObservable();\r\n\r\n @Input()\r\n set renderer(v: TemplateRef<any> | null) {\r\n if (this._$renderer.getValue() !== v) {\r\n this._$renderer.next(v);\r\n }\r\n }\r\n get renderer() { return this._$renderer.getValue(); }\r\n\r\n private _$thumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $thumbRenderer = this._$thumbRenderer.asObservable();\r\n\r\n private _$hoverState = new BehaviorSubject<boolean>(false);\r\n readonly $hoverState = this._$hoverState.asObservable();\r\n\r\n private _$pressedState = new BehaviorSubject<boolean>(false);\r\n readonly $pressedState = this._$pressedState.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [className: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n private _$templateContext = new BehaviorSubject<IScrollBarTemplateContext>(DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT);\r\n readonly $templateContext = this._$templateContext.asObservable();\r\n\r\n private _$styles = new BehaviorSubject<{ [styleName: string]: any }>({});\r\n readonly $styles = this._$styles.asObservable();\r\n\r\n private _$thumbWidth = new BehaviorSubject<number>(0);\r\n readonly $thumbWidth = this._$thumbWidth.asObservable();\r\n\r\n private _$thumbHeight = new BehaviorSubject<number>(0);\r\n readonly $thumbHeight = this._$thumbHeight.asObservable();\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n const $thumbWidth = this.$thumbWidth,\r\n $thumbHeight = this.$thumbHeight,\r\n $thumbGradientPositions = this.$thumbGradientPositions,\r\n $params = this.$params;\r\n\r\n combineLatest([$thumbWidth, $thumbHeight, $thumbGradientPositions, $params]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([thumbWidth, thumbHeight, thumbGradientPositions, params]) => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: thumbWidth,\r\n height: thumbHeight,\r\n fillPositions: thumbGradientPositions,\r\n params: params ?? {},\r\n };\r\n this._$templateContext.next(context);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = this.$prepared;\r\n $prepared.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshX(this._x);\r\n this.refreshY(this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$thickness, this.$size]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([isVertical, thickness, size]) => {\r\n this._$thumbWidth.next(isVertical ? thickness : size);\r\n this._$thumbHeight.next(isVertical ? size : thickness);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $renderer = this.$renderer.pipe(\r\n startWith(null),\r\n );\r\n\r\n $renderer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n switchMap(renderer => {\r\n return of((renderer ?? this._defaultRenderer) ?? null);\r\n }),\r\n tap(v => {\r\n this._$thumbRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe)\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$pressedState.next(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$pressedState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $pressedState = this.$pressedState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $hoverState = this.$hoverState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n combineLatest([\r\n $pressedState, $hoverState,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n distinctUntilChanged(),\r\n tap(([pressed, hover]) => {\r\n if (pressed) {\r\n this._service.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._service.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._service.state = ScrollbarStates.NORMAL;\r\n return;\r\n }),\r\n ).subscribe();\r\n\r\n this.$size.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.totalSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$interactive.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.interactive = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$show, this.$isVertical, this.$thickness]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([show, isVertical, thickness]) => {\r\n const sizePropName = isVertical ? WIDTH : HEIGHT;\r\n this._$styles.next({\r\n [sizePropName]: `${show ? thickness : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n this.$scroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n const event = this.createDragEvent(false);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this._$isVertical.getValue(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this._$startOffset.getValue() / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this._$endOffset.getValue() - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect()\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._service.click(event);\r\n }\r\n}\r\n","<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"$styles | async\" [ngClass]=\"($classes | async)!\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"($isVertical | async)! == false\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"($thumbRenderer | async)!\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)!\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n MEASURE_VELOCITY_TIMER = 20;\r\n","import { Directive, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n})\r\nexport class LocaleSensitiveDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n this._$langTextDir.next(v);\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n\r\n private _$listDir = new BehaviorSubject<ScrollerDirections | null>(ScrollerDirection.VERTICAL);\r\n readonly $listDir = this._$listDir.asObservable();\r\n\r\n @Input()\r\n set listDir(v: ScrollerDirections | null) {\r\n this._$listDir.next(v);\r\n }\r\n get listDir() { return this._$listDir.getValue(); }\r\n\r\n constructor(private _elementRef: ElementRef<HTMLElement>) {\r\n const $langTextDir = this.$langTextDir,\r\n $listDir = this.$listDir;\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir!, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME,\r\n SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS, MEASURE_VELOCITY_TIMER } from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant' as ScrollBehavior;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item component\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrls: ['./ng-scroller.component.scss'],\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n})\r\nexport class NgScrollerComponent extends NgScrollView implements OnDestroy {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n @Output()\r\n readonly onScrollbarVisible = new EventEmitter<boolean>();\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() !== v) {\r\n this._$scrollbarInteractive.next(v);\r\n }\r\n }\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set focusedElement(v: Id | undefined) {\r\n if (this._$focusedElement.getValue() !== v) {\r\n this._$focusedElement.next(v);\r\n }\r\n }\r\n get focusedElement() { return this._$focusedElement.getValue(); }\r\n\r\n private _$content = new BehaviorSubject<HTMLElement | undefined>(undefined);\r\n readonly $content = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set content(v: HTMLElement | undefined) {\r\n if (this._$content.getValue() !== v) {\r\n this._$content.next(v);\r\n }\r\n }\r\n get content() { return this._$content.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() !== v) {\r\n this._$loading.next(v);\r\n }\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue(); }\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() !== v) {\r\n this._$scrollbarThickness.next(v);\r\n }\r\n }\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() !== v) {\r\n this._$scrollbarThumbRenderer.next(v);\r\n }\r\n }\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>(null);\r\n readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() !== v) {\r\n this._$scrollbarThumbParams.next(v);\r\n }\r\n }\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n private _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n private _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n private _$thumbColorPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbColorPositions = this._$thumbColorPositions.asObservable();\r\n\r\n private _$actualThumbSize = new BehaviorSubject<number>(0);\r\n readonly $actualThumbSize = this._$actualThumbSize.asObservable();\r\n\r\n private _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n\r\n private _$preparedSignal = new BehaviorSubject<boolean>(false);\r\n readonly $preparedSignal = this._$preparedSignal.asObservable();\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this._$preparedSignal.next(v);\r\n }\r\n }\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this._$isVertical.getValue() ? this._y : this._x;\r\n\r\n private _measureVelocityAnimationFrameId: number = -1;\r\n\r\n private _measureVelocityAnimationTimer: number = -1;\r\n\r\n private _velocities: Array<number> = [];\r\n\r\n protected _velocity: number = 0;\r\n get velocity() { return this._velocity; }\r\n\r\n protected _averageVelocity: number = 0;\r\n get averageVelocity() { return this._averageVelocity; }\r\n\r\n private _measureVelocityHandler = () => {\r\n this.measureVelocityExecutor();\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n constructor() {\r\n super();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$langTextDir.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbGradientPositions.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$thumbColorPositions.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$actualThumbSize.next(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $prepared = this.$preparedSignal;\r\n $prepared.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarEnabled = this.$scrollbarEnabled,\r\n $scrollbarShow = this.$scrollbarShow;\r\n\r\n combineLatest([$scrollbarEnabled, $scrollbarShow, $prepared]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([scrollbarEnabled, scrollbarShow, prepared]) => {\r\n this._$show.next(scrollbarEnabled && scrollbarShow && prepared);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $scrollbarMinSize = this.$scrollbarMinSize,\r\n $isVertical = this.$isVertical,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$classes, this.$direction, this.$grabbing]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([classes, direction, grabbing]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true, grabbing });\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$contentBounds, this.$viewportBounds, this.$isVertical, this.$direction, this.$grabbing, this.$scrollbarEnabled]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([contentBounds, viewportBounds, isVertical, direction, grabbing, scrollbarEnabled]) => {\r\n const { width: contentWidth, height: contentHeight } = contentBounds,\r\n { width, height } = viewportBounds,\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n this._$containerClasses.next({ [direction]: true, grabbing, enabled: scrollbarEnabled, scrollable: contentSize > viewportSize });\r\n }),\r\n ).subscribe();\r\n\r\n this.updateScrollBarHandler();\r\n this.runMeasureVelocity();\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this._$viewportBounds.getValue();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$viewportBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n const bounds: ISize = { width: content.offsetWidth, height: content.offsetHeight }, b = this._$contentBounds.getValue();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$contentBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private measureVelocity() {\r\n this._measureVelocityAnimationTimer = MEASURE_VELOCITY_TIMER;\r\n\r\n this.measureVelocityExecutor();\r\n };\r\n\r\n private measureVelocityExecutor() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this._$isVertical.getValue() ? this._y : this._x);\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._velocity = velocity;\r\n this._velocities.push(velocity);\r\n this._averageVelocity = avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS;\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n\r\n this.runMeasureVelocity();\r\n }\r\n\r\n stopMeasureVelocity() {\r\n if (this._measureVelocityAnimationFrameId > -1) {\r\n cancelAnimationFrame(this._measureVelocityAnimationFrameId);\r\n this._measureVelocityAnimationFrameId = -1;\r\n }\r\n }\r\n\r\n private runMeasureVelocity() {\r\n this.stopMeasureVelocity();\r\n if (this._measureVelocityAnimationTimer >= 0) {\r\n this._measureVelocityAnimationTimer--;\r\n this._measureVelocityAnimationFrameId = requestAnimationFrame(this._measureVelocityHandler);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportBounds = this._$viewportBounds.getValue(),\r\n contentBounds = this._$contentBounds.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this._$scrollbarMinSize.getValue(),\r\n });\r\n\r\n this._$thumbGradientPositions.next(thumbGradientPositions);\r\n this._$thumbSize.next(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable && this._$scrollbarEnabled.getValue());\r\n };\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset(this._$startOffset.getValue());\r\n this.totalSize = 0;\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n if (this._$isVertical.getValue()) {\r\n this.refreshY(this._y);\r\n } else {\r\n this.refreshX(this._x);\r\n }\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(userAction);\r\n this.stopScrolling();\r\n const isVertical = this._$isVertical.getValue(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: false, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = false;\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n if (!userAction) {\r\n return;\r\n }\r\n this.refresh(true, true);\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n this._$scrollbarScroll.next(false);\r\n this.fireScrollEvent(false);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.stopMeasureVelocity();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\"\r\n [renderer]=\"($scrollbarThumbRenderer | async)!\" [thickness]=\"($scrollbarThickness | async)!\"\r\n [params]=\"($scrollbarThumbParams | async)!\" [thumbGradientPositions]=\"($thumbColorPositions | async)!\"\r\n [loading]=\"($loading | async)!\" [prepared]=\"($preparedSignal | async)!\"\r\n [interactive]=\"($scrollbarInteractive | async)!\" [show]=\"($show | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n width: (isVertical ? bounds.width : itemSize) as any,\r\n height: (isVertical ? itemSize : bounds.height) as any,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: \"0\",\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_100_PERSENT, SIZE_AUTO,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n this._elementRef.nativeElement.removeAttribute(ID);\r\n }\r\n }\r\n\r\n override show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, from, takeUntil, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../../../enums';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * NgPrerenderScrollerComponent.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-scroller/ng-prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrls: ['../../../ng-scroller/ng-scroller.component.scss'],\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n protected _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n protected _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n protected _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n protected _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n protected _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n this._$viewportBounds.next({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n this._$contentBounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $classes = this.$classes,\r\n $direction = this.$direction;\r\n\r\n combineLatest(([$classes, $direction])).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([classes, direction]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true });\r\n }),\r\n ).subscribe();\r\n\r\n const $contentBounds = this.$contentBounds,\r\n $viewportBounds = this.$viewportBounds,\r\n $isVertical = this.$isVertical,\r\n $scrollbarEnabled = this.$scrollbarEnabled;\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this._$containerClasses.next({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: 1,\r\n });\r\n\r\n this._$thumbSize.next(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}\r\n","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"($actualClasses | async)\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnDestroy, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport { BehaviorSubject, combineLatest, filter, Subject, Subscription, takeUntil, tap } from \"rxjs\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../enums\";\r\nimport { DisposableComponent } from \"../../../../utils/disposable-component\";\r\n\r\n/**\r\n * NgPrerenderList.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList extends DisposableComponent implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n protected _$enabled = new BehaviorSubject<boolean>(false);\r\n readonly $enabled = this._$enabled.asObservable();\r\n @Input()\r\n set enabled(v: boolean) {\r\n if (this._$enabled.getValue() !== v) {\r\n this._$enabled.next(v);\r\n }\r\n }\r\n get enabled() { return this._$enabled.getValue(); }\r\n\r\n protected _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n @Input()\r\n set isVertical(v: boolean) {\r\n if (this._$isVertical.getValue() !== v) {\r\n this._$isVertical.next(v);\r\n }\r\n }\r\n get isVertical() { return this._$isVertical.getValue(); }\r\n\r\n protected _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n readonly $items = this._$items.asObservable();\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() !== v) {\r\n this._$items.next(v);\r\n }\r\n }\r\n get items() { return this._$items.getValue(); }\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n protected _$bounds = new BehaviorSubject<ISize | null>({ width: 0, height: 0 });\r\n readonly $bounds = this._$bounds.asObservable();\r\n @Input()\r\n set bounds(v: ISize | null) {\r\n if (this._$bounds.getValue() !== v) {\r\n this._$bounds.next(v);\r\n }\r\n }\r\n get bounds() { return this._$bounds.getValue(); }\r\n\r\n protected _$dynamic = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n readonly $dynamic = this._$dynamic.asObservable();\r\n @Input()\r\n set dynamic(v: boolean) {\r\n if (this._$dynamic.getValue() !== v) {\r\n this._$dynamic.next(v);\r\n }\r\n }\r\n get dynamic() { return this._$dynamic.getValue(); }\r\n\r\n protected _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\r\n @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() !== v) {\r\n this._$itemSize.next(v);\r\n }\r\n }\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n protected _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n readonly $trackBy = this._$trackBy.asObservable();\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() !== v) {\r\n this._$trackBy.next(v);\r\n }\r\n }\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n protected _$itemRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any> | null) {\r\n if (this._$itemRenderer.getValue() !== v) {\r\n this._$itemRenderer.next(v);\r\n }\r\n }\r\n get itemRenderer() { return this._$itemRenderer.getValue(); }\r\n\r\n protected _$itemComponentClass = new BehaviorSubject<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n readonly $itemComponentClass = this._$itemComponentClass.asObservable();\r\n @Input()\r\n set itemComponentClass(v: Component$1<BaseVirtualListItemComponent>) {\r\n if (this._$itemComponentClass.getValue() !== v) {\r\n this._$itemComponentClass.next(v);\r\n }\r\n }\r\n get itemComponentClass() { return this._$itemComponentClass.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({ prepared: true });\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $enabled = this.$enabled;\r\n $enabled.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(enabled => {\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(this.$bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(bounds => {\r\n const { width, height } = bounds!;\r\n const el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox) {\r\n this._trackBox.reset(this._$itemComponentClass.getValue(), items, this._$bounds.getValue()!, {\r\n itemRenderer: this._$itemRenderer.getValue()!,\r\n dynamic: this._$dynamic.getValue(),\r\n itemSize: this._$itemSize.getValue(),\r\n isVertical: this._$isVertical.getValue(),\r\n trackBy: this._$trackBy.getValue(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._$items.next(items ?? []);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [direction]=\"($direction | async)!\" [scrollbarEnabled]=\"($scrollbarEnabled | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { filter, Observable, of, switchMap, takeUntil } from \"rxjs\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../enums\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { DisposableComponent } from \"../../utils/disposable-component\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer extends DisposableComponent {\r\n @ViewChild('list', { read: NgPrerenderList })\r\n private _list: NgPrerenderList | null = null;\r\n\r\n @Input()\r\n enabled: boolean = false;\r\n\r\n @Input()\r\n direction: Direction = DEFAULT_DIRECTION;\r\n\r\n @Input()\r\n isVertical: boolean = true;\r\n\r\n @Input()\r\n scrollbarEnabled: boolean = DEFAULT_SCROLLBAR_ENABLED;\r\n\r\n @Input()\r\n startOffset: number = 0;\r\n\r\n @Input()\r\n endOffset: number = 0;\r\n\r\n @Input()\r\n bounds!: ISize;\r\n\r\n @Input()\r\n dynamic: boolean = DEFAULT_DYNAMIC_SIZE;\r\n\r\n @Input()\r\n itemSize: number = DEFAULT_ITEM_SIZE;\r\n\r\n @Input()\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n @Input()\r\n itemRenderer!: TemplateRef<any>;\r\n\r\n $render!: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const $list = of(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list;\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds!\" [direction]=\"direction\" [dynamic]=\"dynamic\" [isVertical]=\"isVertical\"\r\n [itemSize]=\"itemSize\" [trackBy]=\"trackBy\" [itemRenderer]=\"itemRenderer\" [startOffset]=\"startOffset\"\r\n [endOffset]=\"endOffset\" [scrollbarEnabled]=\"scrollbarEnabled\" [enabled]=\"enabled\"></ng-prerender-list>","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nexport const formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\r\n","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, ElementRef, EventEmitter, inject, Input,\r\n OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n Observable,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, FOCUS, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECT_METHOD, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2, PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1,\r\n DEFAULT_SCROLLING_SETTINGS,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, ISize, IRenderStabilizerOptions,\r\n IScrollingSettings,\r\n} from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting,\r\n SnappingMethod, SnappingMethods, TextDirection, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/is-method-for-selecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { CMap } from './utils/cmap';\r\nimport { validateArray, validateBoolean, validateFloat, validateInt, validateObject, validateString } from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\nimport { DisposableComponent } from './utils/disposable-component';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrls: ['./ng-virtual-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\r\n})\r\nexport class NgVirtualListComponent extends DisposableComponent implements OnDestroy {\r\n private static __nextId: number = 0;\r\n\r\n private _id: number = NgVirtualListComponent.__nextId;\r\n\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n @ViewChild('prerender', { read: NgPrerenderContainer })\r\n private _prerender: NgPrerenderContainer | undefined;\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('scroller', { read: NgScrollerComponent })\r\n private _scrollerComponent: NgScrollerComponent | undefined;\r\n\r\n private _$scroller = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $scroller = this._$scroller.asObservable();\r\n\r\n private _$list = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $list = this._$list.asObservable();\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n @Output()\r\n onViewportChange = new EventEmitter<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n @Output()\r\n onItemClick = new EventEmitter<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n @Output()\r\n onSelect = new EventEmitter<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n @Output()\r\n onCollapse = new EventEmitter<Array<Id>>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n @Output()\r\n onScrollReachStart = new EventEmitter<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n @Output()\r\n onScrollReachEnd = new EventEmitter<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n protected readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n private _scrollbarThicknessTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThicknessTransform(v);\r\n\r\n this._$scrollbarThickness.next(transformedValue);\r\n };\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n protected readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n private _scrollbarMinSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarMinSizeTransform(v);\r\n\r\n this._$scrollbarMinSize.next(transformedValue);\r\n };\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue() as number; }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n protected readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n private _scrollbarThumbRendererTransform = (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbRendererTransform(v);\r\n\r\n this._$scrollbarThumbRenderer.next(transformedValue);\r\n };\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n protected readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n private _scrollbarThumbParamsTransform = (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbParamsTransform(v);\r\n\r\n this._$scrollbarThumbParams.next(transformedValue);\r\n };\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n protected readonly $loading = this._$loading.asObservable();\r\n\r\n private _loadingTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._loadingTransform(v);\r\n\r\n this._$loading.next(transformedValue);\r\n };\r\n get loading() { return this._$loading.getValue() as boolean; }\r\n\r\n private _$waitForPreparation = new BehaviorSubject<boolean>(DEFAULT_WAIT_FOR_PREPARATION);\r\n protected readonly $waitForPreparation = this._$waitForPreparation.asObservable();\r\n\r\n private _waitForPreparationTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n @Input()\r\n set waitForPreparation(v: boolean) {\r\n if (this._$waitForPreparation.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._waitForPreparationTransform(v);\r\n\r\n this._$waitForPreparation.next(transformedValue);\r\n };\r\n get waitForPreparation() { return this._$waitForPreparation.getValue() as boolean; }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n protected readonly $clickDistance = this._$clickDistance.asObservable();\r\n\r\n private _clickDistanceTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n @Input()\r\n set clickDistance(v: number) {\r\n if (this._$clickDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._clickDistanceTransform(v);\r\n\r\n this._$clickDistance.next(transformedValue);\r\n };\r\n get clickDistance() { return this._$clickDistance.getValue() as number; }\r\n\r\n private _$snapToEndTransitionInstantOffset = new BehaviorSubject<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET);\r\n protected readonly $snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.asObservable();\r\n\r\n private _snapToEndTransitionInstantOffsetTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n @Input()\r\n set snapToEndTransitionInstantOffset(v: number) {\r\n if (this._$snapToEndTransitionInstantOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToEndTransitionInstantOffsetTransform(v);\r\n\r\n this._$snapToEndTransitionInstantOffset.next(transformedValue);\r\n };\r\n get snapToEndTransitionInstantOffset() { return this._$snapToEndTransitionInstantOffset.getValue(); }\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n protected readonly $items = this._$items.asObservable();\r\n\r\n private _itemsTransform = (v: IVirtualListCollection) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy;\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `null`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemsTransform(v);\r\n\r\n this._$items.next(transformedValue);\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$defaultItemValue = new BehaviorSubject<IVirtualListItem | null>(null);\r\n protected readonly $defaultItemValue = this._$defaultItemValue.asObservable();\r\n\r\n @Input()\r\n set defaultItemValue(v: IVirtualListItem | null) {\r\n if (this._$defaultItemValue.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$defaultItemValue.next(v);\r\n };\r\n get defaultItemValue() { return this._$defaultItemValue.getValue(); }\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n protected readonly $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _selectedIdsTransform = (v: Array<Id> | Id | null) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `null`.');\r\n return this._isMultiSelecting ? [] : null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n @Input()\r\n set selectedIds(v: Array<Id> | Id | null) {\r\n if (this._$selectedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectedIdsTransform(v);\r\n\r\n this._$selectedIds.next(transformedValue);\r\n };\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n protected readonly $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _collapsedIdsTransform = (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n @Input()\r\n set collapsedIds(v: Array<Id>) {\r\n if (this._$collapsedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsedIdsTransform(v);\r\n\r\n this._$collapsedIds.next(transformedValue);\r\n };\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n private _$selectByClick = new BehaviorSubject<boolean>(DEFAULT_SELECT_BY_CLICK);\r\n protected readonly $selectByClick = this._$selectByClick.asObservable();\r\n\r\n private _selectByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set selectByClick(v: boolean) {\r\n if (this._$selectByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectByClickTransform(v);\r\n\r\n this._$selectByClick.next(transformedValue);\r\n };\r\n get selectByClick() { return this._$selectByClick.getValue(); }\r\n\r\n private _$collapseByClick = new BehaviorSubject<boolean>(DEFAULT_COLLAPSE_BY_CLICK);\r\n protected readonly $collapseByClick = this._$collapseByClick.asObservable();\r\n\r\n private _collapseByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set collapseByClick(v: boolean) {\r\n if (this._$collapseByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapseByClickTransform(v);\r\n\r\n this._$collapseByClick.next(transformedValue);\r\n };\r\n get collapseByClick() { return this._$collapseByClick.getValue(); }\r\n\r\n private _$snap = new BehaviorSubject<boolean>(DEFAULT_SNAP);\r\n protected readonly $snap = this._$snap.asObservable();\r\n\r\n private _snapTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snap\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n @Input()\r\n set snap(v: boolean) {\r\n if (this._$snap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapTransform(v);\r\n\r\n this._$snap.next(transformedValue);\r\n };\r\n get snap() { return this._$snap.getValue(); }\r\n\r\n private _$scrollStartOffset = new BehaviorSubject<number>(0);\r\n protected readonly $scrollStartOffset = this._$scrollStartOffset.asObservable();\r\n\r\n private _scrollStartOffsetTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollStartOffset(v: number) {\r\n if (this._$scrollStartOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollStartOffsetTransform(v);\r\n\r\n this._$scrollStartOffset.next(transformedValue);\r\n };\r\n get scrollStartOffset() { return this._$scrollStartOffset.getValue(); }\r\n\r\n private _$scrollEndOffset = new BehaviorSubject<number>(0);\r\n protected readonly $scrollEndOffset = this._$scrollEndOffset.asObservable();\r\n\r\n private _scrollEndOffsetTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollEndOffset(v: number) {\r\n if (this._$scrollEndOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollEndOffsetTransform(v);\r\n\r\n this._$scrollEndOffset.next(transformedValue);\r\n };\r\n get scrollEndOffset() { return this._$scrollEndOffset.getValue(); }\r\n\r\n private _$snapScrollToStart = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_START);\r\n protected readonly $snapScrollToStart = this._$snapScrollToStart.asObservable();\r\n\r\n private _snapScrollToStartTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToStart(v: boolean) {\r\n if (this._$snapScrollToStart.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToStartTransform(v);\r\n\r\n this._$snapScrollToStart.next(transformedValue);\r\n };\r\n get snapScrollToStart() { return this._$snapScrollToStart.getValue(); }\r\n\r\n private _$snapScrollToEnd = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_END);\r\n protected readonly $snapScrollToEnd = this._$snapScrollToEnd.asObservable();\r\n\r\n private _snapScrollToEndTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToEnd(v: boolean) {\r\n if (this._$snapScrollToEnd.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToEndTransform(v);\r\n\r\n this._$snapScrollToEnd.next(transformedValue);\r\n };\r\n get snapScrollToEnd() { return this._$snapScrollToEnd.getValue(); }\r\n\r\n private _snapScrollToBottomTransform = () => {\r\n throw Error('The snapScrollToBottom property is deprecated. Use the snapScrollToEnd property.');\r\n };\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n @Input()\r\n set snapScrollToBottom(v: boolean) {\r\n this._snapScrollToBottomTransform();\r\n }\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n protected readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n private _scrollbarEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarEnabledTransform(v);\r\n\r\n this._$scrollbarEnabled.next(transformedValue);\r\n };\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n protected readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n private _scrollbarInteractiveTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarInteractiveTransform(v);\r\n\r\n this._$scrollbarInteractive.next(transformedValue);\r\n };\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n protected readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n\r\n private _scrollBehaviorTransform = (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `string`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollBehaviorTransform(v);\r\n\r\n this._$scrollBehavior.next(transformedValue);\r\n };\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n private _$scrollingSettings = new BehaviorSubject<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n protected readonly $scrollingSettings = this._$scrollingSettings.asObservable();\r\n\r\n private _scrollingSettingsTransform = (v: IScrollingSettings): IScrollingSettings => {\r\n let valid = validateObject(v, true, true);\r\n if (valid && !!v) {\r\n const { frictionalForce, mass, maxDistance, maxDuration, speedScale, optimization } = v;\r\n valid = validateFloat(frictionalForce, true);\r\n if (!valid) {\r\n console.error('The \"frictionalForce\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(mass, true);\r\n if (!valid) {\r\n console.error('The \"mass\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDistance, true);\r\n if (!valid) {\r\n console.error('The \"maxDistance\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDuration, true);\r\n if (!valid) {\r\n console.error('The \"maxDuration\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(speedScale, true);\r\n if (!valid) {\r\n console.error('The \"speedScale\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateBoolean(optimization, true);\r\n if (!valid) {\r\n console.error('The \"optimization\" parameter must be of type `boolean` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"scrollingSettings\" parameter must be of type `object` or null.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n return {\r\n frictionalForce: v.frictionalForce !== undefined && v.frictionalForce > 0 ? v.frictionalForce : DEFAULT_SCROLLING_SETTINGS.frictionalForce,\r\n mass: v.mass !== undefined && v.mass > 0 ? v.mass : DEFAULT_SCROLLING_SETTINGS.mass,\r\n maxDistance: v.maxDistance !== undefined && v.maxDistance > 0 ? v.maxDistance : DEFAULT_SCROLLING_SETTINGS.maxDistance,\r\n maxDuration: v.maxDuration !== undefined && v.maxDuration > 0 ? v.maxDuration : DEFAULT_SCROLLING_SETTINGS.maxDuration,\r\n speedScale: v.speedScale !== undefined && v.speedScale > 0 ? v.speedScale : DEFAULT_SCROLLING_SETTINGS.speedScale,\r\n optimization: v.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n };\r\n };\r\n\r\n /**\r\n * Scrolling settings.\r\n * - frictionalForce - Frictional force. Default value is 0.035.\r\n * - mass - Mass. Default value is 0.005.\r\n * - maxDistance - Maximum scrolling distance. Default value is 12500.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 15.\r\n * - optimization - Enables scrolling performance optimization. Default value is `true`.\r\n */\r\n @Input()\r\n set scrollingSettings(v: IScrollingSettings) {\r\n if (this._$scrollingSettings.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollingSettingsTransform(v);\r\n\r\n this._$scrollingSettings.next(transformedValue);\r\n };\r\n get scrollingSettings() { return this._$scrollingSettings.getValue(); }\r\n\r\n private _$animationParams = new BehaviorSubject<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n protected readonly $animationParams = this._$animationParams.asObservable();\r\n\r\n private _animationParamsTransform = (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, navigateToItem: 150, navigateByKeyboard: 50 }\".\r\n */\r\n @Input()\r\n set animationParams(v: IAnimationParams) {\r\n if (this._$animationParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._animationParamsTransform(v);\r\n\r\n this._$animationParams.next(transformedValue);\r\n };\r\n get animationParams() { return this._$animationParams.getValue(); }\r\n\r\n private _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n protected readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n\r\n private _overscrollEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._overscrollEnabledTransform(v);\r\n\r\n this._$overscrollEnabled.next(transformedValue);\r\n };\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n private _$enabledBufferOptimization = new BehaviorSubject<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n protected readonly $enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();\r\n\r\n private _enabledBufferOptimizationTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n @Input()\r\n set enabledBufferOptimization(v: boolean) {\r\n if (this._$enabledBufferOptimization.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._enabledBufferOptimizationTransform(v);\r\n\r\n this._$enabledBufferOptimization.next(transformedValue);\r\n };\r\n get enabledBufferOptimization() { return this._$enabledBufferOptimization.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n protected readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n\r\n private _itemRendererTransform = (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any>) {\r\n if (this._$itemRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemRendererTransform(v);\r\n\r\n this._$itemRenderer.next(transformedValue);\r\n };\r\n get itemRenderer() { return this._$itemRenderer.getValue() as TemplateRef<any>; }\r\n\r\n private _$itemConfigMap = new BehaviorSubject<IVirtualListItemConfigMap>({});\r\n protected readonly $itemConfigMap = this._$itemConfigMap.asObservable();\r\n\r\n private _itemConfigMapTransform = (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets `sticky` position, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end.\r\n * Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and\r\n * collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n @Input()\r\n set itemConfigMap(v: IVirtualListItemConfigMap) {\r\n if (this._$itemConfigMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemConfigMapTransform(v);\r\n\r\n this._$itemConfigMap.next(transformedValue);\r\n };\r\n get itemConfigMap() { return this._$itemConfigMap.getValue(); }\r\n\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n protected readonly $itemSize = this._$itemSize.asObservable();\r\n\r\n private _itemSizeTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n\r\n const val = Number(v);\r\n return Number.isNaN(val) || val <= 0 ? DEFAULT_ITEM_SIZE : val;\r\n };\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property \r\n * to adjust the sizes of the items in the unallocated area.\r\n */\r\n @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemSizeTransform(v);\r\n\r\n this._$itemSize.next(transformedValue);\r\n };\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n private _$dynamicSize = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n protected readonly $dynamicSize = this._$dynamicSize.asObservable();\r\n\r\n private _dynamicSizeTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n @Input()\r\n set dynamicSize(v: boolean) {\r\n if (this._$dynamicSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._dynamicSizeTransform(v);\r\n\r\n this._$dynamicSize.next(transformedValue);\r\n };\r\n get dynamicSize() { return this._$dynamicSize.getValue(); }\r\n\r\n private _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n protected readonly $direction = this._$direction.asObservable();\r\n\r\n private _directionTransform = (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._directionTransform(v);\r\n\r\n this._$direction.next(transformedValue);\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$collectionMode = new BehaviorSubject<CollectionMode>(DEFAULT_COLLECTION_MODE);\r\n protected readonly $collectionMode = this._$collectionMode.asObservable();\r\n\r\n private _collectionModeTransform = (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n @Input()\r\n set collectionMode(v: CollectionMode) {\r\n if (this._$collectionMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collectionModeTransform(v);\r\n\r\n this._$collectionMode.next(transformedValue);\r\n };\r\n get collectionMode() { return this._$collectionMode.getValue(); }\r\n\r\n private _$bufferSize = new BehaviorSubject<number>(DEFAULT_BUFFER_SIZE);\r\n protected readonly $bufferSize = this._$bufferSize.asObservable();\r\n\r\n private _bufferSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n @Input()\r\n set bufferSize(v: number) {\r\n if (this._$bufferSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._bufferSizeTransform(v);\r\n\r\n this._$bufferSize.next(transformedValue);\r\n };\r\n get bufferSize() { return this._$bufferSize.getValue(); }\r\n\r\n private _$maxBufferSize = new BehaviorSubject<number>(DEFAULT_MAX_BUFFER_SIZE);\r\n protected readonly $maxBufferSize = this._$maxBufferSize.asObservable();\r\n\r\n private _maxBufferSizeTransform = (v: number) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this._$bufferSize.getValue();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n };\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n @Input()\r\n set maxBufferSize(v: number) {\r\n const val = this._maxBufferSizeTransform(v);\r\n if (this._$maxBufferSize.getValue() === val) {\r\n return;\r\n }\r\n\r\n this._$maxBufferSize.next(val);\r\n };\r\n get maxBufferSize() { return this._$maxBufferSize.getValue(); }\r\n\r\n private _$snappingMethod = new BehaviorSubject<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n protected readonly $snappingMethod = this._$snappingMethod.asObservable();\r\n\r\n private _snappingMethodTransform = (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n @Input()\r\n set snappingMethod(v: SnappingMethod) {\r\n if (this._$snappingMethod.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingMethodTransform(v);\r\n\r\n this._$snappingMethod.next(transformedValue);\r\n };\r\n get snappingMethod() { return this._$snappingMethod.getValue(); }\r\n\r\n private _$methodForSelecting = new BehaviorSubject<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n protected readonly $methodForSelecting = this._$methodForSelecting.asObservable();\r\n\r\n private _methodForSelectingTransform = (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"methodForSelecting\" parameter must have the value `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECT_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n @Input()\r\n set methodForSelecting(v: MethodForSelecting) {\r\n if (this._$methodForSelecting.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._methodForSelectingTransform(v);\r\n\r\n this._$methodForSelecting.next(transformedValue);\r\n };\r\n get methodForSelecting() { return this._$methodForSelecting.getValue(); }\r\n\r\n private _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n protected readonly $trackBy = this._$trackBy.asObservable();\r\n\r\n private _trackByTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._trackByTransform(v);\r\n\r\n this._$trackBy.next(transformedValue);\r\n };\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n private _$screenReaderMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected readonly $screenReaderMessage = this._$screenReaderMessage.asObservable();\r\n\r\n private _screenReaderMessageTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n @Input()\r\n protected set screenReaderMessage(v: string) {\r\n if (this._$screenReaderMessage.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._screenReaderMessageTransform(v);\r\n\r\n this._$screenReaderMessage.next(transformedValue);\r\n };\r\n protected get screenReaderMessage() { return this._$screenReaderMessage.getValue(); }\r\n\r\n private _$screenReaderFormattedMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected $screenReaderFormattedMessage = this._$screenReaderFormattedMessage.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n protected readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _langTextDirTransform = (v: TextDirection) => {\r\n const valid = validateString(v);\r\n\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._langTextDirTransform(v);\r\n\r\n this._$langTextDir.next(transformedValue);\r\n };\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n private _$isVertical = new BehaviorSubject<boolean>(this.isVertical);\r\n protected $isVertical = this._$isVertical.asObservable();\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | null>(null);\r\n protected $focusedElement = this._$focusedElement.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n protected $classes = this._$classes.asObservable();\r\n\r\n private _$prerenderEnabled = new BehaviorSubject<boolean>(false);\r\n protected $prerenderEnabled = this._$prerenderEnabled.asObservable();\r\n\r\n private _$actualItems = new BehaviorSubject<IVirtualListCollection>([]);\r\n\r\n private _$collapsedItemIds = new BehaviorSubject<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _$bounds = new BehaviorSubject<ISize | null>(null);\r\n protected $bounds: Observable<ISize | null> = this._$bounds.asObservable();\r\n\r\n private _$totalSize = new BehaviorSubject<number>(0);\r\n\r\n private _$listBounds = new BehaviorSubject<ISize | null>(null);\r\n\r\n private _$scrollSize = new BehaviorSubject<number>(0);\r\n protected readonly $scrollSize = this._$scrollSize.asObservable();\r\n\r\n private _$isScrollStart = new BehaviorSubject<boolean>(true);\r\n\r\n private _$isScrollEnd = new BehaviorSubject<boolean>(false);\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._$list.getValue(), scroller = this._$scroller.getValue(), bounds = this._$bounds.getValue(), snappedComponents = this._snappedDisplayComponents;\r\n if (list && scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this._$snappingMethod.getValue();\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0].instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this._$langTextDir.getValue();\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0,\r\n scrollBarSize = this._$scrollbarThickness.getValue();\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize + 2;\r\n top = sHeight;\r\n bottom = height;\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const { width, height } = this._$bounds.getValue()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize);\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n const scrollWidth = scroller?.scrollWidth ?? 0, scrollHeight = scroller?.scrollHeight ?? 0;\r\n if (isVertical) {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollHeight) {\r\n pos = scrollHeight;\r\n }\r\n } else {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollWidth) {\r\n pos = scrollWidth;\r\n }\r\n }\r\n\r\n this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior,\r\n fireUpdate: true, blending: true, userAction: true, duration: this._$animationParams.getValue().navigateToItem,\r\n };\r\n scroller.refresh(false);\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this._$trackBy.getValue());\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _scrollStateUpdateIndex: number = 0;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this._$dynamicSize.getValue() && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n protected getScrollStateVersion(totalSize: number, scrollSize: number, cacheVersion: number): string {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n if (totalSize < scrollSize) {\r\n this._scrollStateUpdateIndex = this._scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : this._scrollStateUpdateIndex + 1;\r\n }\r\n return `${this._scrollStateUpdateIndex}_${totalSize}_${scrollSize}_${cacheVersion}`;\r\n };\r\n\r\n constructor() {\r\n super();\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n this._service.animationParams = this._$animationParams.getValue();\r\n\r\n const $dynamicSize = this.$dynamicSize,\r\n $snapScrollToEnd = this.$snapScrollToEnd;\r\n combineLatest([$dynamicSize, $snapScrollToEnd]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dynamicSize, snapScrollToEnd]) => {\r\n this._$prerenderEnabled.next(dynamicSize && snapScrollToEnd);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this.$direction.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n map(v => this.isVertical),\r\n tap(v => {\r\n this._$isVertical.next(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n let hasUserAction = false, hasScrollbarUserAction = false;\r\n\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n\r\n const $resizeViewport = this._scrollerComponent!.$resizeViewport,\r\n $resizeContent = this._scrollerComponent!.$resizeContent!;\r\n\r\n $resizeViewport.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$bounds.next(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$listBounds.next(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = this.$trackBy;\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap((params) => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = this.$list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n );\r\n\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const scrollStartOffset = this._$scrollStartOffset.getValue(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = this.$scrollbarThickness;\r\n $scrollbarThickness.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(takeUntil(this._$unsubscribe)),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(takeUntil(this._$unsubscribe)),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(takeUntil(this._$unsubscribe));\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params!;\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.clickDistance = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $prerenderContainer = of(this._prerender);\r\n\r\n const $prerender = $prerenderContainer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap((v) => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $items = this.$items,\r\n $dynamicSize = this.$dynamicSize,\r\n $snapScrollToStart = this.$snapScrollToStart,\r\n $snapScrollToEnd = this.$snapScrollToEnd,\r\n $waitForPreparation = this.$waitForPreparation;\r\n\r\n combineLatest([$prerenderContainer, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(([prerenderContainer]) => !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([prerenderContainer, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n return $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.itemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n return $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.itemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$focusedElement.next(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = this.$defaultItemValue,\r\n $selectByClick = this.$selectByClick,\r\n $collapseByClick = this.$collapseByClick,\r\n $isScrollStart = this._$isScrollStart.asObservable(),\r\n $isScrollEnd = this._$isScrollEnd.asObservable(),\r\n $scrollStartOffset = this.$scrollStartOffset,\r\n $scrollEndOffset = this.$scrollEndOffset,\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = this.$bounds.pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = this._$listBounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = this.$scrollSize,\r\n $itemSize = this.$itemSize.pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $bufferSize = this.$bufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = this.$maxBufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = this.$itemConfigMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = this.$snap,\r\n $isLazy = this.$collectionMode.pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = this.$enabledBufferOptimization,\r\n $snappingMethod = this.$snappingMethod.pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = this.$methodForSelecting,\r\n $selectedIds = this.$selectedIds,\r\n $collapsedIds = this.$collapsedIds.pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = this._$actualItems.asObservable().pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n ),\r\n $screenReaderMessage = this.$screenReaderMessage,\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntil(this._$unsubscribe),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this._$screenReaderFormattedMessage.next(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $itemsComposition = $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy];\r\n if (hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n this._$actualItems.next(actualItems);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._$list.getValue()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST_BOX);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST_BOX);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.setAttribute('role', ROLE_LIST);\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n\r\n let isChunkLoading = false;\r\n const $loading = this.$loading;\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n bufferSize: number; maxBufferSize: number; snap: boolean; isVertical: boolean; dynamicSize: boolean;\r\n enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean; collapsedIds: Array<Id>;\r\n }, optimization: boolean = false, reupdate: boolean = false) => {\r\n const {\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction, collapsedIds,\r\n } = params;\r\n const scroller = this._scrollerComponent;\r\n let totalSize = 0;\r\n if (scroller) {\r\n const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :\r\n (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n this._$totalSize.next(totalSize);\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = Math.round(actualScrollSize + delta),\r\n roundedScrollPositionAfterUpdate = Math.round(scrollPositionAfterUpdate),\r\n roundedMaxPositionAfterUpdate = Math.round(totalSize - viewportSize);\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (!snapScrollToStart && snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n\r\n if (scrollSize !== scrollPositionAfterUpdate &&\r\n ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate))) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n combineLatest([$snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $collapsedItemIds, $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n collapsedIds, bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n\r\n const enabledOptimization = this.scrollingSettings?.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n scroller = this._scrollerComponent, velocity = this._scrollerComponent?.averageVelocity ?? 0,\r\n maxScrollSize = isVertical ? (scroller?.scrollHeight || 0) : (scroller?.scrollWidth ?? 0),\r\n isEdges = scrollSize === 0 || scrollSize === maxScrollSize, isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = dynamicSize && !itemsChanged && hasUserAction && !isScrolling && (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1),\r\n rerenderOptimization = enabledOptimization && dynamicSize && !itemsChanged && (hasUserAction || hasScrollbarUserAction) && !isEdges && velocity > 0 &&\r\n (velocity > MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 || hasUserAction);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = this.$scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = this._scrollerComponent!.$scroll,\r\n $scrollerScrollEnd = this._scrollerComponent!.$scrollEnd,\r\n $scrollbarScroll = this._scrollerComponent!.$scrollbarScroll;\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n hasScrollbarUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n tap(({ event }) => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(event => {\r\n const trackBy = this.trackBy, scrollerComponent = this._scrollerComponent,\r\n {\r\n id, iteration = 0, blending = false,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { iteration: nextIteration, blending, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (scrollerComponent) {\r\n const items = this._$actualItems.getValue();\r\n if (items && items.length) {\r\n const dynamicSize = this.dynamicSize, itemSize = this.itemSize, snapScrollToEnd = this.snapScrollToEnd;\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize,\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snap: this.snap, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n scrollerComponent.totalSize = totalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, scrollCalled, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical,\r\n currentScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n scrollSize = index * this.itemSize;\r\n if (currentScrollSize !== scrollSize) {\r\n this._$preventScrollSnapping.next(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, scrollCalled, cb }]);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n tap(([finished, params]) => {\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n if (!finished && !scrollParams?.scrollCalled) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n if (!this.dynamicSize) {\r\n this._$fireUpdate.next(true);\r\n this._scrollerComponent?.refresh(false, true);\r\n }\r\n this.emitScrollEvent(true, false, true);\r\n scrollParams?.cb?.();\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = this.$itemRenderer;\r\n\r\n $itemRenderer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$itemRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(bounds => {\r\n const size: ISize = { width: bounds!.width ?? 0, height: bounds!.height ?? 0 };\r\n this.onViewportChange.emit(objectAsReadonly(size));\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this._isSingleSelecting || (this._isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds;\r\n if ((this._isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.selectedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n let isCollapsedIdsFirstEmit = 0;\r\n\r\n this._service.$collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$collapsedItemIds.next(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this.collapsedIds;\r\n if ((isCollapsedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isCollapsedIdsFirstEmit > 2) {\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isCollapsedIdsFirstEmit < 3) {\r\n isCollapsedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n if (maxScrollSize >= 0) {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n if (isScrollStart) {\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING));\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(isScrollEnd);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = isScrollEnd;\r\n }\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this.snapScrollToStart, snapScrollToEnd = this.snapScrollToEnd;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScrollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScrollSize > scrollSize ? -1 : currentScrollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this.scrollStartOffset, this.scrollEndOffset,\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod;\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting;\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction;\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode;\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this.itemRenderer;\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (!!listContainerRef) {\r\n const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = this.itemRenderer;\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this.itemRenderer;\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._$list.getValue(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n return this._service.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior);\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this.items, firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollStart.next(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = (options?.behavior ?? BEHAVIOR_INSTANT) as ScrollBehavior,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this.items, latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender;\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._$collapsedItemIds.next([]);\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._$totalSize.next(0);\r\n this._$scrollSize.next(0);\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.ngOnDestroy();\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (this._service) {\r\n this._service.dispose();\r\n }\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (!!this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($itemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [endOffset]=\"($scrollEndOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"$snap | async\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)!\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<ng-scroller class=\"ngvl__list-scroller\" #scroller [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [endOffset]=\"($scrollEndOffset | async)!\" [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)\"\r\n [focusedElement]=\"($focusedElement | async)!\" [loading]=\"($loading | async)!\"\r\n [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollbarEnabled]=\"($scrollbarEnabled | async)!\"\r\n [scrollbarInteractive]=\"($scrollbarInteractive | async)!\" [scrollbarMinSize]=\"($scrollbarMinSize | async)!\"\r\n [scrollBehavior]=\"($scrollBehavior | async)!\" [scrollingSettings]=\"($scrollingSettings | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickDirective } from './item-click.directive';\r\n\r\n@NgModule({\r\n declarations: [ItemClickDirective],\r\n exports: [ItemClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class ItemClickModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { ItemClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListModule { }\r\n","import { TemplateRef } from '@angular/core';\r\nimport { Id } from '../types';\r\nimport { ISize } from './size';\r\nimport { IRenderVirtualListItem } from '../models/render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/interfaces/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\nexport * from './lib/components/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/interfaces';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","PX","ITEM_ID","BehaviorSubject","BaseVirtualListItemComponent","EventEmitter","takeUntil","tap","switchMap","filter","i2.ItemClickDirective","ScrollerDirection","ScrollBox","TOP","LEFT","INSTANT","SCROLL_EVENT","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i2","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective"],"mappings":";;;;;;;;;;IAAY,gBAIX;AAJD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACT,CAAC,EAJW,eAAe,KAAf,eAAe,GAI1B,EAAA,CAAA,CAAA;;ACCD;;;;;;;AAOG;MAIU,kBAAkB,CAAA;AAH/B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAA6B,CAAC;AAClD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAO,CAAA,OAAA,GAAG,IAAI,eAAe,CAAiB,eAAe,CAAC,MAAM,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAY/C,KAAA;IAVC,IAAI,KAAK,CAAC,CAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,SAAA;KACF;IACD,IAAI,KAAK,GAAK,EAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE;AAE/C,IAAA,KAAK,CAAC,KAAgC,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;;+GAhBU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACZD;;;;;;;AAOG;MAIU,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAKvD,KAAA;IAHC,IAAI,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;IAErD,IAAI,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;;qHAL1C,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACbD;;;;;AAKG;IACS,gBASX;AATD,CAAA,UAAY,eAAe,EAAA;AACvB;;AAEG;AACH,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EATW,eAAe,KAAf,eAAe,GAS1B,EAAA,CAAA,CAAA;;ACfD;;;;;AAKG;IACS,WASX;AATD,CAAA,UAAY,UAAU,EAAA;AAClB;;AAEG;AACH,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACzB,CAAC,EATW,UAAU,KAAV,UAAU,GASrB,EAAA,CAAA,CAAA;;ACfD;;;;;AAKG;IACS,oBAaX;AAbD,CAAA,UAAY,mBAAmB,EAAA;AAC3B;;AAEG;AACH,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;AAEG;AACH,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AACjC,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,GAa9B,EAAA,CAAA,CAAA;;ACnBD;;;;;AAKG;IACS,gBASX;AATD,CAAA,UAAY,eAAe,EAAA;AACvB;;AAEG;AACH,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB;;AAEG;AACH,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACzB,CAAC,EATW,eAAe,KAAf,eAAe,GAS1B,EAAA,CAAA,CAAA;;ACfD;;;;;AAKG;IACS,gBAKX;AALD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA;;ACXD;;;;;;;AAOG;IACS,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ACPM,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAE1C,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,uBAAuB,GAAmB,QAAQ,CAAC;AAEzD,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,MAAM,wBAAwB,GAAqB;AACtD,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,kBAAkB,EAAE,4BAA4B;CACnD,CAAC;AAEK,MAAM,0BAA0B,GAAuB;AAC1D,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,YAAY,EAAE,IAAI;CACrB,CAAC;AAEK,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AAElD,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,MAAM,6CAA6C,GAAG,CAAC,CAAC;AAExD,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEzC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC;AAE9C,MAAM,uBAAuB,GAAG,eAAe,CAAC,MAAM,CAAC;AAEvD,MAAM,uCAAuC,GAAG,CAAC,CAAC;AAElD,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC,MAAM,uBAAuB,GAAG,eAAe,CAAC,QAAQ,CAAC;AAEzD,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,IAAI,CAAC;AAEvD,MAAM,6BAA6B,GAAG,wBAAwB,CAAC;AAE/D,MAAM,qBAAqB,GAAG,cAAc,CAAC,GAAG,CAAC;AAEjD,MAAM,2BAA2B,GAAW,CAAC,CAAC;AAE9C,MAAM,0BAA0B,GAAW,EAAE,CAAC;AAErD;AAEO,MAAM,aAAa,GAAG,MAAwB,CAAC;AAE/C,MAAM,gBAAgB,GAAG,SAA2B,CAAC;AAErD,MAAM,eAAe,GAAG,QAA0B,CAAC;AAEnD,MAAM,aAAa,GAAG,OAAO,CAAC;AAE9B,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAMA,WAAS,GAAG,GAAG,CAAC;AAEtB,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAErC,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAM,kBAAkB,GAAG,CAAG,EAAA,YAAY,SAAS,CAAC;AAEpD,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAElC,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAMC,IAAE,GAAG,IAAI,CAAC;AAEhB,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,QAAQ,GAAG,SAAS,CAAC;AAE3B,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,MAAM,QAAQ,GAAG,SAAS,CAAC;AAE3B,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAEvC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD;AAEO,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAE5C,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C,MAAM,iDAAiD,GAAG,EAAE,CAAC;AAE7D,MAAM,iDAAiD,GAAG,GAAG,CAAC;AAE9D,MAAM,kDAAkD,GAAG,CAAC,CAAC;AAE7D,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAE1C,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAE9C,MAAM,4CAA4C,GAAG,CAAC,CAAC;AAEvD,MAAM,qCAAqC,GAAG,CAAC,CAAC;AAEhD,MAAM,8CAA8C,GAAG,CAAC,CAAC;AAEzD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC,MAAMC,SAAO,GAAG,SAAS,CAAC;AAE1B,MAAM,cAAc,GAAG,sBAAsB;;ACzO7C,MAAM,EAAE,GAAG,IAAI,EAClB,mBAAmB,GAAG,gCAAgC,EACtD,kBAAkB,GAAG,eAAe,EACpC,QAAQ,GAAG,UAAU,EACrB,aAAa,GAAG,GAAG,EACnB,OAAO,GAAG,SAAS,EACnB,SAAS,GAAG,GAAG,EACf,YAAY,GAAG,WAAW,EAC1B,UAAU,GAAG,SAAS,EACtB,aAAa,GAAG,YAAY,EAC5B,YAAY,GAAG,WAAW,EAC1B,cAAc,GAAG,SAAS,EAC1B,eAAe,GAAG,UAAU,EAC5B,cAAc,GAAG,SAAS,EAC1B,kBAAkB,GAAG,SAAS,EAC9B,sBAAsB,GAAG,aAAa,EACtC,gBAAgB,GAAG,OAAO,CAAC;AAGpB,MAAM,wBAAwB,GAAqB;AACtD,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,MAAM,EAAE;AACJ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,wBAAwB,EAAE,KAAK;AAC/B,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,MAAM,EAAE,GAAG;AACd,KAAA;AACD,IAAA,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC,CAAC;AACT,IAAA,GAAG,EAAE,IAAI;CACZ;;ACjCL;;;;;;;;;AASG;AACI,MAAM,QAAQ,GAAG,CAAC,EAAiC,EAAE,YAAA,GAAuB,CAAC,EAAE,QAAmB,GAAA,CAAC,KAAe;AACrH,IAAA,IAAI,OAAO,GAAQ,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAK;QACjB,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAA;AACjB,SAAA;AACL,KAAC,CAAA;AACD,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAgB,KAAI;QACpC,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,MAAM,EAAE,CAAC;AACZ,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,CAAC,CAAC;AACd,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;QAEV,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACrB,MAAM,GAAG,CAAC,CAAC;gBACX,MAAM,GAAG,IAAI,CAAC;AACd,gBAAA,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,OAAO,GAAG,UAAU,CAAC,MAAK;AACtB,gBAAA,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;aACf,EAAE,YAAY,CAAC,CAAC;AACpB,SAAA;AACL,KAAC,CAAC;IACF,MAAM,aAAa,GAAG,MAAK;QACvB,OAAO,OAAO,KAAK,IAAI,CAAC;AAC5B,KAAC,CAAC;IACF,OAAO;AACH;;AAEG;QACH,OAAO;AACP;;AAEG;QACH,OAAO;AACP;;AAEG;QACH,aAAa;KAChB,CAAC;AACN;;AC5EA;;;;;AAKG;AACU,MAAA,eAAe,GAAG,CAAC,EAAe,EAAE,SAAiB,EAAE,eAAwB,KAAI;IAC5F,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACnC,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,KAAA;AACD,IAAA,IAAI,eAAe,EAAE;AACjB,QAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,KAAA;AACL;;ACGA;;;;;AAKG;MACU,WAAW,CAAA;AAqCpB,IAAA,WAAA,CAAY,MAA0B,EAAA;QApC9B,IAAU,CAAA,UAAA,GAAoB,CAAC,CAAC;QAGhC,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QAGxB,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;QAG1B,IAAW,CAAA,WAAA,GAAY,IAAI,CAAC;QAG5B,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;QAGtB,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAGlB,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;QAGzB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QAGxB,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;QAGnB,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAUjC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;AAC7H,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC;AACjF,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;AACnE,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC;AACzE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;KACjC;IAjDD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE;IAG3C,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAG7C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAGjD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAG7C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAGzC,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IAGjC,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;IAGvC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;IAGnC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;IAGnC,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;IAGvD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAG7C,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;AAiBhD;;ACxED;;;;;AAKG;MACU,YAAY,CAAA;AAOrB,IAAA,WAAA,GAAA;QANU,IAAU,CAAA,UAAA,GAEhB,EAAE,CAAC;QAEG,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;KAEpB;AAEjB;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAQ,EAAE,GAAG,IAAgB,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAA0B,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,QAAQ,EAAE;AACV,oBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,KAAQ,EAAE,GAAG,IAAgB,EAAA;QACvC,cAAc,CAAC,MAAK;YAChB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;AACV,aAAA;YACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACH,gBAAgB,CAAC,SAAY,EAAE,OAAU,EAAA;QACrC,MAAM,KAAK,GAAG,SAA8B,CAAC;QAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAM,OAAe,CAAC,CAAC;AAC/D,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAA;KACf;AAED;;AAEG;IACH,gBAAgB,CAAC,SAAY,EAAE,OAAU,EAAA;QACrC,MAAM,KAAK,GAAG,SAA8B,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AAC/B,SAAA;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAmC,CAAC,CAAC;KACpE;AAED;;AAEG;IACH,mBAAmB,CAAC,SAAY,EAAE,OAAU,EAAA;QACxC,MAAM,KAAK,GAAG,SAA8B,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACxC,OAAO;AACV,SAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,OAAc,CAAC,CAAC;AACjG,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACZ,YAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3B,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;IACH,kBAAkB,GAAA;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAC3B,YAAA,IAAI,KAAK,EAAE;gBACP,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzC,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1B,oBAAA,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,wBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;AACjC,wBAAA,IAAI,QAAQ,EAAE;AACV,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAqB,EAAE,QAAwB,CAAC,CAAC;AAC7E,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;IACH,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;AACJ;;MCtHY,IAAI,CAAA;AAGb,IAAA,WAAA,CAAY,IAAiB,EAAA;QAFnB,IAAK,CAAA,KAAA,GAAgC,EAAE,CAAC;AAG9C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AAED,IAAA,IAAI,CAAC,IAAiB,EAAA;AAClB,QAAA,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,SAAA;KACJ;AAED,IAAA,GAAG,CAAC,GAAM,EAAA;AACN,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AAChB,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,GAAG,CAAC,GAAM,EAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD;AACD,IAAA,MAAM,CAAC,GAAM,EAAA;AACT,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACnB;IACD,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AACJ;;ACtBM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAQpD,MAAM,yBAAyB,GAAG,EAAE,EAAE,yBAAyB,GAAG,EAAE,EAChE,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC;AAEvD;;;;;;AAMG;AACG,MAAO,QAAkF,SAAQ,YAAkB,CAAA;AA2CrH,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;AA3CF,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,IAAI,EAAQ,CAAC;AAExB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,IAAI,EAAQ,CAAC;QAE7B,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;AAErB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;QAIjC,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;QAMnB,IAAe,CAAA,eAAA,GAAoB,CAAC,CAAC;QAUvC,IAAqB,CAAA,qBAAA,GAA2B,EAAE,CAAC;QACnD,IAAgB,CAAA,gBAAA,GAAoB,CAAC,CAAC;AAStC,QAAA,IAAA,CAAA,6BAA6B,GAAG,QAAQ,CAAC,MAAK;AAClD,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,yBAAyB,EAAE;AAClE,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACtC,aAAA;SACJ,EAAE,EAAE,CAAC,CAAC;QAIH,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;AAjCD,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAGD,IAAI,cAAc,CAAC,CAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;KACvD;AACD,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;AAID,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;AAED,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAaS,eAAe,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC;KAClD;IAES,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AAClC,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,SAAA;KACJ;AAES,IAAA,QAAQ,CAAC,EAAc,EAAA;QAC7B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACjC,YAAA,EAAE,EAAE,CAAC;AACT,SAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAES,UAAU,GAAA;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAES,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;AAEtC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAK;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB,SAAC,CAAC,CAAC;KACN;IAED,yBAAyB,CAAC,KAAK,GAAG,IAAI,EAAA;AAClC,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,CAAC;YAC7C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;KACnC;AAEO,IAAA,mBAAmB,CAAC,CAAkB,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,IAAI,yBAAyB,EAAE;AACnE,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAA4B,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,KAAK,EAAE,EAAE;AACV,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;AAChB,oBAAA,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;wBACjB,SAAS;AACZ,qBAAA;AACD,oBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE;YACvE,OAAO,CAAC,CAAC,CAAC;AACb,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjF,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACZ;IAES,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,OAAO;AACV,SAAA;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACrB;IAES,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,2BAA2C,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5E,SAAA;KACJ;IAED,GAAG,CAAC,EAAK,EAAE,MAAS,EAAA;QAChB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACnB,YAAA,MAAM,CAAC,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAQ,MAAM,CAAC;AACnD,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;gBAChD,OAAO,IAAI,CAAC,IAAI,CAAC;AACpB,aAAA;YACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACpB,SAAA;AAED,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,OAAO,CAAC,CAAC;KACZ;AAED,IAAA,GAAG,CAAC,EAAK,EAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,EAAK,EAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5B;AAED,IAAA,MAAM,CAAC,EAAK,EAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACxB;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACrB;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;IAEQ,OAAO,GAAA;QACZ,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACrB;AACJ;;AC/LD;;;;;;;AAOG;MACU,OAAO,CAAA;AAiChB,IAAA,WAAA,CAAY,oBAA4B,EAAA;AAhCxC;;AAEG;QACO,IAA0B,CAAA,0BAAA,GAA6B,EAAE,CAAC;AAcpE;;AAEG;AACO,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,IAAI,EAA8B,CAAC;AAgBrD,QAAA,IAAA,CAAA,kCAAkC,GAAG,CAAC,MAAU,EAAE,iBAA4D,KACzF;YACzB,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,KAAK,CAAC,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACD,YAAA,MAAM,KAAK,GAAG,iBAAiB,EAAE,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;AACtF,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACZ,gBAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACtC,gBAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnC,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACD,YAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;AAC7C,SAAC,CAAA;AAfG,QAAA,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;KACrD;IA7BD,IAAI,yBAAyB,CAAC,CAA2B,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,0BAA0B,KAAK,CAAC,EAAE;YACvC,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;KACvC;AAED,IAAA,IAAI,yBAAyB,GAAA;QACzB,OAAO,IAAI,CAAC,0BAA0B,CAAC;KAC1C;AAOD,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAID,IAAI,oBAAoB,CAAC,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;KAClC;AAoBD;;AAEG;AACH,IAAA,KAAK,CAAC,KAAmC,EAAE,UAAkC,EAAE,iBAA4D,EACvI,SAA0B,EAAA;QAC1B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;AACV,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,aAAa,GAAe,EAAE,EAClE,4BAA4B,GAAyE,EAAE,EACvG,MAAM,GAAG,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,iBAAiB,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAC7G,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;AACpH,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,IAAI,gBAAoD,CAAC;YACzD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;oBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACjD,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEpF,oBAAA,MAAM,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;AAClC,oBAAA,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;wBACvC,MAAM,qBAAqB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAG;AACvD,4BAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC;AACpC,yBAAC,CAAC,CAAC;AACH,wBAAA,IAAI,qBAAqB,GAAG,CAAC,CAAC,EAAE;4BAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC/C,gCAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oCACpB,gBAAgB,GAAG,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oCAC7E,IAAI,CAAC,CAAC,gBAAgB,EAAE;wCACpB,gBAAgB,GAAG,IAAI,CAAC;AACxB,wCAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC,wCAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,qCAAA;AACJ,iCAAA;AACJ,6BAAA;4BAED,IAAI,CAAC,CAAC,gBAAgB,EAAE;gCACpB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC/C,oCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,oCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,iCAAA;AAAM,qCAAA;AACH,oCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,oCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,iCAAA;AACJ,6BAAA;AAAM,iCAAA;AACH,gCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,gCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,6BAAA;AACD,4BAAA,cAAc,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;4BAChD,SAAS;AACZ,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAE/C,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAA,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,EAAE;AACpD,oBAAA,4BAA4B,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3C,iBAAA;AACD,gBAAA,4BAA4B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/D,aAAA;AACJ,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,YAAA,IAAI,gBAAoD,CAAC;AACzD,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC,EAAE,EACzD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,gBAAA,IAAI,IAAiC,CAAC;AACtC,gBAAA,IAAI,IAAI,EAAE;AACN,oBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;AAChD,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,wBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,wBAAA,IAAI,aAAa,EAAE;AACf,4BAAA,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;4BAC1B,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAChD,yBAAA;AACJ,qBAAA;AACJ,iBAAA;gBAED,IAAI,CAAC,IAAI,EAAE;AACP,oBAAA,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;AACjC,iBAAA;AAED,gBAAA,IAAI,IAAI,EAAE;oBACN,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC/C,wBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;4BACpB,gBAAgB,GAAG,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;4BAC7E,gBAAgB,GAAG,IAAI,CAAC;4BACxB,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACpB,gCAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC,gCAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,6BAAA;AACJ,yBAAA;AACJ,qBAAA;oBACD,IAAI,CAAC,CAAC,gBAAgB,EAAE;wBACpB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC/C,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,yBAAA;AAAM,6BAAA;AACH,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,yBAAA;AACJ,qBAAA;AAAM,yBAAA;AACH,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,qBAAA;oBAED,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9D,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;QAED,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAA,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxB,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,gBAAgB,EAAE;AACnB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACpB,oBAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC,oBAAA,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,4BAA4B,CAAC,SAAa,EAAA;QACtC,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO;AACV,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAElD,IAAI,IAAI,CAAC,SAAS,IAAK,SAAiB,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE;AACpE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACzC,SAAA;KACJ;IAED,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KAC1B;IAED,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAA;KACJ;AACJ;;ACtPD,MAAM,aAAa,GAAG;AAClB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,UAAU,EAAE,EAAE;CACjB,CAAC;AAOK,MAAM,mBAAmB,GAAG,CAAC,kBAA0B,EAAE,KAAoB,EAAE,KAAa,EAAE,KAAqB,KAAI;AAC1H,IAAA,MAAM,EACF,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,EACnD,UAAU,GAAG,aAAa,CAAC,UAAU,GACxC,GAAG,KAAK,IAAI,aAAa,CAAC;IAE3B,IAAI,kBAAkB,GAAG,KAAK,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,iBAAiB,EAAE;AAC1B,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,YAAA,CAAC,EAAE,CAAC;AACP,SAAA;AACJ,KAAA;AAAM,SAAA;AACH,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,KAAA;AAED,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE;AAC3B,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE;YAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;AACjB,SAAA;AACJ,KAAA;AAED,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,KAAA;AAED,IAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,CAAC;;ACvBD,IAAY,cAGX,CAAA;AAHD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA,CAAA;AAmED,IAAY,kBAKX,CAAA;AALD,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,kBAAA,CAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW,CAAA;AACf,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAK7B,EAAA,CAAA,CAAA,CAAA;AAmBD,MAAM,iCAAiC,GAAG,EAAE,EACxC,kCAAkC,GAAG,EAAE,EACvC,iCAAiC,GAAG,KAAK,EACzC,MAAM,GAAG,GAAG,CAAC;AAIjB;;;;;AAKG;AACG,MAAO,QACT,SAAQ,QAAsD,CAAA;AA6G9D,IAAA,WAAA,CAAY,oBAA4B,EAAA;AACpC,QAAA,KAAK,EAAE,CAAC;QA5EF,IAAyB,CAAA,yBAAA,GAAY,KAAK,CAAC;QAU3C,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QAiBzB,IAAqB,CAAA,qBAAA,GAAW,sBAAsB,CAAC;QASvD,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAShC,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAE9B,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QAMtC,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;QAMpC,IAAkB,CAAA,kBAAA,GAAW,CAAC,CAAC;QAQ/B,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAoC7B,IAAgB,CAAA,gBAAA,GAA+B,EAAE,CAAC;QAElD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAatB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QAEvB,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAGvC,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;QAEd,IAA6B,CAAA,6BAAA,GAAG,iCAAiC,CAAC;QAElE,IAAwB,CAAA,wBAAA,GAAG,kCAAkC,CAAC;QAE9D,IAAmB,CAAA,mBAAA,GAAkB,EAAE,CAAC;QAExC,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QAGxB,IAAkB,CAAA,kBAAA,GAAW,CAAC,CAAC;AAE/B,QAAA,IAAA,CAAA,cAAc,GAAW,IAAI,CAAC,kBAAkB,CAAC;QAEjD,IAAuB,CAAA,uBAAA,GAAW,iCAAiC,CAAC;QAIpE,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAE7B,IAAiB,CAAA,iBAAA,GAA0B,IAAI,CAAC;QAEhD,IAAS,CAAA,SAAA,GAAc,EAAE,CAAC;QA+MxB,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;AAwtB1B,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAChC,SAAC,CAAC,CAAC;AA7+BC,QAAA,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAElD,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IA7GD,IAAI,KAAK,CAAC,CAAkD,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACnB;IAID,IAAI,iBAAiB,CAAC,CAA4C,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,EAAE;YAC/B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;KAC/B;IAID,IAAI,wBAAwB,CAAC,CAA4C,EAAA;AACrE,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,CAAC,EAAE;YACtC,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;KACtC;IAID,IAAI,wBAAwB,CAAC,CAAU,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,CAAC,EAAE;YACtC,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;KACtC;IAID,IAAI,MAAM,CAAC,CAAU,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;YACpB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;KACpB;AAED;;AAEG;IACH,IAAI,oBAAoB,CAAC,CAAS,EAAA;QAC9B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,CAAC;KACvE;IAID,IAAI,aAAa,CAAC,CAAU,EAAA;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,EAAE;AACH,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACpC,SAAA;KACJ;IAID,IAAI,WAAW,CAAC,CAAU,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,EAAE;AACH,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAClC,SAAA;KACJ;AAMD,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC;KAC3D;AAID,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC;KACvD;IAGD,IAAI,iBAAiB,CAAC,CAAS,EAAA;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;KAC/B;AACD,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAClC;IAGD,IAAI,eAAe,CAAC,CAAS,EAAA;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;KAC7B;AACD,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IAUS,UAAU,GAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAC3D;IAEQ,GAAG,CAAC,EAAM,EAAE,KAAY,EAAA;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACnB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;gBACxD,OAAO,IAAI,CAAC,IAAI,CAAC;AACpB,aAAA;AACJ,SAAA;AAED,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEnC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,OAAO,CAAC,CAAC;KACZ;IAOD,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAE9B,gBAAgB,GAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvD,SAAA;KACJ;IAES,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KACtC;IAKD,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;IAWvD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAgB1B,UAAU,GAAA;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;AAED;;AAEG;IACH,eAAe,CAAsC,iBAAuC,EACxF,QAAgB,EAAA;AAChB,QAAA,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,IAAI;AAC7D,YAAA,iBAAiB,KAAK,IAAI,CAAC,mBAAmB,EAAE;AAChD,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO;AACV,SAAA;AAED,QAAA,MAAM,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;aAC/E,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAE1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAExE,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7D;AAED;;AAEG;AACO,IAAA,WAAW,CAAsC,kBAAwC,EAC/F,iBAAuC,EACvC,QAAgB,EAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC3C,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,YAAA,IAAI,kBAAkB,EAAE;;AAEpB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,oBAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvD,YAAY,GAAG,IAAI,CAAC;oBACpB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACnB,wBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxB,qBAAA;AACJ,iBAAA;AACJ,aAAA;YACD,OAAO;AACV,SAAA;QACD,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,IAAI,iBAAiB,EAAE;;AAEnB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACtD,YAAY,GAAG,IAAI,CAAC;AACpB,oBAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;oBACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/F,iBAAA;AACJ,aAAA;YACD,OAAO;AACV,SAAA;QACD,MAAM,cAAc,GAAa,EAAE,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACtD,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,IAAI,IAAI,EAAE;gBACN,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AACxC,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,aAAa,GAAa,EAAE,EAAE,UAAU,GAAa,EAAE,EAAE,eAAe,GAA+B,EAAE,EAC3G,UAAU,GAAa,EAAE,CAAC;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,YAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,YAAA,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;AACnC,oBAAA,IAAI,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC,EAAE;;wBAE7B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AACpC,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACd,4BAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;4BAC/D,MAAM,EAAE,kBAAkB,CAAC,WAAW;AACzC,yBAAA,CAAC,CAAC;wBACH,SAAS;AACZ,qBAAA;AAAM,yBAAA;;wBAEH,YAAY,GAAG,IAAI,CAAC;wBACpB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AACjC,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACd,4BAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;4BAC/D,MAAM,EAAE,kBAAkB,CAAC,MAAM;AACpC,yBAAA,CAAC,CAAC;wBACH,SAAS;AACZ,qBAAA;AACJ,iBAAA;;gBAGD,YAAY,GAAG,IAAI,CAAC;AACpB,gBAAA,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACtB,gBAAA,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxB,aAAA;AACJ,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACtD,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;AACxE,gBAAA,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;gBAExB,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/F,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;KAC3C;AAED;;AAEG;AACH,IAAA,eAAe,CAAsC,EAAM,EAAE,aAAwC,EACjG,OAAsC,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC;QAExC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC9D,YAAA,GAAG,GAAG;AACN,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,WAAW;YAClD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,eAAe,EAAE,IAAI,CAAC,gBAAgB;AACzC,SAAA,CAAC,CAAC;QACH,OAAO,iBAAiB,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;KAC9C;IAED,qBAAqB,CAAC,cAAuB,KAAK,EAAA;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAEhD,QAAA,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AAC/D,SAAA;KACJ;AAED;;AAEG;AACH,IAAA,UAAU,CAAsC,KAAQ,EAAE,aAAwC,EAC9F,OAAuC,EAAA;QACvC,MAAM,GAAG,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC,aAAa,EACxE,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACpC,YAAA,GAAG,GAAG;AACN,YAAA,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,eAAe;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;KAC/E;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAsC,KAAQ,EAAE,aAAwC,EACpG,OAAuC,EAAA;QACvC,MAAM,GAAG,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,aAAa,EACvG,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACpC,YAAA,GAAG,GAAG;AACN,YAAA,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,eAAe;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;QAE7B,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;AAE5C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAE3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,GAAG,CAAC,WAAW,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC;AAC3F,QAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;KAC7F;IAIS,0BAA0B,CAAC,OAAiB,EAAE,gBAAwB,EAAA;QAC5E,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,CAAC;AAC7G,QAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;AACtC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,EACjI,aAAa,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,GAAG,aAAa,EACjG,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AAE5F,QAAA,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;YAC5F,iBAAiB,EAAE,IAAI,CAAC,6BAA6B;YACrD,UAAU,EAAE,IAAI,CAAC,wBAAwB;AAC5C,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,EAAE,CAAC;KACpC;IAES,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC3C,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAClC,SAAC,EAAE,IAAI,CAAC,uBAAuB,CAAsB,CAAC;KACzD;IAES,2BAA2B,GAAA;AACjC,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAC5C;AAED;;AAEG;AACO,IAAA,kBAAkB,CAAsC,CAAS,EAAE,UAAa,EAAE,GAAoB,EAAE,eAAuB,EACrI,IAAY,EAAE,UAAmB,EAAE,cAAsB,CAAC,EAAE,UAAmB,KAAK,EAAA;AACpF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,YAAY,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAC3G,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9E,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACb,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1B,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;AACvF,aAAA;AAAM,iBAAA;gBACH,QAAQ,GAAG,eAAe,CAAC;AAC9B,aAAA;AACD,YAAA,IAAI,MAAM,GAAG,QAAQ,GAAG,IAAI,EAAE;AAC1B,gBAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC1B,aAAA;YACD,MAAM,IAAI,QAAQ,CAAC;AACnB,YAAA,GAAG,EAAE,CAAC;AACT,SAAA;AACD,QAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;KAC1B;AAED;;AAEG;AACO,IAAA,kBAAkB,CAAsC,OAAyC,EAAA;AACvG,QAAA,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAChG,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,YAAY,EAC3F,eAAe,EAAE,GAAG,OAEnB,EAAE,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAElD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EAC9F,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,EAC1F,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,EAC/F,CAAC,GAAG,UAAU,GAAG,KAAK,GAAG,eAAe,EAAE,CAAC,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,EACnF,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAS,EAC1C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAkB,EAAE,EAClG,QAAQ,GAAG,UAAU,KAAK,SAAS,KAAK,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;gBAClF,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC;AAEjE,QAAA,IAAI,eAAe,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,yBAAyB,EAAE;YAC3B,QAAQ,IAAI,CAAC,eAAe;gBACxB,KAAK,CAAC,EAAE;oBACJ,eAAe,GAAG,CAAC,CAAC;oBACpB,gBAAgB,GAAG,UAAU,CAAC;oBAC9B,MAAM;AACT,iBAAA;gBACD,KAAK,CAAC,CAAC,EAAE;oBACL,eAAe,GAAG,UAAU,CAAC;oBAC7B,gBAAgB,GAAG,CAAC,CAAC;oBACrB,MAAM;AACT,iBAAA;AACD,gBAAA,KAAK,CAAC,CAAC;AACP,gBAAA,SAAS;AACL,oBAAA,eAAe,GAAG,gBAAgB,GAAG,UAAU,CAAC;AACnD,iBAAA;AACJ,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,eAAe,GAAG,gBAAgB,GAAG,UAAU,CAAC;AACnD,SAAA;QAED,IAAI,yBAAyB,GAAW,CAAC,CAAC,EAAE,8BAA8B,GAAG,CAAC,EAAE,0BAA0B,GAAG,CAAC,CAAC,EAC3G,cAAc,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EACvC,eAAe,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,EACzC,qBAAqB,GAAG,CAAC,EACzB,4BAA4B,GAAG,CAAC,EAChC,eAAe,GAAG,CAAC,EACnB,oBAAoB,GAAG,CAAC,EACxB,sBAAsB,GAAG,CAAC,EAC1B,sBAAsB,GAAG,CAAC,EAC1B,QAAQ,GAAkB,SAAS,EACnC,WAAW,GAAW,IAAI,CAAC,kBAAkB,EAC7C,oBAAoB,GAAY,KAAK,EACrC,gBAAgB,GAAG,WAAW,EAC9B,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAC3D,UAAkB,EAClB,iBAAiB,GAAG,KAAK,EACzB,sBAAsB,GAAG,CAAC,EAC1B,UAAU,GAAG,KAAK,CAAC;AAEvB,QAAA,MAAM,OAAO,IAAI,CAAC,iBAAiB,KAAK,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACrE,QAAA,IAAI,YAA4B,EAAE,KAAK,GAAG,KAAK,CAAC;;AAGhD,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,QAAQ,EAAE;gBACV,KAAK,IAAI,QAAQ,GAAmB,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACrF,oBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;oBACjD,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE;wBACjC,QAAQ,GAAG,EAAE,CAAC;AACjB,qBAAA;AACD,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE;wBAC5B,YAAY,GAAG,QAAQ,CAAC;AAC3B,qBAAA;oBACD,IAAI,EAAE,KAAK,UAAU,EAAE;wBACnB,MAAM;AACT,qBAAA;AACJ,iBAAA;AACJ,aAAA;YAED,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,GAAG,CAAC,CAAC;AACzD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AAE/E,gBAAA,IAAI,aAAa,GAAG,CAAC,EAAE,kBAAkB,GAAG,CAAC,EAAE,iBAAiB,GAAuB,kBAAkB,CAAC,WAAW,CAAC;AACtH,gBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACb,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,oBAAA,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;oBAChF,iBAAiB,GAAG,KAAK,EAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;oBAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACnG,KAAK,GAAG,SAAS,CAAC;AAClB,oBAAA,IAAI,KAAK,EAAE;wBACP,UAAU,GAAG,IAAI,CAAC;AACrB,qBAAA;oBACD,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EACnC,qBAAqB,GAAG,aAAa,IAAI,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC,CAAC;oBAC9G,kBAAkB,GAAG,qBAAqB,CAAC;AAC3C,oBAAA,QAAQ,iBAAiB;AACrB,wBAAA,KAAK,kBAAkB,CAAC,MAAM,EAAE;AAC5B,4BAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,kBAAkB,CAAC,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;AACvH,4BAAA,IAAI,KAAK,IAAI,CAAC,KAAK,UAAU,GAAG,IAAI,GAAG,sBAAsB,GAAG,aAAa,CAAC,EAAE;gCAC5E,sBAAsB,IAAI,kBAAkB,CAAC;gCAC7C,kBAAkB,GAAG,CAAC,CAAC;AAC1B,6BAAA;4BACD,MAAM;AACT,yBAAA;AACD,wBAAA,KAAK,kBAAkB,CAAC,MAAM,EAAE;4BAC5B,kBAAkB,GAAG,eAAe,CAAC;4BACrC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;AAC9E,4BAAA,IAAI,KAAK,IAAI,CAAC,KAAK,UAAU,GAAG,IAAI,GAAG,sBAAsB,GAAG,aAAa,CAAC,EAAE;gCAC5E,sBAAsB,IAAI,kBAAkB,CAAC;gCAC7C,kBAAkB,GAAG,CAAC,CAAC;AAC1B,6BAAA;4BACD,MAAM;AACT,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AAED,gBAAA,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AACnC,oBAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC,IAAI,eAAe,CAAC;oBAClF,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,EAAE;wBACjD,sBAAsB,IAAI,IAAI,CAAC;AAClC,qBAAA;AACJ,iBAAA;gBAED,SAAS,IAAI,aAAa,CAAC;AAE3B,gBAAA,IAAI,QAAQ,EAAE;oBACV,IAAI,QAAQ,KAAK,SAAS,EAAE;AACxB,wBAAA,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,YAAY,IAAI,aAAa,GAAG,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE;4BAC/E,mBAAmB,GAAG,aAAa,CAAC;4BACpC,CAAC,IAAI,mBAAmB,CAAC;AAC5B,yBAAA;wBAED,IAAI,EAAE,KAAK,UAAU,EAAE;4BACnB,iBAAiB,GAAG,IAAI,CAAC;AAEzB,4BAAA,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,CAAC,EAClG,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAAC;4BACrC,IAAI,gBAAgB,GAAG,CAAC,EAAE;gCACtB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,EAChI,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,WAAW,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC;gCAC9D,4BAA4B,IAAI,MAAM,CAAC;gCACvC,yBAAyB,IAAI,QAAQ,CAAC;AACtC,gCAAA,gBAAgB,GAAG,eAAe,GAAG,CAAC,CAAC;gCACvC,qBAAqB,IAAI,WAAW,CAAC;gCACrC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;gCACtE,CAAC,IAAI,WAAW,CAAC;AACpB,6BAAA;4BAED,QAAQ,GAAG,cAAc,CAAC;4BAC1B,WAAW,GAAG,CAAC,CAAC;AACnB,yBAAA;AAAM,6BAAA;AACH,4BAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACrC,qBAAqB,IAAI,aAAa,CAAC;4BACvC,yBAAyB,GAAG,EAAE,CAAC;AAClC,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AAAM,qBAAA,IAAI,CAAC,IAAI,UAAU,GAAG,aAAa,EAAE;AACxC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACrC,qBAAqB,IAAI,aAAa,CAAC;oBACvC,yBAAyB,GAAG,EAAE,CAAC;AAClC,iBAAA;AAED,gBAAA,IAAI,QAAQ,EAAE;oBACV,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,WAAW,GAAG,IAAI,GAAG,aAAa,EAAE;wBAClE,0BAA0B,GAAG,EAAE,CAAC;wBAChC,4BAA4B,IAAI,aAAa,CAAC;AAC9C,wBAAA,8BAA8B,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;AAClF,qBAAA;AACJ,iBAAA;AAAM,qBAAA,IAAI,CAAC,IAAI,UAAU,GAAG,IAAI,GAAG,aAAa,EAAE;oBAC/C,0BAA0B,GAAG,EAAE,CAAC;oBAChC,4BAA4B,IAAI,aAAa,CAAC;AAC9C,oBAAA,8BAA8B,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;AAE/E,oBAAA,IAAI,CAAC,IAAI,UAAU,GAAG,aAAa,EAAE;AACjC,wBAAA,QAAQ,iBAAiB;AACrB,4BAAA,KAAK,kBAAkB,CAAC,MAAM,EAAE;gCAC5B,oBAAoB,IAAI,kBAAkB,CAAC;gCAC3C,MAAM;AACT,6BAAA;4BACD,KAAK,kBAAkB,CAAC,MAAM,CAAC;AAC/B,4BAAA,KAAK,kBAAkB,CAAC,WAAW,EAAE;gCACjC,sBAAsB,IAAI,kBAAkB,CAAC;gCAC7C,MAAM;AACT,6BAAA;AACD,4BAAA,KAAK,kBAAkB,CAAC,MAAM,EAAE;gCAC5B,sBAAsB,IAAI,kBAAkB,CAAC;gCAC7C,MAAM;AACT,6BAAA;AACJ,yBAAA;AACJ,qBAAA;AAED,oBAAA,IAAI,iBAAiB,KAAK,kBAAkB,CAAC,MAAM,EAAE;wBACjD,eAAe,IAAI,kBAAkB,CAAC;AACzC,qBAAA;AACJ,iBAAA;AAAM,qBAAA;oBACH,IAAI,CAAC,GAAG,8BAA8B,EAAE;wBACpC,gBAAgB,IAAI,aAAa,CAAC;AACrC,qBAAA;AACJ,iBAAA;gBAED,CAAC,IAAI,aAAa,CAAC;AACtB,aAAA;AAED,YAAA,IAAI,yBAAyB,IAAI,CAAC,CAAC,EAAE;gBACjC,yBAAyB,GAAG,CAAC,CAAC;AACjC,aAAA;AACD,YAAA,IAAI,0BAA0B,IAAI,CAAC,CAAC,EAAE;gBAClC,0BAA0B,GAAG,CAAC,CAAC;AAClC,aAAA;YACD,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;YAEvD,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AACtE,YAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,eAAe,IAAI,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;YAEH,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AACtE,YAAA,eAAe,GAAG,0BAA0B,GAAG,gBAAgB,GAAG,WAAW;kBACvE,WAAW,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;AAErE,SAAA;;;AAED,QAAA;AACI,YAAA,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,GAAG,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;YACjG,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;YAC1G,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;AACjE,YAAA,eAAe,GAAG,0BAA0B,GAAG,UAAU,GAAG,WAAW;kBACjE,WAAW,GAAG,0BAA0B,GAAG,UAAU,CAAC;AAC5D,YAAA,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC;AACnD,YAAA,gBAAgB,GAAG,eAAe,GAAG,eAAe,CAAC;AACrD,YAAA,qBAAqB,GAAG,yBAAyB,GAAG,eAAe,CAAC;AACpE,YAAA,4BAA4B,GAAG,0BAA0B,GAAG,eAAe,CAAC;AAC5E,YAAA,SAAS,GAAG,CAAC,WAAW,GAAG,eAAe,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAE9F,YAAA,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,iBAAiB,GAAG,SAAS,GAAG,CAAC,CAAC;AAC9D,YAAA,gBAAgB,GAAG,UAAU,GAAG,CAAC,CAAC;AACrC,SAAA;QACD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,cAAc,EAAE,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzG,MAAM,oBAAoB,GAAG,4BAA4B,GAAG,eAAe,EACvE,oBAAoB,GAAG,0BAA0B,GAAG,yBAAyB,EAC7E,aAAa,GAAG,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,GAAG,eAAe,EACjF,WAAW,GAAG,oBAAoB,GAAG,cAAc,GAAG,eAAe,EACrE,kBAAkB,GAAG,sBAAsB,GAAG,CAAC,GAAG,sBAAsB,GAAG,CAAC,EAC5E,KAAK,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;AAExG,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;AAExC,QAAA,IAAI,QAAQ,IAAI,CAAC,oBAAoB,EAAE;AACnC,YAAA,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,CAAC;AAC/C,SAAA;AAED,QAAA,MAAM,OAAO,GAAa;YACtB,KAAK;AACL,YAAA,mBAAmB,EAAE,CAAC;AACtB,YAAA,oBAAoB,EAAE,CAAC;YACvB,KAAK;YACL,MAAM;YACN,WAAW;YACX,QAAQ;YACR,yBAAyB;YACzB,0BAA0B;YAC1B,oBAAoB;YACpB,oBAAoB;YACpB,UAAU;YACV,qBAAqB;YACrB,cAAc;YACd,eAAe;YACf,WAAW;YACX,eAAe;YACf,gBAAgB;AAChB,YAAA,UAAU,EAAE,gBAAgB;YAC5B,oBAAoB;YACpB,YAAY;YACZ,IAAI;YACJ,SAAS;YACT,UAAU;YACV,aAAa;YACb,4BAA4B;YAC5B,WAAW;YACX,SAAS;YACT,eAAe;YACf,iBAAiB;YACjB,UAAU;SACb,CAAC;AAEF,QAAA,OAAO,OAAO,CAAC;KAClB;AAED,IAAA,YAAY,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAClC;IAED,UAAU,CAAC,sBAAsB,GAAG,KAAK,EAAA;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAExC,QAAA,IAAI,sBAAsB,EAAE;YACxB,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACpC,SAAA;KACJ;AAED,IAAA,OAAO,CAAC,WAAA,GAAuB,KAAK,EAAE,QAAiB,KAAK,EAAA;AACxD,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,aAAA;AACD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,2BAA6C,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9E,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;AACV,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;gBACxB,OAAO;AACV,aAAA;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,SAAA;KACJ;AAED;;AAEG;IACH,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjF,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtB,SAAS;AACZ,aAAA;AACD,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE;AACrB,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AAChE,oBAAA,OAAO,IAAI,CAAC;AACf,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAES,IAAA,yBAAyB,CAAsC,KAAQ,EAAE,aAAwC,EACvH,OAAiB,EAAA;AACjB,QAAA,MAAM,EACF,KAAK,EACL,MAAM,EACN,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,UAAU,EACV,WAAW,EAAE,iBAAiB,EAC9B,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,GAClB,GAAG,OAAO,EACP,YAAY,GAAiC,EAAE,CAAC;QAEpD,IAAI,KAAK,CAAC,MAAM,EAAE;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,EACzE,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,EACzD,UAAU,IAAI,wBAAwB,GAAG,UAAU,GAAG,CAAC,CAAC,EACxD,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,EAAE,wBAAwB,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACzH,YAAA,IAAI,GAAG,GAAG,aAAa,EACnB,WAAW,GAAG,iBAAiB,EAC/B,UAA8C,EAAE,UAA8C,EAAE,eAAe,GAAG,CAAC,CAAC,EACpH,cAAc,GAAG,CAAC,EAAE,aAAiD,EAAE,aAAiD,EACxH,kBAAkB,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AAE9D,YAAA,IAAI,IAAI,EAAE;AACN,gBAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,GAAG,yBAAyB,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAChH,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,cAAc,EAAE;wBACjB,SAAS;AACZ,qBAAA;AACD,oBAAA,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,EAC9F,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI,EAClD,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,KAAK,EACrD,IAAI,GAAG,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,GAAG,eAAe,GAAG,eAAe,EAC1G,qBAAqB,GAAG,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,EACxD,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,EAAE,4BAA4B,GAAG,EAAE,UAAU,KAAK,CAAC,GAAG,qBAAqB,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,EAC/I,mBAAmB,GAAG,UAAU,IAAI,4BAA4B,GAAG,IAAI,CAAC,EACxE,0BAA0B,IAAI,4BAA4B,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;oBAC7I,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,QAAQ,GAAmC;4BACvC,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,qBAAqB;4BACrD,CAAC,EAAE,UAAU,GAAG,qBAAqB,GAAG,aAAa;4BACrD,KAAK,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI;4BAC9C,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,oBAAoB;4BAChD,IAAI;AACJ,4BAAA,QAAQ,EAAE,GAAG;4BACb,UAAU;4BACV,UAAU;4BACV,qBAAqB;4BACrB,4BAA4B;4BAC5B,mBAAmB;4BACnB,0BAA0B;4BAC1B,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,GAAG,MAAM,KAAK,CAAC,GAAG,wBAAwB,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC;AAClH,yBAAA,EAAE,MAAM,GAAiC;AACtC,4BAAA,GAAG,EAAG,KAAe,GAAG,MAAM,CAAC,KAAK,IAAI;AACxC,4BAAA,GAAG,EAAE,KAAK;4BACV,IAAI,EAAE,CAAC,KAAK;4BACZ,UAAU;4BACV,WAAW;4BACX,UAAU;4BACV,MAAM;4BACN,IAAI;AACJ,4BAAA,OAAO,EAAE,IAAI;AACb,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,OAAO,EAAE,WAAW;4BACpB,wBAAwB;AACxB,4BAAA,QAAQ,EAAE,KAAK;AACf,4BAAA,MAAM,EAAE,GAAG;yBACd,CAAC;wBAEN,MAAM,QAAQ,GAAM,cAAc,CAAC;AAEnC,wBAAA,UAAU,GAAG;AACT,4BAAA,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAClF,4BAAA,QAAQ,EAAE,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM;yBAC1D,CAAC;wBACF,eAAe,GAAG,CAAC,CAAC;wBACpB,cAAc,GAAG,IAAI,CAAC;AAEtB,wBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9B,wBAAA,KAAK,EAAE,CAAC;wBACR,MAAM;AACT,qBAAA;AACJ,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,IAAI,EAAE;gBACN,MAAM,EAAE,GAAG,yBAAyB,GAAG,oBAAoB,GAAG,CAAC,EAAE,UAAU,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC/F,gBAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnG,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,cAAc,EAAE;wBACjB,SAAS;AACZ,qBAAA;oBACD,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,EAC9F,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI,EAClD,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,KAAK,EACrD,IAAI,GAAG,WAAW;AACd,0BAAE,KAAK,GAAG,YAAY,CAAC,IAAI,eAAe;0BACxC,eAAe,CAAC;oBAC1B,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,CAAC,GAAG,UAAU,GAAG,mBAAmB,GAAG,IAAI,EAAE,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,oBAAoB,EACzF,qBAAqB,GAAG,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,EAAE,4BAA4B,GAAG,EAAE,UAAU,KAAK,CAAC,GAAG,qBAAqB,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,EACzM,mBAAmB,GAAG,UAAU,IAAI,4BAA4B,GAAG,IAAI,CAAC,EACxE,0BAA0B,IAAI,4BAA4B,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,EACxI,QAAQ,GAAmC;4BACvC,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,wBAAwB,GAAG,CAAC;4BAChD,CAAC,EAAE,UAAU,GAAG,wBAAwB,GAAG,CAAC,GAAG,CAAC;4BAChD,IAAI;AACJ,4BAAA,QAAQ,EAAE,GAAG;4BACb,UAAU;4BACV,UAAU;4BACV,qBAAqB;4BACrB,4BAA4B;4BAC5B,mBAAmB;4BACnB,0BAA0B;AAC1B,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,KAAK,EAAE,wBAAwB,GAAG,UAAU,GAAG,IAAI;AACtD,yBAAA,EAAE,MAAM,GAAiC;AACtC,4BAAA,GAAG,EAAG,KAAe,GAAG,MAAM,CAAC,KAAK,IAAI;AACxC,4BAAA,GAAG,EAAE,KAAK;4BACV,IAAI,EAAE,CAAC,KAAK;4BACZ,UAAU;4BACV,WAAW;4BACX,UAAU;4BACV,MAAM;4BACN,IAAI;AACJ,4BAAA,OAAO,EAAE,IAAI;AACb,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,OAAO,EAAE,WAAW;4BACpB,wBAAwB;4BACxB,QAAQ,EAAE,KAAK,CAAC,MAAM;AACtB,4BAAA,MAAM,EAAE,GAAG;yBACd,CAAC;wBAEN,MAAM,QAAQ,GAAM,cAAc,CAAC;AAEnC,wBAAA,aAAa,GAAG;AACZ,4BAAA,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAClF,4BAAA,QAAQ,EAAE,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM;yBAC1D,CAAC;wBACF,kBAAkB,GAAG,CAAC,CAAC;wBACvB,iBAAiB,GAAG,IAAI,CAAC;AAEzB,wBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACjC,MAAM;AACT,qBAAA;AACJ,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,GAAG,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC;YAEnC,OAAO,WAAW,GAAG,CAAC,EAAE;AACpB,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,IAAI,UAAU,GAAG,WAAW,IAAI,CAAC,IAAI,WAAW,EAAE;oBAC9C,MAAM;AACT,iBAAA;AACD,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,cAAc,EAAE;oBACjB,SAAS;AACZ,iBAAA;AAED,gBAAA,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,EACrD,IAAI,GAAG,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC,IAAI,eAAe,GAAG,eAAe,CAAC;AAEpF,gBAAA,IAAI,CAAC,wBAAwB,IAAI,EAAE,KAAK,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,EAAE,EAAE;AACjF,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,EACvC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI,EAClD,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,KAAK,EACrD,OAAO,GAAG,IAAI,KAAK,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,EAC5I,qBAAqB,GAAG,GAAG,GAAG,UAAU,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,EAAE,4BAA4B,GAAG,EAAE,UAAU,KAAK,CAAC,GAAG,qBAAqB,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,EACzL,mBAAmB,GAAG,UAAU,IAAI,4BAA4B,GAAG,IAAI,CAAC,EACxE,0BAA0B,IAAI,4BAA4B,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,EACxI,QAAQ,GAAmC;wBACvC,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,GAAG;wBACvB,CAAC,EAAE,UAAU,GAAG,GAAG,GAAG,CAAC;wBACvB,IAAI;AACJ,wBAAA,QAAQ,EAAE,GAAG;wBACb,UAAU;wBACV,UAAU;wBACV,qBAAqB;wBACrB,4BAA4B;wBAC5B,mBAAmB;wBACnB,0BAA0B;wBAC1B,KAAK,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI;wBAC9C,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,oBAAoB;wBAChD,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,qBAAqB,GAAG,MAAM,KAAK,CAAC,GAAG,wBAAwB,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC;AAChH,qBAAA,EAAE,MAAM,GAAiC;AACtC,wBAAA,GAAG,EAAG,KAAe,GAAG,MAAM,CAAC,KAAK,IAAI;AACxC,wBAAA,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE,CAAC,KAAK;wBACZ,UAAU;wBACV,WAAW;wBACX,UAAU;AACV,wBAAA,MAAM,EAAE,MAAM;wBACd,IAAI;AACJ,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,OAAO,EAAE,WAAW;wBACpB,wBAAwB;AACxB,wBAAA,QAAQ,EAAE,KAAK;wBACf,MAAM,GAAG,wBAAwB,IAAI,EAAE,KAAK,UAAU,EAAE,EAAE,CAAC;AAC3D,wBAAA,MAAM,EAAE,GAAG;qBACd,CAAC;AAEN,oBAAA,KAAK,EAAE,CAAC;AAER,oBAAA,IAAI,OAAO,EAAE;AACT,wBAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AACvB,qBAAA;oBAED,MAAM,QAAQ,GAAM,cAAc,CAAC;AAEnC,oBAAA,MAAM,IAAI,GAA2B;AACjC,wBAAA,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAClF,wBAAA,QAAQ,EAAE,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM;qBAC1D,CAAC;oBACF,IAAI,CAAC,UAAU,IAAI,eAAe,GAAG,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,cAAc,CAAC,EAAE;wBAC7H,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,qBAAqB,GAAG,GAAG,CAAC;wBACzE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,OAAO,GAAG,qBAAqB,GAAG,GAAG,GAAG,CAAC,CAAC;wBACzE,UAAU,GAAG,IAAI,CAAC;AAClB,wBAAA,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;wBACpC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AAC1F,wBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AAClC,qBAAA;oBACD,IAAI,CAAC,aAAa,IAAI,kBAAkB,GAAG,CAAC,IAAI,MAAM,KAAK,CAAC;yBACvD,GAAG,IAAI,wBAAwB,GAAG,IAAI,GAAG,iBAAiB,CAAC,EAAE;wBAC9D,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,wBAAwB,GAAG,IAAI,GAAG,GAAG,CAAC;wBACnF,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,OAAO,GAAG,wBAAwB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;wBACnF,aAAa,GAAG,IAAI,CAAC;AACrB,wBAAA,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AAClC,wBAAA,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;wBACvC,aAAa,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AAChG,qBAAA;AAED,oBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,iBAAA;gBAED,WAAW,IAAI,CAAC,CAAC;gBACjB,GAAG,IAAI,IAAI,CAAC;AACZ,gBAAA,CAAC,EAAE,CAAC;AACP,aAAA;YAED,MAAM,IAAI,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAEpD,YAAA,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,qBAAqB,GAAG,cAAc,EAAE;gBACrG,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,cAAc,EAAE;AACzD,oBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;AACvE,oBAAA,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9D,oBAAA,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AACpC,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7B,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AACzG,iBAAA;AAAM,qBAAA;AACH,oBAAA,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACjC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AACtG,oBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC7F,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa;AAClC,iBAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,wBAAwB,GAAG,iBAAiB,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;AACvH,gBAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAChG,oBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACnG,oBAAA,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACpE,oBAAA,aAAa,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AACvC,oBAAA,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChC,aAAa,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AAClH,iBAAA;AAAM,qBAAA;AACH,oBAAA,aAAa,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,oBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBAC/F,aAAa,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC;AAC/G,oBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtG,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,YAAY,CAAC;KACvB;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;AAE9B,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAEtC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAExB,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;AAED;;AAEG;IACH,KAAK,GAAA;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1C,OAAO;AACV,SAAA;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;KACnH;AAED,IAAA,4BAA4B,CAAC,CAA2B,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,yBAAyB,GAAG,CAAC,CAAC;KAC/C;AAED,IAAA,4BAA4B,CAAC,SAAyB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;KACzD;AAED,IAAA,aAAa,CAAC,EAAM,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAMS,aAAa,CAAC,UAAmB,EAAE,QAAgB,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,OAAO;AACV,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjF,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtB,SAAS;AACZ,aAAA;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACb,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM;AAC9B,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC;AAClD,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC;AACvD,aAAA,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,CAAC;AAC7C,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,IAAI,CAAC,CAAC,KAAK,EAAE;AACT,YAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;AACpB,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACjC,SAAA;KACJ;IAED,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KAC1B;IAEQ,OAAO,GAAA;QACZ,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,2BAA2B,EAAE,CAAC;AAEnC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,0BAA0B,EAAE;AACnC,YAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,CAAC;AAC7C,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC3B,SAAA;KACJ;AACJ;;AChxCD;;;;;AAKG;AACH,IAAY,wBAaX,CAAA;AAbD,CAAA,UAAY,wBAAwB,EAAA;AAChC;;AAEG;AACH,IAAA,wBAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,wBAAA,CAAA,wBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV;;AAEG;AACH,IAAA,wBAAA,CAAA,wBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AACpB,CAAC,EAbW,wBAAwB,KAAxB,wBAAwB,GAanC,EAAA,CAAA,CAAA;;ACnBM,MAAM,UAAU,GAAG,YAAY,EAClC,qBAAqB,GAAG,CAAC,KAAa,KAAI;AACtC,IAAA,OAAO,CAAI,CAAA,EAAA,UAAU,CAAK,EAAA,EAAA,KAAK,IAAI,CAAC;AACxC,CAAC,EACD,eAAe,GAAG,MAAK;IACnB,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,CAAC;AAC7B,CAAC;;ACNE,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,EAAU,KAAI;AAC1D,IAAA,OAAO,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,EAAE,EAAE,CAAC;AAC7B,CAAC;;ACFD,MAAM,aAAa,GAAG,CAAU,KAAQ,KAAI;IACxC,OAAO,KAAK,KAAK,SAAS,CAAC;AAC/B,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAU,KAAQ,KAAI;IACrC,OAAO,KAAK,KAAK,IAAI,CAAC;AAC1B,CAAC,CAAA;AAED;;;AAGG;AACI,MAAM,WAAW,GAAG,CAAC,KAAyB,EAAE,WAAW,GAAG,KAAK,KAAI;IAC1E,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAE,WAAW,GAAG,KAAK,KAAI;IAC5E,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,cAAc,GAAG,CAAC,KAAgC,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,KAAI;IACtG,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACjH,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,KAA0B,EAAE,WAAW,GAAG,KAAK,KAAI;AAC/E,IAAA,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,OAAO,KAAK,KAAK,SAAS,CAAC;AAC/E,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,aAAa,GAAG,CAAU,KAAkC,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,KAAI;IAChH,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5G,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,cAAc,GAAG,CAAU,KAAoC,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,KAAI;IACnH,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACjH,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,gBAAgB,GAAG,CAAU,KAAoC,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,KAAI;IACrH,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;AACnH,CAAC;;AC1DM,MAAM,uBAAuB,GAAG,CAAC,KAAa,KAAI;AACrD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,KAAK,CAAC;AAC5H,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC,EACG,UAAU,GAAG,CAAC,EAAM,KAAI;IACpB,MAAM,KAAK,GAAG,cAAc,CAAC,EAAY,CAAC,IAAI,aAAa,CAAC,EAAY,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC3D,KAAA;AACL,CAAC,EACD,sBAAsB,GAAG,CAAC,QAAwD,KAAI;IAClF,MAAM,KAAK,GAAG,cAAc,CAAC,QAAkB,CAAC,KAAK,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC7H,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,MAAM,KAAK,CAAC,6EAA6E,CAAC,CAAC;AAC9F,KAAA;AACL,CAAC,EACD,iBAAiB,GAAG,CAAC,SAA6B,KAAI;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,MAAM,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACtE,KAAA;AACL,CAAC,EACD,sBAAsB,GAAG,CAAC,KAAqB,KAAI;IAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAe,CAAC,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC;IAClI,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,MAAM,KAAK,CAAC,+EAA+E,CAAC,CAAC;AAChG,KAAA;AACL,CAAC;;AC5BE,MAAM,mBAAmB,GAAG,CAAC,EAAM,KAAI;AAC1C,IAAA,OAAO,CAAI,CAAA,EAAAA,SAAO,CAAK,EAAA,EAAA,EAAE,IAAI,CAAC;AAClC,CAAC;;ACgBD;;;;;;;AAOG;MAIU,oBAAoB,CAAA;AA+J/B,IAAA,WAAA,GAAA;AA9JU,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEtC,IAAG,CAAA,GAAA,GAAW,CAAC,CAAC;QAGhB,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;AAE7B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAsC,CAAC;AACxE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAErC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAIC,iBAAe,CAAwB,IAAI,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAIA,iBAAe,CAAY,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAE3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAIA,iBAAe,CAA2B,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAMrD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAIA,iBAAe,CAAY,IAAI,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAGrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAmB,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAA+B,CAAC;AACvD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAE5C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAA8B,CAAC;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAA8B,CAAC;AACzD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAElD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAIA,iBAAe,CAAS,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAE5D,IAAO,CAAA,OAAA,GAAW,sBAAsB,CAAC;QAEzC,IAAiB,CAAA,iBAAA,GAAW,CAAC,CAAC,CAAC;QAE/B,IAAiB,CAAA,iBAAA,GAAW,CAAC,CAAC;QAE9B,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC;QAE5B,IAAa,CAAA,aAAA,GAAY,uBAAuB,CAAC;QAEjD,IAAe,CAAA,eAAA,GAAY,yBAAyB,CAAC;QAErD,IAAgB,CAAA,gBAAA,GAA4B,IAAI,CAAC;QAEjD,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAE3B,IAAO,CAAA,OAAA,GAAY,IAAI,CAAC;QAExB,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QAEnC,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;QAEjC,IAAe,CAAA,eAAA,GAAqB,wBAAwB,CAAC;QAI7D,IAAW,CAAA,WAAA,GAA0B,IAAI,CAAC;AAElC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAIA,iBAAe,CAA+B,EAAE,CAAC,CAAC;AACtE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAGpD,IAAW,CAAA,WAAA,GAAiC,EAAE,CAAC;QAY/C,IAAa,CAAA,aAAA,GAAG,IAAIA,iBAAe,CAAgB,cAAc,CAAC,GAAG,CAAC,CAAC;AACtE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAGlD,QAAA,IAAA,CAAA,YAAY,GAAkB,cAAc,CAAC,GAAG,CAAC;QAajD,IAAc,CAAA,cAAA,GAAW,CAAC,CAAC;QAU3B,IAAe,CAAA,eAAA,GAAG,IAAIA,iBAAe,CAAS,IAAI,CAAC,cAAc,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAIA,iBAAe,CAAS,sBAAsB,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAGtD,IAAc,CAAA,cAAA,GAAW,sBAAsB,CAAC;QAWhD,IAAc,CAAA,cAAA,GAAG,MAAK;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACrB,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,CAAS,KAAI;AAC/C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;AAmBA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC3B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,QAAQ,CAAC;AACP,gBAAA,KAAK,wBAAwB,CAAC,MAAM,EAAE;oBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACxD,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,qBAAA;oBACD,MAAM;AACP,iBAAA;AACD,gBAAA,KAAK,wBAAwB,CAAC,YAAY,EAAE;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;AACjD,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,qBAAA;oBACD,MAAM;AACP,iBAAA;gBACD,KAAK,wBAAwB,CAAC,IAAI,CAAC;AACnC,gBAAA,SAAS;AACP,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM;AACP,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IArLD,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;IAgB7B,IAAI,iBAAiB,CAAC,CAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAClC;IAID,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAkDvD,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;IAG7D,IAAI,UAAU,CAAC,CAA+B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;YAC1B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAErB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7B;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IAI7C,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAG3D,IAAI,WAAW,CAAC,CAAgB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAEtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5B;IAED,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE;IAG/D,IAAI,aAAa,CAAC,CAAS,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;YAC7B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC9B;IAMD,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE;IAG/D,IAAI,aAAa,CAAC,CAAS,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;YAC7B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAExB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC9B;IAUD,IAAI,WAAW,CAAC,GAA0B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;AACzE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,SAAA;KACF;IAED,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAE3D,IAAI,YAAY,CAAC,GAAc,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;KACF;IAED,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;AA8B7D,IAAA,SAAS,CAAC,IAAmC,EAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAI,IAAY,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC;AACpE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnB,SAAA;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAI,IAAY,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC;AACpE,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACjB,SAAA;KACF;AAED,IAAA,MAAM,CAAC,WAAA,GAAuB,KAAK,EAAE,QAAiB,KAAK,EAAA;QACzD,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC7C;AAEO,IAAA,aAAa,CAAC,EAAM,EAAA;AAC1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,IAAG;gBAC9B,MAAM,GAAG,GAAI,IAAY,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC;gBAC7C,OAAO,GAAG,KAAK,EAAE,CAAC;AACpB,aAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;AAIG;IACH,MAAM,CAAC,EAAM,EAAE,QAAkB,EAAA;QAC/B,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,GAAG;AACnC,YAAA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;AACzC,gBAAA,KAAK,wBAAwB,CAAC,MAAM,EAAE;oBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAsB,CAAC;oBAC/D,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/C,qBAAA;oBACD,MAAM;AACP,iBAAA;AACD,gBAAA,KAAK,wBAAwB,CAAC,YAAY,EAAE;oBAC1C,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAc,CAAC,EAClE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,wBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,4BAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtB,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACxC,yBAAA;AACF,qBAAA;AAAM,yBAAA,IAAI,QAAQ,EAAE;AACnB,wBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACxC,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,4BAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtB,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,yBAAA;AACF,qBAAA;oBACD,MAAM;AACP,iBAAA;gBACD,KAAK,wBAAwB,CAAC,IAAI,CAAC;AACnC,gBAAA,SAAS;AACP,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED;;;;AAII;IACJ,QAAQ,CAAC,EAAM,EAAE,SAAmB,EAAA;QAClC,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,GAAG;YACzD,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAc,CAAC,EACnE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,SAAS,EAAE;AACpB,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,qBAAqB,CAAC,EAAM,EAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAiB,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,CAAC,EAAE,EAAE;YACR,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAiB,CAAI,CAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;YACzE,IAAI,CAAC,CAAC,SAAS,EAAE;AACf,gBAAA,OAAO,SAAS,CAAC;AAClB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,EAAM,EAAA;QAClB,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;KAClD;AAED;;AAEG;IACH,SAAS,CAAC,EAAM,EAAE,KAAA,GAAwB,eAAe,CAAC,IAAI,EAAE,cAAA,GAAiC,MAAM,EAAA;QACrG,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,EAAE,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AACvC,SAAA;KACF;IAED,KAAK,CAAC,OAAoB,EAAE,KAAA,GAAwB,eAAe,CAAC,MAAM,EAAE,QAAA,GAA2B,aAAa,EAAA;QAClH,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAiB,eAAe,EAAE,CAAC,EACpF,MAAM,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/F,IAAI,MAAM,GAAG,MAAM;AAAE,gBAAA,OAAO,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM;gBAAE,OAAO,CAAC,CAAC,CAAC;AAC/B,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;QACL,IAAI,OAAO,GAA4B,SAAS,CAAC;AACjD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE;gBACrB,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM;AACP,aAAA;AACF,SAAA;QACD,IAAI,CAAC,CAAC,OAAO,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC/D,SAAA;KACF;AAED,IAAA,SAAS,CAAC,EAAa,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC3B;IAED,UAAU,CAAC,EAAU,EAAE,QAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACvF;IAED,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,gBAAgB;cAC5E,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;KACnC;AAED;;AAEI;AACJ,IAAA,QAAQ,CAAC,EAAM,EAAE,KAA0B,IAAI,EAAE,UAAiC,IAAI,EAAA;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;KAC3C;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,OAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACpC;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,OAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAClC;IAED,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC/B,SAAA;KACF;;iHAvZU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACtBD;;;;;;;AAOG;MAIU,0BAA0B,CAAA;AAHvC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AA8GzD,KAAA;AA5GC;;AAEG;IACH,IAAI,EAAE,GAAa,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;AAErD;;AAEG;IACH,IAAI,UAAU,GAAqD,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;;AAE7G;;AAEG;IACH,IAAI,YAAY,GAAwC,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;;AAEpG;;AAEG;IACH,IAAI,aAAa,GAA4B,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE;;AAE1F;;AAEG;IACH,IAAI,UAAU,GAAkC,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;;AAE1F;;AAEG;IACH,IAAI,KAAK,GAAuB,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;;AAErE;;AAEG;IACH,IAAI,WAAW,CAAC,GAA0B,EAAA;AACxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,GAAG,CAAC;KACzC;AAED;;AAEG;IACH,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;AAE/D;;AAEG;IACH,IAAI,YAAY,CAAC,GAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,GAAG,CAAC;KAC1C;AAED;;AAEG;IACH,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;AAEjE;;;;AAIG;AACH,IAAA,MAAM,CAAC,WAAA,GAAuB,KAAK,EAAE,QAAiB,KAAK,EAAA;QACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAClD;AAED;;;;AAIG;AACH,IAAA,MAAM,CAAC,EAAM,EAAE,QAAA,GAAgC,SAAS,EAAA;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;KAC5C;AAED;;;;AAII;AACJ,IAAA,QAAQ,CAAC,EAAM,EAAE,SAAA,GAAiC,SAAS,EAAA;QACzD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;KAC/C;AAED;;AAEG;IACH,KAAK,CAAC,EAAM,EAAE,KAAA,GAAwB,eAAe,CAAC,IAAI,EAAE,cAAA,GAAiC,MAAM,EAAA;AACjG,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;KAClE;AAED;;AAEI;AACJ,IAAA,QAAQ,CAAC,EAAM,EAAE,KAA0B,IAAI,EAAE,UAAiC,IAAI,EAAA;QACpF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;KACjD;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,OAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC9C;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,OAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KAC5C;;uHA9GU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AChBD;;;;;AAKG;MAIU,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIc,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AAQjD,KAAA;IANG,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AACjC,SAAA;KACJ;;gHARQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,oDAFlB,CAAE,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAE,CAAA;AACf,iBAAA,CAAA;;;ACSD;;;;;AAKG;AACG,MAAOC,8BAA6B,SAAQ,mBAAmB,CAAA;AAgHnE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAhHF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEjD,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAiBjC,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAE7B,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAE9B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAuB,EAA0B,CAAC,CAAC;AAC3F,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAE7B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAgC,IAAI,CAAC,CAAC;AAChF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAE/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAS,iBAAiB,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAEzB,IAAK,CAAA,KAAA,GAAkC,IAAI,CAAC;QAEnC,IAAM,CAAA,MAAA,GAAG,IAAI,eAAe,CAAgC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAoB9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAgC,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAE7B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAmB,wBAAwB,CAAC,CAAC;AAC5F,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAElD,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QAEtB,IAAc,CAAA,cAAA,GAAW,CAAC,CAAC;AAE3B,QAAA,IAAA,CAAA,YAAY,GAAkB,cAAc,CAAC,GAAG,CAAC;QAEjD,IAAc,CAAA,cAAA,GAAW,gBAAgB,CAAC;AA+B1C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;QAOlE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EACtB,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE3B,aAAa,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,KAAI;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,CAAC,kBAAkB,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,sBAAsB,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;gBACjH,CAAC,gBAAgB,GAAG,OAAO;AAC5B,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,OAAO,CAAC,IAAI,CACV,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAM,IAAG;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5C,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAC7C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAI;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ;AACnF,gBAAA,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW;AACzE,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;AA7ID,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;AAGD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAGD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAmBD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IAIjC,IAAI,IAAI,CAAC,CAAgC,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;YACnD,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAEf,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAErB,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,CAAC,MAAM,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACrB;IAkBD,IAAI,aAAa,CAAC,CAAS,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;YAC7B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;KACvB;IAID,IAAI,QAAQ,CAAC,CAA+B,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1B;AAGD,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;KACvC;AAyCS,IAAA,cAAc,CAAC,CAAqC,EAAA;QAC5D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;KAC7D;AAES,IAAA,YAAY,CAAC,CAAqC,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,GAAG,CAAC,EAAE,MAAM,IAAI,EAA0B,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzI,SAAA,CAAC,CAAC;KACJ;IAES,MAAM,GAAA;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACnH,QAAA,IAAI,IAAI,EAAE;YACR,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,IAAI,CAAC,EAAE,CAAE,CAAA,CAAC,CAAC;AACvC,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;YACxB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,YAAA,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AACpC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;AAC/B,gBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC;AACzC,aAAA;AACD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACzC,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAG,EAAAH,IAAE,CAAK,EAAA,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAG,EAAAA,IAAE,CAAK,EAAA,EAAA,aAAa,GAAG,CAAC;AAC/O,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC;gBAC3F,MAAM,CAAC,SAAS,GAAG,CAAA,EAAG,YAAY,CAAI,CAAA,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA,EAAGA,IAAE,CAAK,EAAA,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAGA,IAAE,CAAA,EAAA,EAAK,aAAa,CAAA,CAAA,CAAG,CAAC;AACpK,aAAA;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EAAAA,IAAE,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC;YAChJ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAG,EAAAA,IAAE,EAAE,CAAC;AAC/I,SAAA;AAAM,aAAA;AACL,YAAA,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;KACF;AAES,IAAA,aAAa,CAAC,CAAgC,EAAE,UAAmB,EAAE,WAAoB,EAAA;QACjG,IAAI,GAAG,GAAG,KAAK,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,KAAK,KAAK,SAAS,EAAE;YAC1B,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,SAAA;QAED,IAAI,IAAI,GAAG,iBAAiB,CAAC;QAC7B,IAAI,IAAI,GAAG,GAAG,aAAa,GAAG,cAAc,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,EAAE;YAChC,IAAI,IAAI,iBAAiB,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,UAAU,EAAE;YACd,IAAI,IAAI,kBAAkB,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,WAAW,EAAE;YACf,IAAI,IAAI,mBAAmB,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE;YAC5B,IAAI,IAAI,aAAa,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YAC7B,IAAI,IAAI,iBAAiB,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;IAED,SAAS,GAAA;AACP,QAAA,MAAM,EAAE,GAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,EACpD,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACjD,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC;KAC3E;IAED,IAAI,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAA4B,EACtD,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;AACpB,QAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,cAAc,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE;gBACpC,OAAO;AACR,aAAA;AAED,YAAA,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;AAChC,SAAA;AAAM,aAAA;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,MAAM,CAAC,UAAU,KAAK,kBAAkB,EAAE;oBAC5C,OAAO;AACR,iBAAA;AACD,gBAAA,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAAC;AACxC,aAAA;AACF,SAAA;KACF;IAED,IAAI,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EACvC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;AACpB,QAAA,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AACpC,QAAA,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;AACvC,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE;gBACnC,OAAO;AACR,aAAA;AAED,YAAA,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,iBAAiB,EAAE;gBAC3C,OAAO;AACR,aAAA;AAED,YAAA,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC;AACvC,SAAA;KACF;AACF;;ACxRD,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;AAOG;MAIU,kBAAkB,CAAA;AAa3B,IAAA,WAAA,CAAoB,WAAuB,EAAA;QAAvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAZjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEtC,IAAY,CAAA,YAAA,GAAG,oBAAoB,CAAC;AAQ5C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAII,cAAY,EAA6B,CAAC;AAGpD,QAAA,MAAM,eAAe,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,EAC1F,cAAc,GAAG,IAAI,CAAC;AAClB,YAAA,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/BC,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC;AACD,YAAA,SAAS,CAAe,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,CAChDA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC;AACJ,SAAA,CAAC,EACF,eAAe,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAE/G,QAAA,eAAe,CAAC,IAAI,CAChBA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,SAAS,CAAC,CAAC,IAAG;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EACzB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAA,OAAO,eAAe,CAAC,IAAI,CACvBA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CACL,IAAI,CAAC;gBACD,cAAc;AACd,gBAAA,SAAS,CAAe,MAAM,EAAE,aAAa,CAAC,CAAC,IAAI,CAC/CA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,SAAS,CAAC,CAAC,IAAG;oBACV,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9B,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAExD,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAC1B,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,qBAAA;AAED,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACrB,iBAAC,CAAC,EACFA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACnB;AACJ,aAAA,CAAC,CACL,EACDA,WAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,KAAG,CAAC,CAAC,IAAG;AACJ,gBAAA,IAAI,CAAC,EAAE;AACH,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,iBAAA;aACJ,CAAC,CACL,CAAC;AACN,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;KACjB;IAzDD,IACI,WAAW,CAAC,CAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC;KAC5D;IAwDD,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AACjC,SAAA;KACJ;;+GArEQ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,kBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AAC1B,iBAAA,CAAA;iGAOO,WAAW,EAAA,CAAA;sBADd,KAAK;uBAAC,kBAAkB,CAAA;gBAMzB,OAAO,EAAA,CAAA;sBADN,MAAM;;;ACVX;;;;;;;AAOG;AAWG,MAAO,0BAA2B,SAAQH,8BAA4B,CAAA;AAM1E,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AANF,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAS,sBAAsB,CAAC,CAAC;AACjF,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;KAItC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAC/B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC7B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAC/B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC1B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EACtB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE3B,QAAA,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACtE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE;YAEX,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,IAAI,CAC3C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE3B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE9B,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACtE,aAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEhB,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,EAC9FI,WAAS,CAAC,CAAC,IAAG;AACZ,YAAA,IAAI,CAAC,EAAE;AACL,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACnB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACpH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,EACrF,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,KAAI;AAC5C,YAAA,QAAQ,MAAM;AACZ,gBAAA,KAAK,wBAAwB,CAAC,MAAM,EAAE;oBACpC,MAAM,EAAE,GAAG,WAA6B,EAAE,UAAU,GAAG,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AAC1E,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAClE,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;oBAC9B,MAAM;AACP,iBAAA;AACD,gBAAA,KAAK,wBAAwB,CAAC,YAAY,EAAE;oBAC1C,MAAM,SAAS,GAAG,WAAwB,EAAE,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnI,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAClE,oBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;oBAC9B,MAAM;AACP,iBAAA;gBACD,KAAK,wBAAwB,CAAC,IAAI,CAAC;AACnC,gBAAA,SAAS;AACP,oBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACjD,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,MAAM;AACP,iBAAA;AACF,aAAA;YAED,MAAM,SAAS,GAAG,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxH,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AAEhC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAE9D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE9B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IAEO,OAAO,GAAA;QACb,OAAO,SAAS,CAAgB,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAChE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CAAC,CAAC,IAAG;YACZ,QAAQ,CAAC,CAAC,GAAG;gBACX,KAAK,SAAS,EAAE;oBACd,CAAC,CAAC,wBAAwB,EAAE,CAAC;oBAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC;wBACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC;AACzC,qBAAA;oBACD,MAAM;AACP,iBAAA;AACD,gBAAA,KAAK,YAAY;oBACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE;AACxC,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,UAAU;oBACb,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE;AACvC,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,aAAa;oBAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE;AACxC,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,YAAY;oBACf,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE;AACvC,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,qBAAA;oBACD,MAAM;AACT,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB,CAAC,CACH,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,CAAQ,EAAA;AACzB,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;YACvB,CAAC,CAAC,wBAAwB,EAAE,CAAC;YAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACpB,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,EAC9FD,WAAS,CAAC,MAAK;AACb,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB,CAAC,CACH,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,CAAQ,EAAA;AACzB,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;YACvB,CAAC,CAAC,wBAAwB,EAAE,CAAC;YAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACpB,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,EAC9FD,WAAS,CAAC,MAAK;AACb,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB,CAAC,CACH,CAAC;KACH;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;YACnG,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,OAAO,KAAK,IAAI,MAAM,EAAE;AACtB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAiB,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtG,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,iBAAiB,EAAE;oBAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7C,oBAAA,IAAI,OAAO,EAAE;AACX,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,OAAO,KAAK,IAAI,CAAC,EAAE;AACjB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAiB,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtG,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;IAEO,KAAK,CAAC,QAAwB,eAAe,CAAC,MAAM,EAAE,KAAA,GAAgB,CAAC,CAAC,EAAA;AAC9E,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,QAAQ,CAAC;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAiB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;KACF;AAEkB,IAAA,YAAY,CAAC,CAAqC,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,GAAG,CAAC,EAAE,MAAM,IAAI,EAA0B,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzI,SAAA,CAAC,CAAC;KACJ;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;;uHArPU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+JCnCvC,qlBASe,EAAA,MAAA,EAAA,CAAA,oWAAA,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,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,EAAAE,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD0BF,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAG1B,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,MAAM,EAAE,UAAU;qBACnB,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qlBAAA,EAAA,MAAA,EAAA,CAAA,oWAAA,CAAA,EAAA,CAAA;;;AE/BjD,MAAM,iBAAiB,GAA0B,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,EACzH,eAAe,GAA0B,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE7E,MAAM,wBAAwB,GAAG,CAAC,MAAsB,KAAa;AACxE,IAAA,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAA;AAEM,MAAM,uBAAuB,GAAG,CAAC,MAAsB,KAAa;AACvE,IAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;;ACTD,MAAM,kBAAkB,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,EAC5D,gBAAgB,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEzD;;;;;AAKG;AACI,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,QAAmB,KAAa;AACxE,IAAA,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACvC,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3C,KAAA;AACD,IAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;;ACdD,MAAM,YAAY,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,EACnD,cAAc,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACvD,oBAAoB,GAAG,CAAC,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAE9E;;;;;AAKG;AACI,MAAM,oBAAoB,GAAG,CAAC,GAAuB,EAAE,QAA4B,KAAa;AACnG,IAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACjC,QAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,KAAA;AAAM,SAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1C,QAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvC,KAAA;AACD,IAAA,OAAO,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;;ACnBM,MAAM,gBAAgB,GAAG,CAA8C,MAAS,KAAI;IACvF,IAAI,CAAC,MAAM,EAAE;AACT,QAAA,OAAO,MAAM,CAAC;AACjB,KAAA;IAED,MAAM,MAAM,GAAG,EAAO,CAAC;AACvB,IAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;YAChC,KAAK;AACL,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,IAAI;AACnB,SAAA,CAAC,CAAC;AACN,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAU,MAAS,KAAI;IACtD,IAAI,CAAC,MAAM,EAAE;AACT,QAAA,OAAO,MAAM,CAAC;AACjB,KAAA;AAED,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAiB,CAAC;AACrD,KAAA;AAED,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACnC,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;;AC9BD,MAAM,cAAc,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EACrD,YAAY,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAElD;;;;;AAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,GAAmB,EAAE,QAAwB,KAAa;AACvF,IAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACjC,QAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,KAAA;AACD,IAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;;AChBD,IAAYC,mBAGX,CAAA;AAHD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACzB,CAAC,EAHWA,mBAAiB,KAAjBA,mBAAiB,GAG5B,EAAA,CAAA,CAAA;;ACwBD;;;;;;;AAOG;MACUC,WAAS,CAAA;IAClB,eAAe,CAAC,EACZ,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,GACc,EAAA;AACrB,QAAA,MAAM,UAAU,GAAG,SAAS,KAAKD,mBAAiB,CAAC,QAAQ,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,sBAAsB,GAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,QAAA,IAAI,UAAU,EAAE;YACZ,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/H,sBAAsB,GAAG,WAAW,CAAC;YACrC,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,GAAG,GAAG,CAAC;AACvB,SAAA;AAAM,aAAA;YACH,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7H,sBAAsB,GAAG,WAAW,CAAC;YACrC,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,GAAG,GAAG,CAAC;AACvB,SAAA;QACD,OAAO;YACH,CAAC;YACD,CAAC;YACD,SAAS;YACT,aAAa;YACb,sBAAsB;SACzB,CAAC;KACL;IAEO,UAAU,CAAC,aAAqB,EAAE,YAAoB,EAAE,WAAmB,EAAE,WAAmB,EAAE,SAAiB,EACvH,OAAe,EAAA;AACf,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;AACrC,QAAA,MAAM,EAAE,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,EAAE,EAAE,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,EACzF,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,EAAE,EAC/F,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,GAAG,EAAE,IAAI,CAAC,CAAC,EAC1C,GAAG,GAAG,WAAW,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC,EAC1C,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,EAC1D,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,EACpE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC;QAChE,SAAS,GAAG,GAAG,CAAC;QAChB,aAAa,GAAG,GAAG,CAAC;QACpB,OAAO;AACH,YAAA,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;YACzB,IAAI;YACJ,GAAG;SACN,CAAC;KACL;AAED,IAAA,4BAA4B,CAAC,EACzB,UAAU,EACV,QAAQ,GACqB,EAAA;AAC7B,QAAA,MAAM,GAAG,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC;QACpC,OAAO;AACH,YAAA,QAAQ,EAAE,GAAG;SAChB,CAAC;KACL;AACJ;;AClGD;;;;;AAKG;AACH,IAAY,iBAGX,CAAA;AAHD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACzB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;;ACTD;;;;;AAKG;AACI,MAAM,WAAW,GAAG,CAAC,CAAS,KAAI;AACrC,IAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,CAAS,KAAI;IACpC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;;ACCM,MAAM,0BAA0B,GAAG,GAAG,EAC3C,sBAAsB,GAAG,IAAI,GAAG,EAAE,EAClC,kBAAkB,GAAG,EAAE,CAAC;MAEb,QAAQ,CAAA;AAArB,IAAA,WAAA,GAAA;QACU,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC;KA4ElC;AA1EC,IAAA,OAAO,CAAC,MAAuB,EAAA;QAC7B,MAAM,EACJ,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,0BAA0B,EAAE,YAAY,EAAE,cAAc,GAAG,UAAU,EAAE,QAAQ,EAAE,UAAU,GAC7H,GAAG,MAAM,CAAC;QAEX,IAAI,CAAC,IAAI,EAAE,CAAC;AAEZ,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACpC,QAAA,IAAI,UAAU,GAAG,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,KAAK,GAAG,UAAU,EAAE,aAAa,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAClH,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC;QAE1B,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAG,CAAC,WAAmB,KAAI;YACnC,IAAI,CAAC,CAAC,UAAU,EAAE;gBAChB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,IAAI,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC;YACnC,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,gBAAA,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;gBAC5B,aAAa,IAAI,UAAU,CAAC;AAC7B,aAAA;AAED,YAAA,MAAM,OAAO,GAAG,WAAW,GAAG,SAAS,EACrC,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,EACtF,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,EACxC,GAAG,GAAG,aAAa,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,EAClD,YAAY,GAAG,GAAG,EAClB,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAEjB,YAAA,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC;AAE5B,YAAA,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5C,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,EAAE,SAAS,GAAG,EAAE,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,EAAE,CAAC;YAE/F,QAAQ,GAAG,CAAC,CAAC;YACb,OAAO,GAAG,YAAY,CAAC;YAEvB,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAwB;oBAChC,KAAK;AACL,oBAAA,KAAK,EAAE,YAAY;oBACnB,SAAS;iBACV,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChB,aAAA;AAED,YAAA,IAAI,UAAU,EAAE;gBACd,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,oBAAA,MAAM,IAAI,GAAwB;wBAChC,KAAK;AACL,wBAAA,KAAK,EAAE,YAAY;wBACnB,SAAS;qBACV,CAAC;oBACF,UAAU,CAAC,IAAI,CAAC,CAAC;AAClB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACjD,aAAA;AACH,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;KACjD;IAED,IAAI,GAAA;AACF,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACzC;IAED,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;AACF;;ACjGM,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAAU,qBAAqB,CAAC,CAAC;AAEjF,MAAM,qCAAqC,GAAG,IAAI,cAAc,CAAU,kCAAkC,CAAC,CAAC;AAE9G,MAAME,KAAG,GAAG,KAAK,EACpBC,MAAI,GAAG,MAAM,EACbC,SAAO,GAAG,SAA2B,EACrC,IAAI,GAAG,MAAwB,EAC/B,MAAM,GAAG,QAA0B,EACnC,QAAQ,GAAG,IAAI,EACf,cAAc,GAAG,IAAI,EACrB,YAAY,GAAG,IAAI,EACnB,kBAAkB,GAAG,EAAE,EACvB,IAAI,GAAG,IAAI,EACX,QAAQ,GAAG,KAAK,EAChB,sBAAsB,GAAG,GAAG,EAC5B,WAAW,GAAG,EAAE,EAChB,0BAA0B,GAAG,CAAC,CAAC;AAE5B,MAAMC,cAAY,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC;;ACtB/C,MAAM,kBAAkB,GAAG,CAAC,MAA+B,KAAI;AAClE,IAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YACZ,SAAS;AACZ,SAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;AACD,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;;ACYD;;;;;;;AAOG;MACU,SAAS,CAAA;IAClB,eAAe,CAAC,EACZ,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,GACc,EAAA;AACrB,QAAA,MAAM,UAAU,GAAG,SAAS,KAAK,iBAAiB,CAAC,QAAQ,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,sBAAsB,GAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,QAAA,IAAI,UAAU,EAAE;YACZ,CAAC,GAAG,SAAS,CAAC;AACd,YAAA,MAAM,EAAE,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,EAAE,EAAE,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,EAC7F,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAC/H,GAAG,GAAG,WAAW,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC,EAC1C,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,EAC1D,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,EACpE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC;AAChE,YAAA,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjC,YAAA,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACjC,SAAS,GAAG,GAAG,CAAC;YAChB,aAAa,GAAG,GAAG,CAAC;AACvB,SAAA;AAAM,aAAA;YACH,CAAC,GAAG,SAAS,CAAC;AACd,YAAA,MAAM,EAAE,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,EAAE,EAAE,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,EAC3F,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAC/H,GAAG,GAAG,WAAW,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC,EAC1C,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,EAC1D,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,EACpE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC;AAChE,YAAA,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjC,YAAA,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACjC,SAAS,GAAG,GAAG,CAAC;YAChB,aAAa,GAAG,GAAG,CAAC;AACvB,SAAA;QACD,OAAO;YACH,CAAC;YACD,CAAC;YACD,SAAS;YACT,aAAa;YACb,sBAAsB;SACzB,CAAC;KACL;AAED,IAAA,4BAA4B,CAAC,EACzB,UAAU,EACV,QAAQ,GACqB,EAAA;AAC7B,QAAA,MAAM,GAAG,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC;QACpC,OAAO;AACH,YAAA,QAAQ,EAAE,GAAG;SAChB,CAAC;KACL;AACJ;;AC9ED;;;;;;;AAOG;AAKG,MAAO,cAAe,SAAQ,mBAAmB,CAAA;AA4JnD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;QAtJF,IAAW,CAAA,WAAA,GAAG,IAAI,eAAe,CAAqB,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACnF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAS5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAShD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAS5C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAE1C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ,CAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAUzD,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAKlB,QAAA,IAAA,CAAA,EAAE,GAAW,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAM3C,QAAA,IAAA,CAAA,EAAE,GAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAMzC,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAC7B,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;QAiCvB,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QAKrB,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;AAqCrB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAGpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAKjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,UAAU,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;YACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC7D,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;KACjB;IA9JD,IACI,SAAS,CAAC,CAAqB,EAAA;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;KACJ;IACD,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAOvD,IACI,WAAW,CAAC,CAAS,EAAA;QACrB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAA;KACJ;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAI3D,IACI,SAAS,CAAC,CAAS,EAAA;QACnB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;KACJ;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;AAQhE,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EACtD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,EAC1C,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAChC,OAAO,SAAS,GAAG,YAAY,CAAC;KACnC;AAGD,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAGD,IAAI,CAAC,CAAC,CAAS,EAAA;QACX,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC/B;IACD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;IAG3B,IAAI,CAAC,CAAC,CAAS,EAAA;QACX,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC/B;IACD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;IAI3B,IAAI,SAAS,CAAC,CAAS,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAClD,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,WAAW,CAAC;AAC3C,SAAA;KACJ;AAED,IAAA,IAAI,kBAAkB,GAAA;QAClB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAC/D,SAAS,GAAG,IAAI,CAAC,gBAAgB,EACjC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,CAAC,GAAG,cAAc,GAAG,SAAS,CAAC;AAC/F,SAAA;QACD,OAAO,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,SAAS,GAAG,cAAc,CAAC;KACjG;AAED,IAAA,IAAI,iBAAiB,GAAA;QACjB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAC7D,SAAS,GAAG,IAAI,CAAC,gBAAgB,EACjC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAC7F,SAAA;QACD,OAAO,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;KAC/F;AAGD,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAGD,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;QACX,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAC7D,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EACzD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,IAAI,aAAa,GAAG,YAAY,CAAC,CAAC;AACrG,SAAA;QACD,OAAO,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC;KACvG;AAED,IAAA,IAAI,YAAY,GAAA;QACZ,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAC/D,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAC3D,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,CAAC,IAAI,cAAc,GAAG,aAAa,CAAC,CAAC;AACzG,SAAA;QACD,OAAO,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,cAAc,CAAC,CAAC;KAC3G;IAwBD,IAAI,GAAA;QACA,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC3B;IAES,gBAAgB,GAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AACpD,QAAA,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC3C,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EACvC,CAAC,GAAG,QAAQ,CAAC,WAAW,EACxB,CAAC,GAAG,QAAQ,CAAC,YAAY,EACzB,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,GAAG,SAAS,EACpD,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,SAAS,GAAG,CAAC,EACrD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBACpD,OAAO;AACV,aAAA;YACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,SAAA;KACJ;IAES,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC3C,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,CAAC,GAAG,OAAO,CAAC,WAAW,EACvB,CAAC,GAAG,OAAO,CAAC,YAAY,EACxB,KAAK,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,EACxC,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,EACzC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBACpD,OAAO;AACV,aAAA;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAChD,SAAA;KACJ;;2GA/MQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,0XAFb,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEH,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;AACf,iBAAA,CAAA;0EAGG,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAAC,eAAe,CAAA;gBAI1B,cAAc,EAAA,CAAA;sBADb,SAAS;uBAAC,gBAAgB,CAAA;gBAMvB,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAcF,WAAW,EAAA,CAAA;sBADd,KAAK;gBAWF,SAAS,EAAA,CAAA;sBADZ,KAAK;;;ACjCV;;;;;;;AAOG;AAKG,MAAO,YAAa,SAAQ,cAAc,CAAA;AAsD5C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;AAnDF,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAiB,uBAAuB,CAAC,CAAC;AACjF,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAStD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,0BAA0B,CAAC,CAAC;AAChF,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAS5D,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAqB,0BAA0B,CAAC,CAAC;AAC3F,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAS5D,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC;AAExE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAEtC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAW,CAAC;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAE9C,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;AAEjB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE3B,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QAEtB,IAAoB,CAAA,oBAAA,GAAW,CAAC,CAAC;KAQxC;IAlDD,IACI,cAAc,CAAC,CAAiB,EAAA;QAChC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;KACJ;IACD,IAAI,cAAc,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIjE,IACI,iBAAiB,CAAC,CAAU,EAAA;QAC5B,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;KACJ;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIvE,IACI,iBAAiB,CAAC,CAAqB,EAAA;QACvC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;KACJ;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAkBvE,IAAI,KAAK,CAAC,CAAS,EAAA;AACf,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;KAC5B;IAMD,eAAe,GAAA;QACX,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BP,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,CAC7B,EAAE,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CACrC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,CAC7B,EAAE,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,QAAA,aAAa,CAAC,IAAI,CACd,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BD,WAAS,CAAC,OAAO,IAAG;AAChB,YAAA,OAAO,SAAS,CAAa,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACjEC,QAAM,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAC/B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;gBACJ,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,MAAM,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAChE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACvC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC,EAAE,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC;gBACjI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,GAAGI,KAAG,GAAGC,MAAI,GAAG,QAAQ,EAAE,QAAQ,EAAEC,SAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7F,CAAC,CACL,CAAC;AACN,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAa,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAC7E,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC,EACG,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC,CACL,CAAC;AAEN,QAAA,QAAQ,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BP,WAAS,CAAC,OAAO,IAAG;AAChB,YAAA,OAAO,SAAS,CAAa,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACtE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAC9BD,WAAS,CAAC,CAAC,IAAG;gBACV,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;gBACvC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACxC,oBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACxB,iBAAA;AACD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7E,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,cAAc,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,gBAAA,IAAI,kBAAkB,GAAG,CAAC,EACtB,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACnD,OAAO,GAAG,IAAI,KAAK,EAAoB,EACvC,UAAU,GAAG,IAAI,KAAK,EAAoB,EAC1C,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,OAAO,SAAS,CAAa,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACrE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,SAAS,CAAC,gBAAgB,CAAC,EAC3B,GAAG,CAAC,CAAC,IAAG;AACJ,oBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC5B,iBAAC,CAAC,EACFA,WAAS,CAAC,CAAC,IAAG;AACV,oBAAA,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,GAChD,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBACzH,kBAAkB,GAAG,UAAU,CAAC;AAChC,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClD,SAAS,GAAG,OAAO,CAAC;oBACpB,OAAO,IAAI,CAAC,CAAC,SAAS,CAAa,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAa,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACzI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;wBACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EACtB,SAAS,GAAG,OAAO,GAAG,SAAS,EAC/B,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAChE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACnE,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,gBAAgB,EAAE;4BACvD,OAAO;AACV,yBAAA;AACD,wBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;qBACzE,CAAC,CACL,CAAC;iBACL,CAAC,CACL,CAAC;aACL,CAAC,CACL,CAAC;AACN,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAa,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAC9E,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC,EACG,cAAc,GAAG,QAAQ,CAAC,IAAI,CAC1B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC,CACL,CAAC;AAEN,QAAA,QAAQ,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CAAC,OAAO,IAAG;AAChB,YAAA,OAAO,SAAS,CAAa,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACvE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAC/BD,WAAS,CAAC,CAAC,IAAG;gBACV,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;gBACvC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACxC,oBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACxB,iBAAA;AACD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7E,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,cAAc,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,gBAAA,IAAI,kBAAkB,GAAG,CAAC,EACtB,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAC/G,OAAO,GAAG,IAAI,KAAK,EAAoB,EAAE,UAAU,GAAG,IAAI,KAAK,EAAoB,EACnF,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,OAAO,SAAS,CAAa,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACrE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,SAAS,CAAC,cAAc,CAAC,EACzB,GAAG,CAAC,CAAC,IAAG;AACJ,oBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC5B,iBAAC,CAAC,EACFA,WAAS,CAAC,CAAC,IAAG;AACV,oBAAA,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,GAChD,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBACzH,kBAAkB,GAAG,UAAU,CAAC;AAChC,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClD,SAAS,GAAG,OAAO,CAAC;oBACpB,OAAO,IAAI,CAAC,CAAC,SAAS,CAAa,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAa,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAC3I,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;wBACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EACtB,SAAS,GAAG,OAAO,GAAG,SAAS,EAC/B,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAChE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACnE,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,gBAAgB,EAAE;4BACvD,OAAO;AACV,yBAAA;AACD,wBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;qBACzE,CAAC,CACL,CAAC;iBACL,CAAC,CACL,CAAC;aACL,CAAC,CACL,CAAC;AACN,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;KACjB;AAEO,IAAA,iBAAiB,CAAC,UAAmB,EAAE,CAAgC,EAAE,SAAkB,EAAE,cAAsB,EAAE,SAAiB,EAC1I,kBAA0B,EAAE,OAAgC,EAAE,UAAmC,EAAA;AAEjG,QAAA,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAC/I,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,cAAc,GAAG,UAAU,CAAC,EAC5H,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAC7H,SAAS,GAAG,OAAO,GAAG,SAAS,EAAE,WAAW,GAAG,kBAAkB,KAAK,CAAC,GAAG,CAAC,GAAG,kBAAkB,GAAG,UAAU,EAC7G,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KACzD;IAEO,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE;YACtC,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;KACjC;AAEO,IAAA,qBAAqB,CAAC,CAAQ,EAAE,GAAW,EAAE,KAAa,EAAA;QAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE;YACpB,IAAI,CAAC,CAAC,UAAU,EAAE;gBACd,CAAC,CAAC,wBAAwB,EAAE,CAAC;gBAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,aAAA;AACD,YAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;AACjC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,IAAI,CAAC,oBAAoB,GAAG,0BAA0B,EAAE;gBACxD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,CAAC,CAAC,UAAU,EAAE;oBACd,CAAC,CAAC,wBAAwB,EAAE,CAAC;oBAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAEO,IAAA,eAAe,CAAC,CAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE;YACtC,IAAI,CAAC,CAAC,UAAU,EAAE;gBACd,CAAC,CAAC,wBAAwB,EAAE,CAAC;gBAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,aAAA;YACD,OAAO;AACV,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,SAAA;KACJ;IAEO,iBAAiB,CAAC,OAAgC,EAAE,KAAa,EAAE,SAAiB,EAAE,cAAsB,EAAE,EAAA;AAClH,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;AAE/F,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,EACvH,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,IAAI,WAAW,CAAC;QACnE,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACrD,YAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChC,SAAS;AACZ,aAAA;AAED,YAAA,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;AAChF,YAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAClD,SAAA;AAED,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,EAAE,EAAE,EAAE,CAAC;KACjB;IAEO,qBAAqB,CAAC,UAAmC,EAAE,KAAa,EAAE,SAAiB,EAAE,cAAsB,EAAE,EAAA;AACzH,QAAA,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;QAClG,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;AACtF,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE,MAAoC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,IAAI,CAAC;AAClD,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxD,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBACjC,SAAS;AACZ,aAAA;AACD,YAAA,IAAI,GAAG,EAAE;AACL,gBAAA,MAAM,EAAE,GAAG,SAAS,GAAG,sBAAsB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;gBAC1J,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,CAAC;AAChB,aAAA;YACD,MAAM,GAAG,GAAG,CAAC;AACb,YAAA,SAAS,EAAE,CAAC;AACf,SAAA;AAED,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,eAAe,IAAI,cAAc,CAAC,CAAC;QAC9E,OAAO,EAAE,EAAE,EAAE,CAAC;KACjB;IAED,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACzB;AAES,IAAA,IAAI,CAAC,UAAmB,EAAE,QAAgB,EAAE,QAAA,GAAoB,KAAK,EAAE,UAAsB,GAAA,KAAK,EAAE,UAAA,GAAsB,IAAI,EAAA;AACpI,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,GAAGK,KAAG,GAAGC,MAAI,GAAG,QAAQ,EAAE,QAAQ,EAAEC,SAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;KAC7G;IAES,oBAAoB,CAAC,UAAmB,EAAE,QAAgB,EAAE,EAAU,EAAE,CAAS,EAAE,EAAU,EAAE,SAAiB,EAAA;AACtH,QAAA,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,GAAG,sBAAsB,EAAE;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EACvB,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,IAAI,EAC3C,QAAQ,GAAG,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,YAAY,EACtF,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,QAAQ,EACzD,WAAW,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EACxG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,oBAAoB,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,EAC3H,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAC3D,SAAS,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE,GAAG,WAAW,EAC/C,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/F,SAAA;KACJ;AAES,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,iBAAiB,CAAC,QAAQ,EACzE,WAAW,GAAG,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC9E,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAC9D,MAAM,GAAG,KAAK,IAAI,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAC1F,QAAA,OAAO,MAAM,CAAC;KACjB;AAES,IAAA,OAAO,CAAC,UAAkB,EAAE,QAAgB,EAAE,QAAQ,GAAG,kBAAkB,EAAE,cAAA,GAAyB,WAAW,EACvH,aAAsB,KAAK,EAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,iBAAiB,CAAC,QAAQ,CAAC;AAC9E,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE,QAAQ,EAAE,QAAQ;YAC9B,cAAc;YACd,YAAY,EAAE,MAAK;AACf,gBAAA,OAAO,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;aACzC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;gBACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;aACnD,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;gBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;aACnC;AACJ,SAAA,CAAC,CAAC;KACN;IAES,mBAAmB,CAAC,QAAgB,EAAA,GAAK;IAEnD,UAAU,CAAC,aAAsB,KAAK,EAAA;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;KACpC;AAED,IAAA,YAAY,CAAC,KAA0B,EAAA;AACnC,QAAA,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AACtI,QAAA,IAAI,UAAU,EAAE;YACZ,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,MAAuB,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,EACrC,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,EAClC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,EACvC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,EACjC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EACtC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAIA,SAAO,EACrC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,EAClC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,kBAAkB,EAChD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,iBAAiB,CAAC,QAAQ,CAAC;AAE5E,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAC/B,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAC7B,KAAK,GAAG,IAAI,CAAC,EAAE,EACf,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE;AAC1C,YAAA,IAAI,UAAU,EAAE;gBACZ,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACtD,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACtD,iBAAA;AACJ,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;AACf,gBAAA,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,QAAQ,EAAE;wBACX,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,qBAAA;AACD,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjB,oBAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACX,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,oBAAA,IAAI,UAAU,EAAE;AACZ,wBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACpC,qBAAA;AACJ,iBAAA;AACJ,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;oBACf,IAAI,CAAC,QAAQ,EAAE;wBACX,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,qBAAA;AACD,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjB,oBAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACX,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,oBAAA,IAAI,UAAU,EAAE;AACZ,wBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACpC,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAES,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,aAAa,CAACC,cAAY,CAAC,CAAC;AAClF,SAAA;KACJ;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,aAA+B,CAAC;QAC1E,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,SAAA,CAAW,CAAC;KAChG;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,aAA+B,CAAC;QAC1E,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAkB,eAAA,EAAA,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,MAAA,CAAQ,CAAC;KAChG;AAES,IAAA,eAAe,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAClC;AAES,IAAA,WAAW,MAAM;IAE3B,KAAK,CAAC,SAAiB,CAAC,EAAA;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;KACnD;IAEQ,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC5B,SAAA;KACJ;;yGAveQ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6FAAZ,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACgB,aAAa,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHxC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,EAAE;AACf,iBAAA,CAAA;0EAGY,aAAa,EAAA,CAAA;sBADrB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;gBAMhD,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAWF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBAWF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;;;ACxDH,MAAM,iBAAiB,GAAG,CAAC,EAC9B,YAAY,GAAG,CAAC,EAChB,EAAE,GAAG,IAAI,EACT,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,QAAQ,EACjB,OAAO,GAAG,SAAS,EACnB,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,YAAY,EACzB,IAAI,GAAG,MAAM,EACb,kBAAkB,GAAG,CAAA,EAAG,OAAO,CAAA,eAAA,CAAiB,CAAC;AAE9C,MAAM,kCAAkC,GAA8B;AACzE,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,IAAA,MAAM,EAAE,EAAE;CACb;;ACLD;;;;;;;AAOG;AAYG,MAAO,oBAAqB,SAAQ,YAAY,CAAA;AAsJpD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAnJA,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAExC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAE/C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AASlD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAIX,cAAY,EAAuB,CAAC;AAGjD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAIA,cAAY,EAAuB,CAAC;QAE5C,IAAwB,CAAA,wBAAA,GAAG,IAAI,eAAe,CAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;AAUxE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAS,YAAY,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAUpC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,iBAAiB,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAU9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAU5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAU5C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,6BAA6B,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAUlD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAUpC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAqC,EAAE,CAAC,CAAC;AACtE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAUxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAU5C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AACpE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAmC,EAAE,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAA4B,kCAAkC,CAAC,CAAC;AACtG,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AAChE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAExC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAElD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC7B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAKvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAClC,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,EACtD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAEzB,QAAA,aAAa,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAC/E,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,CAAC,KAAI;AAChE,YAAA,MAAM,OAAO,GAA8B;gBACzC,GAAG,EAAE,IAAI,CAAC,WAAW;AACrB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,aAAa,EAAE,sBAAsB;gBACrC,MAAM,EAAE,MAAM,IAAI,EAAE;aACrB,CAAC;AACF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BI,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACjE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,KAAI;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AACzD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IArLD,IACI,OAAO,CAAC,CAAU,EAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAWnD,IACI,sBAAsB,CAAC,CAAyB,EAAA;QAClD,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,SAAA;KACF;IACD,IAAI,sBAAsB,GAAK,EAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKjF,IACI,IAAI,CAAC,CAAS,EAAA;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;KACF;IACD,IAAI,IAAI,GAAK,EAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE;IAK7C,IACI,SAAS,CAAC,CAAS,EAAA;QACrB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACF;IACD,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKvD,IACI,gBAAgB,CAAC,CAAS,EAAA;QAC5B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;KACF;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAK9D,IACI,QAAQ,CAAC,CAAU,EAAA;QACrB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,SAAA;KACF;IACD,IAAI,QAAQ,GAAK,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKrD,IACI,WAAW,CAAC,CAAU,EAAA;QACxB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;KACF;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAK3D,IACI,IAAI,CAAC,CAAU,EAAA;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;KACF;IACD,IAAI,IAAI,GAAK,EAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE;IAK7C,IACI,MAAM,CAAC,CAAqC,EAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,SAAA;KACF;IACD,IAAI,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKjD,IACI,QAAQ,CAAC,CAA0B,EAAA;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,SAAA;KACF;IACD,IAAI,QAAQ,GAAK,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;IA0E5C,eAAe,GAAA;QACtB,KAAK,CAAC,eAAe,EAAE,CAAC;AAExB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,SAAS,CAAC,IAAI,CAAC,CAChB,CAAC;QAEF,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,EACfD,WAAS,CAAC,QAAQ,IAAG;AACnB,YAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC;AACzD,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,YAAY,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,IAAI,CAC9F,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,EAAE,UAAU,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CACvF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,EAAE,aAAa,GAAG,SAAS,CAAe,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,EAAE,aAAa,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,IAAI,CAC7F,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,EAAE,aAAa,GAAG,SAAS,CAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,IAAI,CAC7F,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,CAAC;AAEF,QAAA,YAAY,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,aAAa,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAC7C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,CAAC;AAEF,QAAA,aAAa,CAAC;AACZ,YAAA,aAAa,EAAE,WAAW;SAC3B,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,KAAI;AACvB,YAAA,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC;gBAC9C,OAAO;AACR,aAAA;AAAM,iBAAA,IAAI,KAAK,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;gBAC5C,OAAO;AACR,aAAA;YACD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC;YAC7C,OAAO;AACT,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACrB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACvB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACjE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,KAAI;YACpC,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,gBAAA,CAAC,YAAY,GAAG,CAAA,EAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAAA,EAAG,EAAE,CAAE,CAAA;gBAC9C,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC,UAAU,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI;AACxF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;YACN,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,UAAU,CAAC,IAAI,CACb,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;AAEO,IAAA,eAAe,CAAC,UAAmB,EAAA;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAC7G,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,aAA4B,EAChE,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,aAA+B,CAAC;AACxE,QAAA,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,aAAa,EAAE;AACvC,YAAA,MAAM,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,WAAW,EACrF,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC;AACvF,YAAA,MAAM,KAAK,GAAwB;AACjC,gBAAA,QAAQ,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,IAAI,CAAC;gBAChF,GAAG,EAAE,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,UAAU,IAAI,CAAC;gBACxE,GAAG,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,WAAW,IAAI,UAAU,IAAI,CAAC;AACrG,gBAAA,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS;gBAC1B,UAAU;aACX,CAAC;AACF,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;QAChD,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAA;YACtF,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE;AACnE,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,KAAK,CAAC,KAAgC,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC5B;;iHAxWU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EATpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClD,QAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,KAAK,EAAE;QACnE,kBAAkB;QAClB,wBAAwB;AACzB,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,GAKqC,WAAgB,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCxD,gxBAWc,EAAA,MAAA,EAAA,CAAA,+hBAAA,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,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,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDuBD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACd,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClD,wBAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,KAAK,EAAE;wBACnE,kBAAkB;wBAClB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,gxBAAA,EAAA,MAAA,EAAA,CAAA,+hBAAA,CAAA,EAAA,CAAA;0EAMS,gBAAgB,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,IAAI,GAAE,WAAgB,CAAA,EAAE,CAAA;gBAWpD,OAAO,EAAA,CAAA;sBADV,KAAK;gBAON,MAAM,EAAA,CAAA;sBADL,MAAM;gBAIP,SAAS,EAAA,CAAA;sBADR,MAAM;gBAOH,sBAAsB,EAAA,CAAA;sBADzB,KAAK;gBAYF,IAAI,EAAA,CAAA;sBADP,KAAK;gBAYF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAYF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAYF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAYF,WAAW,EAAA,CAAA;sBADd,KAAK;gBAYF,IAAI,EAAA,CAAA;sBADP,KAAK;gBAYF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAYF,QAAQ,EAAA,CAAA;sBADX,KAAK;;;AEpJD,MAAM,uCAAuC,GAAG,CAAC,EACpD,sBAAsB,GAAG,EAAE;;ACK/B,MAAM,KAAK,GAAG,OAAO,EACnB,GAAG,GAAG,KAAK,CAAC;AAEd;;;;;;;AAOG;MAIU,wBAAwB,CAAA;AAsBnC,IAAA,WAAA,CAAoB,WAAoC,EAAA;QAApC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAyB;AArB9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEtC,IAAa,CAAA,aAAA,GAAG,IAAI,eAAe,CAAgB,cAAc,CAAC,GAAG,CAAC,CAAC;AACtE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QASlD,IAAS,CAAA,SAAA,GAAG,IAAI,eAAe,CAA4BG,mBAAiB,CAAC,QAAQ,CAAC,CAAC;AACtF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAShD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EACpC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE3B,aAAa,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,KAAI;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAA4B,EAC3D,UAAU,GAAG,WAAW,CAAC,OAAQ,EAAEA,mBAAiB,CAAC,QAAQ,CAAC,CAAC;AACjE,YAAA,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AACjE,YAAA,IAAI,GAAG,KAAK,cAAc,CAAC,GAAG,IAAI,UAAU,EAAE;AAC5C,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBAChC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC1C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9C,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC1C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9C,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IApCD,IACI,WAAW,CAAC,CAAgB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5B;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAM3D,IACI,OAAO,CAAC,CAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAwBnD,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC/B,SAAA;KACF;;qHAjDU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA,CAAA;iGAQK,WAAW,EAAA,CAAA;sBADd,KAAK;gBAWF,OAAO,EAAA,CAAA;sBADV,KAAK;;;AClBR,MAAM,GAAG,GAAG,KAAK,EACf,IAAI,GAAG,MAAM,EACb,OAAO,GAAG,SAA2B,CAAC;AAEjC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AAEvD;;;;;;;AAOG;AAUG,MAAO,mBAAoB,SAAQ,YAAY,CAAA;AA4NnD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAxND,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAIN,cAAY,EAAW,CAAC;AAElD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AAC5E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAU5D,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,6BAA6B,CAAC,CAAC;AACpF,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;AAUpE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAiB,SAAS,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAUxD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA0B,SAAS,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAUjD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAU1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAU1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAS,0BAA0B,CAAC,CAAC;AAC5E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAU5D,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAS,2BAA2B,CAAC,CAAC;AAC/E,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;AAUhE,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AAC7E,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;AAUxE,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAqC,IAAI,CAAC,CAAC;AACtF,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;AAUpE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AAC1E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QAE5D,IAAwB,CAAA,wBAAA,GAAG,IAAI,eAAe,CAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAE9C,IAAqB,CAAA,qBAAA,GAAG,IAAI,eAAe,CAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAGpC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAExC,IAAa,CAAA,aAAA,GAAG,IAAI,eAAe,CAAgB,cAAc,CAAC,GAAG,CAAC,CAAC;AACtE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAIO,WAAS,EAAE,CAAC;AAM7B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAE1D,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QA8BlB,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;AAKxC,QAAA,IAAA,CAAA,yBAAyB,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,4BAA4B,GAAW,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAExF,IAAgC,CAAA,gCAAA,GAAW,CAAC,CAAC,CAAC;QAE9C,IAA8B,CAAA,8BAAA,GAAW,CAAC,CAAC,CAAC;QAE5C,IAAW,CAAA,WAAA,GAAkB,EAAE,CAAC;QAE9B,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;QAGtB,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAG/B,IAAuB,CAAA,uBAAA,GAAG,MAAK;YACrC,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACjC,SAAC,CAAA;AAES,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAS,CAAC;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAS,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAK5D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC7B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC/B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IA5OD,IACI,gBAAgB,CAAC,CAAU,EAAA;QAC7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;KACF;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKrE,IACI,oBAAoB,CAAC,CAAU,EAAA;QACjC,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,SAAA;KACF;IACD,IAAI,oBAAoB,GAAK,EAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAK7E,IACI,cAAc,CAAC,CAAiB,EAAA;QAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAA;KACF;IACD,IAAI,cAAc,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKjE,IACI,OAAO,CAAC,CAA0B,EAAA;QACpC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,SAAA;KACF;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKnD,IACI,OAAO,CAAC,CAAU,EAAA;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,SAAA;KACF;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKnD,IACI,OAAO,CAAC,CAA+B,EAAA;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,SAAA;KACF;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKnD,IACI,gBAAgB,CAAC,CAAS,EAAA;QAC5B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;KACF;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKrE,IACI,kBAAkB,CAAC,CAAS,EAAA;QAC9B,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,SAAA;KACF;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKzE,IACI,sBAAsB,CAAC,CAA0B,EAAA;QACnD,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,SAAA;KACF;IACD,IAAI,sBAAsB,GAAK,EAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAKjF,IACI,oBAAoB,CAAC,CAAqC,EAAA;QAC5D,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,SAAA;KACF;IACD,IAAI,oBAAoB,GAAK,EAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAqC7E,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;KAC3C;IAMD,IAAI,QAAQ,CAAC,CAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAA;KACF;IAED,IAAa,CAAC,CAAC,CAAS,EAAA;QACtB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IACD,IAAa,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;IAEpC,IAAa,CAAC,CAAC,CAAS,EAAA;QACtB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IACD,IAAa,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;AAGpC,IAAA,IAAI,qBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB,CAAC;KACpC;IAaD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAGzC,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;IAwC9C,eAAe,GAAA;QACtB,KAAK,CAAC,eAAe,EAAE,CAAC;AAExB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BH,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACjD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAC9C,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAEvC,QAAA,aAAa,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAChE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAI;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,aAAa,IAAI,QAAQ,CAAC,CAAC;AAClE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EACpC,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAC1C,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAC/E,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAE/C,QAAA,gBAAgB,CAAC,IAAI,CACnB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC5D,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAClE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAI;AACrC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CACxI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAI;AACzF,YAAA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAClE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,EAClC,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,EAC1C,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;YAC1D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC;AACnI,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAEkB,gBAAgB,GAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AACpD,QAAA,IAAI,QAAQ,EAAE;YACZ,MAAM,MAAM,GAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AAC3H,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;gBAC1D,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;KACF;IAEkB,eAAe,GAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;YACX,MAAM,MAAM,GAAU,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AACxH,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;gBAC1D,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,SAAA;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,8BAA8B,GAAG,sBAAsB,CAAC;QAE7D,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;;IAEO,uBAAuB,GAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,yBAAyB,EAAE;YAChD,OAAO;AACR,SAAA;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5E,QAAA,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAC1D,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,EACtE,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,uCAAuC,EAAE;AACtE,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAA;QACD,WAAW,IAAI,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,GAAG,uCAAuC,CAAC;AAC9E,QAAA,IAAI,CAAC,4BAA4B,GAAG,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC;QAE3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,gCAAgC,GAAG,CAAC,CAAC,EAAE;AAC9C,YAAA,oBAAoB,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,gCAAgC,GAAG,CAAC,CAAC,CAAC;AAC5C,SAAA;KACF;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,8BAA8B,IAAI,CAAC,EAAE;YAC5C,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,IAAI,CAAC,gCAAgC,GAAG,qBAAqB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC7F,SAAA;KACF;IAEO,sBAAsB,CAAC,SAAkB,KAAK,EAAE,WAAoB,IAAI,EAAE,aAAsB,KAAK,EAAA;AAC3G,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAC3C,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EACjD,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAC/C,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EACvC,EACE,SAAS,EACT,aAAa,EACb,sBAAsB,GACvB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAClC,SAAS;YACT,aAAa,EAAE,cAAc,CAAC,KAAK;YACnC,cAAc,EAAE,cAAc,CAAC,MAAM;YACrC,YAAY,EAAE,aAAa,CAAC,KAAK;YACjC,aAAa,EAAE,aAAa,CAAC,MAAM;YACnC,WAAW;YACX,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,SAAS,EAAE,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AAC5C,SAAA,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,QAAA,MAAM,mBAAmB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AACtF,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACrB,gBAAA,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB;gBAC1G,UAAU,EAAE,KAAK,EAAE,QAAQ;AAC5B,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;KAClF;;IAEQ,IAAI,GAAA;QACX,KAAK,CAAC,IAAI,EAAE,CAAC;AAEb,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;KACxB;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC/B;IAED,gBAAgB,GAAA;QACd,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACjD;IAEkB,WAAW,GAAA;QAC5B,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,aAAa,EAAE,CAAC;AAErB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QAEpC,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAEQ,KAAK,GAAA;QACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,OAAO,CAAC,UAAA,GAAsB,KAAK,EAAE,kBAA2B,IAAI,EAAA;AAClE,QAAA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;AAED,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,QAAQ,CAAC,MAAuB,EAAA;AAC9B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;AAC7C,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;KACpD;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;AAChC,SAAA;KACF;AAEkB,IAAA,mBAAmB,CAAC,QAAgB,EAAA;AACrD,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,sBAAsB,CAAC,KAA0B,EAAA;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC7C,EACE,QAAQ,EAAE,gBAAgB,GAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC;AAC/C,YAAA,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW;YAC7D,QAAQ;AACT,SAAA,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC;AACZ,YAAA,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,gBAAgB,EAAE,QAAQ,EAAE,OAAO;YAC9D,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI;AACrD,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAChE;AAED,IAAA,yBAAyB,CAAC,KAA0B,EAAA;QAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC7B;AAEO,IAAA,yBAAyB,CAAC,QAAgB,EAAE,GAAA,GAAc,CAAC,EAAE,GAAc,GAAA,CAAC,EAAE,SAAA,GAAqB,KAAK,EAAE,aAAsB,KAAK,EAAA;QAC3I,IAAI,UAAU,IAAI,SAAS,EAAE;YAC3B,IAAI,QAAQ,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC/B,aAAA;iBAAM,IAAI,QAAQ,IAAI,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC7B,aAAA;AACF,SAAA;KACF;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;gHA1iBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EALnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE;AACnD,QAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;KACnE,EAG+B,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAoB,oDC1CtD,2lDAoBM,EAAA,MAAA,EAAA,CAAA,w8BAAA,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,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDqBO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAGZ,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE;AACnD,wBAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;AACnE,qBAAA,EAAA,QAAA,EAAA,2lDAAA,EAAA,MAAA,EAAA,CAAA,w8BAAA,CAAA,EAAA,CAAA;0EAIQ,SAAS,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;gBAI7C,kBAAkB,EAAA,CAAA;sBAD1B,MAAM;gBAOH,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAYF,oBAAoB,EAAA,CAAA;sBADvB,KAAK;gBAYF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAYF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAYF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAYF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAYF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAYF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBAYF,sBAAsB,EAAA,CAAA;sBADzB,KAAK;gBAYF,oBAAoB,EAAA,CAAA;sBADvB,KAAK;;;AEpJR,IAAY,uBAEX,CAAA;AAFD,CAAA,UAAY,uBAAuB,EAAA;AAC/B,IAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAFW,uBAAuB,KAAvB,uBAAuB,GAElC,EAAA,CAAA,CAAA,CAAA;AAAA;;ACSD,MAAM,cAAc,GAAG,CAAC,IAAsB,EAAE,UAAmB,EAAE,MAAa,EAAE,UAAkB,EAClG,OAAgB,EAAE,QAAgB,EAAE,EAAM,EAAE,KAAa,KAA4B;IACrF,OAAO;QACH,KAAK;QACL,EAAE;AACF,QAAA,QAAQ,EAAE;AACN,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,IAAI,EAAE,QAAQ;YACd,UAAU;AACV,YAAA,qBAAqB,EAAE,CAAC;AACxB,YAAA,4BAA4B,EAAE,CAAC;AAC/B,YAAA,mBAAmB,EAAE,CAAC;AACtB,YAAA,0BAA0B,EAAE,CAAC;AAC7B,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAQ;AACpD,YAAA,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAQ;AACzD,SAAA;QACD,IAAI;AACJ,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,MAAM,EAAE;AACJ,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,KAAK;YACjB,UAAU;YACV,OAAO;AACP,YAAA,wBAAwB,EAAE,KAAK;AAC/B,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,MAAM,EAAE,GAAG;AACd,SAAA;KACJ,CAAA;AACL,CAAC,CAAA;AAED;;;;;;;AAOG;AACG,MAAO,iBAAkB,SAAQ,YAAgE,CAAA;AAAvG,IAAA,WAAA,GAAA;;AACY,QAAA,IAAA,CAAA,IAAI,GAA2B,IAAI,IAAI,EAAa,CAAC;AAErD,QAAA,IAAA,CAAA,MAAM,GAAkC,IAAI,KAAK,EAAoB,CAAC;QAEtE,IAAU,CAAA,UAAA,GAA4B,IAAI,CAAC;QAE3C,IAAe,CAAA,eAAA,GAAqD,IAAI,CAAC;AAEzE,QAAA,IAAA,CAAA,WAAW,GAA6D,IAAI,KAAK,EAA8C,CAAC;AAEhI,QAAA,IAAA,CAAA,yBAAyB,GAA0B,IAAI,cAAc,CAAC,MAAK;AAC/E,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,IAAI,CAAC,CAAC,UAAU,EAAE;AACd,gBAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC3B,oBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;AACpD,oBAAA,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5D,iBAAA;AACJ,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;AACjF,SAAC,CAAC,CAAC;QAEK,IAAO,CAAA,OAAA,GAAY,IAAI,CAAC;KA4HnC;IA3HG,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;AAE7B,IAAA,OAAO,CAAC,cAAyD,EAAE,MAAa,EAAE,MAAuC,EAAA;AAC7H,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EACxC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,oBAAoB,EAChD,SAAS,GAAG,MAAM,CAAC,QAAQ,IAAI,iBAAiB,EAChD,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,sBAAsB,EAClD,YAAY,GAAG,MAAM,CAAC,YAAY,EAClC,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EACtD,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,WAAW,EAClD,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAEpD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC3C,OAAO;AACV,SAAA;AACD,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,SAAS,GAAG,UAAU,EAAE;gBACxB,MAAM;AACT,aAAA;AACD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,EAAE;AACR,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACvD,gBAAA,IAAI,IAAgD,CAAC;AACrD,gBAAA,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;oBACxB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC;oBACtC,IAAI,CAAC,CAAC,cAAc,EAAE;wBAClB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,qBAAA;AACD,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACxB,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACzG,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACrB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAC/C,CAAC,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,EAC9D,CAAC,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;gBACtE,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,gBAAA,CAAC,EAAE,CAAC;AACP,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,MAAM,CAAC,SAA2B,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC/B;AAED,IAAA,KAAK,CAAC,cAAyD,EAAE,KAA6B,EAC1F,MAAa,EAAE,MAAuC,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAChD;IAED,QAAQ,GAAA;AACJ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;KAClD;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,SAAA;KACJ;IAED,EAAE,GAAA;QACE,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,CAAC,UAAU,EAAE;AACd,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC;AAChD,YAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE;oBACtB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,EAAE,UAAU,EAAE,CAAC;AAChD,SAAA;KACJ;IAEQ,OAAO,GAAA;QACZ,KAAK,CAAC,OAAO,EAAE,CAAC;AAEhB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC/B,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;AACzC,SAAA;KACJ;AACJ;;ACzMD;;;;;;;AAOG;AAYG,MAAO,mCAAoC,SAAQ,0BAA0B,CAAA;IAC5D,MAAM,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;AAC9E,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACxE,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC;AAC1H,aAAA;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EAAAjB,IAAE,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC;YAChJ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAG,EAAAA,IAAE,EAAE,CAAC;AACjJ,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACtD,SAAA;KACJ;IAEQ,IAAI,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAA4B,EACpD,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;AACtB,QAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,cAAc,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE;gBAClC,OAAO;AACV,aAAA;AAED,YAAA,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;AAClC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,kBAAkB,EAAE;gBAC1C,OAAO;AACV,aAAA;AAED,YAAA,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAAC;AAC1C,SAAA;KACJ;IAEQ,IAAI,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EACrC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;AACtB,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE;gBACjC,OAAO;AACV,aAAA;AAED,YAAA,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;AACjC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,iBAAiB,EAAE;gBACzC,OAAO;AACV,aAAA;AAED,YAAA,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC;AACzC,SAAA;KACJ;;gIAvDQ,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,mCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,yKzB3BhD,qlBASe,EAAA,MAAA,EAAA,CAAA,oWAAA,EAAA,+SAAA,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,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,EAAAS,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FyBkBF,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAX/C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAGpC,IAAA,EAAA;AACF,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,MAAM,EAAE,UAAU;AACrB,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,eAAA,EACA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qlBAAA,EAAA,MAAA,EAAA,CAAA,oWAAA,EAAA,+SAAA,CAAA,EAAA,CAAA;;;ACfnD;;;;;;;AAOG;AAWG,MAAO,4BAA6B,SAAQ,cAAc,CAAA;AA2E5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;QAxEF,IAAa,CAAA,aAAA,GAAG,IAAI,eAAe,CAAgB,cAAc,CAAC,GAAG,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AAC9E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAS1D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AASxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AAC5E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAE5C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAoCtD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAIE,WAAS,EAAE,CAAC;QAKjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAC1B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAEjC,QAAA,aAAa,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CACxC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,KAAI;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;AACjE,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EACtC,eAAe,GAAG,IAAI,CAAC,eAAe,EACtC,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAE/C,QAAA,aAAa,CAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAC7F,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAI;YAClC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACjH,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAClC,UAAU,GAAG,IAAI,CAAC,UAAU,EAC5B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAC1D,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;YACL,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3B,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAE/C,QAAA,gBAAgB,CAAC,IAAI,CACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;KACjB;IA9GD,IACI,gBAAgB,CAAC,CAAU,EAAA;QAC3B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,SAAA;KACJ;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIrE,IACI,OAAO,CAAC,CAA+B,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACJ;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAcnD,IAAa,CAAC,CAAC,CAAS,EAAA;QACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACrC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAA;KACJ;IACD,IAAa,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;IAEpC,IAAa,CAAC,CAAC,CAAS,EAAA;QACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACrC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAA;KACJ;IACD,IAAa,CAAC,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE;IAEjB,gBAAgB,GAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AACpD,QAAA,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAA;KACJ;IAEkB,eAAe,GAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YACxF,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAA;KACJ;IAkDO,sBAAsB,CAAC,SAAkB,KAAK,EAAA;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EACzC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EACzC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EACvC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,aAA4B,EAChE,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,aAA+B,EACrE,EACI,SAAS,EACT,aAAa,GAChB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAChC,SAAS;YACT,aAAa,EAAE,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,YAAY;YACtF,YAAY,EAAE,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,YAAY;YAClF,WAAW;YACX,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,SAAS,EAAE,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,EAAE,CAAC;AACb,SAAA,CAAC,CAAC;AAEP,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,QAAA,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACnB,gBAAA,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB;AAC3G,gBAAA,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI;AACpC,aAAA,CAAC,CAAC;AACN,SAAA;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC9C;IAES,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KACjC;;yHA1JQ,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAN1B,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE;AACnD,QAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;KACrE,EAI+B,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAoB,oDC7BxD,qbAOM,EAAA,MAAA,EAAA,CAAA,w8BAAA,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,EAAAO,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDqBO,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAVxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGtB,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE;AACnD,wBAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;qBACrE,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qbAAA,EAAA,MAAA,EAAA,CAAA,w8BAAA,CAAA,EAAA,CAAA;0EAI/C,SAAS,EAAA,CAAA;sBADR,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;gBASlD,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAWF,OAAO,EAAA,CAAA;sBADV,KAAK;;;AE1BV;;;;;;;AAOG;AAWG,MAAO,eAAgB,SAAQ,mBAAmB,CAAA;AA6JpD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;AA1JF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AASxC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAY,iBAAiB,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAS5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAS9C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAyB,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AASpC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AAC9E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAS1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAShD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAS5C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAe,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAStC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,oBAAoB,CAAC,CAAC;AAChE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AASxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAS,iBAAiB,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAS1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAS,sBAAsB,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AASxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AASlD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAA4C,mCAAmC,CAAC,CAAC;AAC5H,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;QAS9D,IAAS,CAAA,SAAA,GAAG,IAAI,eAAe,CAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAkB,CAAC;AACjD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAE/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAkB,CAAC;AAChD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAE3D,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,iBAAiB,EAAE,CAAC;AAE9D,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,KAAqB,KAAI;AACzD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;QAI1D,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAE5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,KAAK,EAAgB,CAAC;AAK/C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,QAAQ,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,OAAO,IAAG;AACV,YAAA,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,aAAA;AACL,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC;KACjB;IArKD,IACI,OAAO,CAAC,CAAU,EAAA;QAClB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACJ;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAInD,IACI,SAAS,CAAC,CAAY,EAAA;QACtB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;KACJ;IACD,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIvD,IACI,UAAU,CAAC,CAAU,EAAA;QACrB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,SAAA;KACJ;IACD,IAAI,UAAU,GAAK,EAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIzD,IACI,KAAK,CAAC,CAAyB,EAAA;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,SAAA;KACJ;IACD,IAAI,KAAK,GAAK,EAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE;IAI/C,IACI,gBAAgB,CAAC,CAAU,EAAA;QAC3B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,SAAA;KACJ;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIrE,IACI,WAAW,CAAC,CAAS,EAAA;QACrB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAA;KACJ;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;IAI3D,IACI,SAAS,CAAC,CAAS,EAAA;QACnB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;KACJ;IACD,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIvD,IACI,MAAM,CAAC,CAAe,EAAA;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,SAAA;KACJ;IACD,IAAI,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIjD,IACI,OAAO,CAAC,CAAU,EAAA;QAClB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACJ;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAInD,IACI,QAAQ,CAAC,CAAS,EAAA;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;KACJ;IACD,IAAI,QAAQ,GAAK,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;IAIrD,IACI,OAAO,CAAC,CAAS,EAAA;QACjB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACJ;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;IAInD,IACI,YAAY,CAAC,CAA0B,EAAA;QACvC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAA;KACJ;IACD,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;IAI7D,IACI,kBAAkB,CAAC,CAA4C,EAAA;QAC/D,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,SAAA;KACJ;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAmBzE,IAAA,IAAI,MAAM,GAAA,EAAK,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,EAAE;IAsBxD,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAEvB,QAAA,IAAI,CAAC,SAAU,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEhG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACJ,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,mBAAmB,GAAG,qBAAqB,EAAE,CAAC,GAAG,qBAAqB,GAAG,mBAAmB,CAAC,CAAC;AAC1H,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC,CAAC;AAEf,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACtC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BV,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAM,IAAG;AACT,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAO,CAAC;AAClC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,CAAA,EAAGR,IAAE,CAAA,CAAE,CAAC;YACjC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAA,EAAGA,IAAE,CAAA,CAAE,CAAC;AACvC,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC,CAAC;QAEf,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BQ,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC9B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,KAAI;YACpB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAG,EAAE;AACzF,oBAAA,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAG;AAC7C,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAClC,oBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AACpC,oBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AACxC,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrC,iBAAA,CAAC,CAAC;AACN,aAAA;AACL,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC,CAAC;AAEf,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAC,CAAC;KAClB;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,GAAG,EAAE,CAAC;AAEX,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAU,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACtG,SAAA;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AAC1C,QAAA,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,MAAM,CAAC,WAAW,EAAE,CAAC;AACxB,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAA;KACJ;IAED,EAAE,CAAC,QAAuC,IAAI,EAAA;AAC1C,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAClC,SAAA;KACJ;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACxB,SAAA;KACJ;IAED,eAAe,GAAA;QACX,IAAI,CAAC,SAAU,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC;KACnD;IAEQ,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACzB,SAAA;KACJ;;4GA1RQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACiB,gBAAgB,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxC7D,0WAIwB,EAAA,MAAA,EAAA,CAAA,soBAAA,EAAA,iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FDmCX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAGvB,IAAA,EAAA;AACF,wBAAA,OAAO,EAAE,qBAAqB;AACjC,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,0WAAA,EAAA,MAAA,EAAA,CAAA,soBAAA,EAAA,iCAAA,CAAA,EAAA,CAAA;0EAIlC,iBAAiB,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAMvD,OAAO,EAAA,CAAA;sBADV,KAAK;gBAWF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAWF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAWF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAWF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAWF,WAAW,EAAA,CAAA;sBADd,KAAK;gBAWF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAWF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAWF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAWF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAWF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAWF,YAAY,EAAA,CAAA;sBADf,KAAK;gBAWF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;;;AEvJV;;;;;;;AAOG;AAWG,MAAO,oBAAqB,SAAQ,mBAAmB,CAAA;AA2CzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;QA1CJ,IAAK,CAAA,KAAA,GAA2B,IAAI,CAAC;QAG7C,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QAGzB,IAAS,CAAA,SAAA,GAAc,iBAAiB,CAAC;QAGzC,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAG3B,IAAgB,CAAA,gBAAA,GAAY,yBAAyB,CAAC;QAGtD,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QAGxB,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;QAMtB,IAAO,CAAA,OAAA,GAAY,oBAAoB,CAAC;QAGxC,IAAQ,CAAA,QAAA,GAAW,iBAAiB,CAAC;QAGrC,IAAO,CAAA,OAAA,GAAW,sBAAsB,CAAC;KAaxC;AAND,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC;KACtC;IAMD,eAAe,GAAA;QACX,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE7B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BZ,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChBD,WAAS,CAAC,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,CAC7B,CAAC;KACL;IAED,KAAK,GAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;AAChB,SAAA;KACJ;IAED,EAAE,CAAC,QAAuC,IAAI,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,SAAA;KACJ;IAED,GAAG,GAAA;AACC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,EAAE;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;AACd,SAAA;KACJ;;iHA5EQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAApB,oBAAoB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACF,eAAe,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjC9C,8VAEwG,EAAA,MAAA,EAAA,CAAA,soBAAA,EAAA,iFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FD8B3F,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAG5B,IAAA,EAAA;AACF,wBAAA,OAAO,EAAE,qBAAqB;AACjC,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,8VAAA,EAAA,MAAA,EAAA,CAAA,soBAAA,EAAA,iFAAA,CAAA,EAAA,CAAA;0EAIlC,KAAK,EAAA,CAAA;sBADZ,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAA;gBAI5C,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,YAAY,EAAA,CAAA;sBADX,KAAK;;;AE7DH,MAAM,yBAAyB,GAAG,CAAC,KAAmC,EAAE,cAAkC,EAAE,UAAkB,EACjI,UAAmB,EAAE,MAAa,KAAI;IACtC,IAAI,CAAC,cAAc,EAAE;AACjB,QAAA,OAAO,EAAE,CAAC;AACb,KAAA;IACD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3E,IAAA,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAA4C,CAAC;AACvF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAC3E,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,KAAK,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9D,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE;AACpE,YAAA,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,SAAA;QACD,QAAQ,GAAG,IAAI,CAAC;AACnB,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC1C,QAAA,OAAO,EAAE,CAAC;AACb,KAAA;AACD,IAAA,IAAI,SAAS,GAAG,cAAc,IAAI,EAAE,CAAC;IACrC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;IAChD,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAG,EAAA,GAAG,CAAE,CAAA,CAAC,CAAC;AAC9C,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,KAAmC,EAAE,WAAmB,EAAE,SAAiB,EAAE,UAAkB,EACpI,UAAmB,EAAE,MAAa,KAAkC;IACpE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3E,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAC3E,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvE,KAAK,QAAQ,GAAG,QAAQ,IAAI,UAAU,GAAG,WAAW,GAAG;AACnD,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACtB,SAAA;AACD,QAAA,KAAK,CAAC,QAAQ,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,8BAA8B,CAAC,GAAG;AAClF,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACpB,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC1C,QAAA,OAAO,SAAS,CAAC;AACpB,KAAA;AACD,IAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC;;ACUD;;;;;;;AAOG;AAYG,MAAO,sBAAuB,SAAQ,mBAAmB,CAAA;AAsgD7D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AApgDF,QAAA,IAAA,CAAA,GAAG,GAAW,sBAAsB,CAAC,QAAQ,CAAC;AAO9C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAcxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAyC,SAAS,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAyC,SAAS,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAEtD;;AAEG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAIjB,cAAY,EAAgB,CAAC;AAE5C;;AAEG;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAIA,cAAY,EAAgB,CAAC;AAE/C;;AAEG;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAIA,cAAY,EAAS,CAAC;AAE7C;;AAEG;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAIA,cAAY,EAAsC,CAAC;AAErE;;AAEG;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAIA,cAAY,EAAyB,CAAC;AAErD;;AAEG;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAIA,cAAY,EAAa,CAAC;AAE3C;;AAEG;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAIA,cAAY,EAAQ,CAAC;AAE9C;;AAEG;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAIA,cAAY,EAAQ,CAAC;AAEpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAS,2BAA2B,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;AAE1E,QAAA,IAAA,CAAA,4BAA4B,GAAG,CAAC,CAAS,KAAI;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAC9E,gBAAA,OAAO,2BAA2B,CAAC;AACpC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAS,0BAA0B,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAEtE,QAAA,IAAA,CAAA,0BAA0B,GAAG,CAAC,CAAS,KAAI;AACjD,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAC5E,gBAAA,OAAO,0BAA0B,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;AAElF,QAAA,IAAA,CAAA,gCAAgC,GAAG,CAAC,CAA0B,KAAI;YACxE,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;AAClF,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAqC,EAAE,CAAC,CAAC;AAC1E,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;AAE9E,QAAA,IAAA,CAAA,8BAA8B,GAAG,CAAC,CAAqC,KAAI;YACjF,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;AAChF,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAU,KAAI;AACzC,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACpE,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAU,4BAA4B,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;AAE1E,QAAA,IAAA,CAAA,4BAA4B,GAAG,CAAC,CAAU,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;AAC/E,gBAAA,OAAO,4BAA4B,CAAC;AACrC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,sBAAsB,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,CAAS,KAAI;AAC9C,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;AACzE,gBAAA,OAAO,sBAAsB,CAAC;AAC/B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,kCAAkC,GAAG,IAAI,eAAe,CAAS,6CAA6C,CAAC,CAAC;AACrG,QAAA,IAAA,CAAA,iCAAiC,GAAG,IAAI,CAAC,kCAAkC,CAAC,YAAY,EAAE,CAAC;AAEtG,QAAA,IAAA,CAAA,0CAA0C,GAAG,CAAC,CAAS,KAAI;AACjE,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAC5F,gBAAA,OAAO,6CAA6C,CAAC;AACtD,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAyB,EAAE,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAyB,KAAI;YACtD,IAAI,KAAK,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,EAAE;AACL,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,wBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClB,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,wBAAA,IAAI,KAAK,EAAE;AACT,4BAAA,IAAI,IAAI,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,OAAO,CAAW,EAAE,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,GAAG,OAAO,CAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE;gCACtH,KAAK,GAAG,KAAK,CAAC;gCACd,MAAM;AACP,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;AAC3F,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAYtE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAwB,IAAI,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAE5D,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAwB,KAAI;YAC3D,IAAI,KAAK,GAAG,aAAa,CAAC,CAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,cAAc,CAAC,CAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC,CAAQ,EAAE,IAAI,CAAC,CAAC;AACzH,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,wBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClB,KAAK,GAAG,cAAc,CAAC,IAAW,CAAC,IAAI,aAAa,CAAC,IAAW,CAAC,CAAC;wBAClE,IAAI,CAAC,KAAK,EAAE;4BACV,MAAM;AACP,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;gBACzF,OAAO,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAY,EAAE,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAE9D,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,CAAY,KAAI;YAChD,IAAI,KAAK,GAAG,aAAa,CAAC,CAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,wBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClB,KAAK,GAAG,cAAc,CAAC,IAAW,CAAC,IAAI,aAAa,CAAC,IAAW,CAAC,CAAC;wBAClE,IAAI,CAAC,KAAK,EAAE;4BACV,MAAM;AACP,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;AAC1F,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,uBAAuB,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,CAAU,KAAI;AAC/C,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC1E,gBAAA,OAAO,uBAAuB,CAAC;AAChC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAkBM,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,CAAU,KAAI;AACjD,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAC5E,gBAAA,OAAO,yBAAyB,CAAC;AAClC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAkBM,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAU,YAAY,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAU,KAAI;AACtC,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACjE,gBAAA,OAAO,YAAY,CAAC;AACrB,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,CAAS,KAAI;YAClD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC7E,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,CAAS,KAAI;YAChD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC3E,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,2BAA2B,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,CAAU,KAAI;AACnD,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAC9E,gBAAA,OAAO,2BAA2B,CAAC;AACpC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAuBM,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,CAAU,KAAI;AACjD,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAC5E,gBAAA,OAAO,yBAAyB,CAAC;AAClC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;QAsBM,IAA4B,CAAA,4BAAA,GAAG,MAAK;AAC1C,YAAA,MAAM,KAAK,CAAC,kFAAkF,CAAC,CAAC;AAClG,SAAC,CAAC;AAWM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,yBAAyB,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAEtE,QAAA,IAAA,CAAA,0BAA0B,GAAG,CAAC,CAAU,KAAI;YAClD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC7E,gBAAA,OAAO,yBAAyB,CAAC;AAClC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,6BAA6B,CAAC,CAAC;AAC1E,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;AAE9E,QAAA,IAAA,CAAA,8BAA8B,GAAG,CAAC,CAAU,KAAI;YACtD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACjF,gBAAA,OAAO,6BAA6B,CAAC;AACtC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAiB,uBAAuB,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,CAAiB,KAAI;YACvD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC1E,gBAAA,OAAO,uBAAuB,CAAC;AAChC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAqB,0BAA0B,CAAC,CAAC;AAC/E,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,CAAqB,KAAwB;YAClF,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1C,YAAA,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;AAChB,gBAAA,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;AACxF,gBAAA,KAAK,GAAG,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;AAC1F,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACD,gBAAA,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;AAC/E,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACD,gBAAA,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;AACtF,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACD,gBAAA,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;AACtF,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACD,gBAAA,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACrF,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACD,gBAAA,KAAK,GAAG,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;AACxF,oBAAA,OAAO,0BAA0B,CAAC;AACnC,iBAAA;AACF,aAAA;YACD,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACrF,gBAAA,OAAO,0BAA0B,CAAC;AACnC,aAAA;YACD,OAAO;gBACL,eAAe,EAAE,CAAC,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,0BAA0B,CAAC,eAAe;gBAC1I,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI;gBACnF,WAAW,EAAE,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,0BAA0B,CAAC,WAAW;gBACtH,WAAW,EAAE,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,0BAA0B,CAAC,WAAW;gBACtH,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,0BAA0B,CAAC,UAAU;AACjH,gBAAA,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,0BAA0B,CAAC,YAAY;aACxE,CAAC;AACJ,SAAC,CAAC;AAuBM,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAmB,wBAAwB,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAEpE,QAAA,IAAA,CAAA,yBAAyB,GAAG,CAAC,CAAmB,KAAI;YAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC3E,gBAAA,OAAO,wBAAwB,CAAC;AACjC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,0BAA0B,CAAC,CAAC;AACpE,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,CAAU,KAAI;YACnD,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAC9E,gBAAA,OAAO,0BAA0B,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,eAAe,CAAU,mCAAmC,CAAC,CAAC;AACrF,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,2BAA2B,CAAC,YAAY,EAAE,CAAC;AAExF,QAAA,IAAA,CAAA,mCAAmC,GAAG,CAAC,CAAU,KAAI;AAC3D,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;AACtF,gBAAA,OAAO,mCAAmC,CAAC;AAC5C,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAoBM,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAA+B,SAAS,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAE9D,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,CAAmB,KAAI;AACvD,YAAA,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,kBAAkB,KAAK,UAAU,CAAC,EAAE;gBAC1F,KAAK,GAAG,KAAK,CAAC;AACf,aAAA;YAED,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,MAAM,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC5E,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA4B,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,CAA4B,KAAI;AACjE,YAAA,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,EAAE;AACL,oBAAA,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE;AAChB,wBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB,wBAAA,IAAI,CAAC,IAAI;AACP,4BAAA,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AACxC,4BAAA,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;4BACvC,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3F;4BACA,KAAK,GAAG,KAAK,CAAC;4BACd,MAAM;AACP,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YACD,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAC5F,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAyBM,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAS,iBAAiB,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAS,KAAI;AACzC,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;AACnF,gBAAA,OAAO,iBAAiB,CAAC;AAC1B,aAAA;AAED,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,iBAAiB,GAAG,GAAG,CAAC;AACjE,SAAC,CAAC;AAmBM,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,oBAAoB,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAE5D,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAU,KAAI;AAC7C,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;AACxE,gBAAA,OAAO,oBAAoB,CAAC;AAC7B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAmBM,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAY,iBAAiB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,CAAY,KAAI;AAC7C,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;YAC5E,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;AAC3F,gBAAA,OAAO,iBAAiB,CAAC;AAC1B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAiB,uBAAuB,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,CAAiB,KAAI;AACvD,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;AACnF,gBAAA,OAAO,uBAAuB,CAAC;AAChC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,mBAAmB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,CAAS,KAAI;AAC3C,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACtE,gBAAA,OAAO,mBAAmB,CAAC;AAC5B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAiBM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,uBAAuB,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,CAAS,KAAI;YAC9C,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACzE,GAAG,GAAG,uBAAuB,CAAC;AAC/B,aAAA;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAChD,YAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,UAAU,EAAE;AAC1C,gBAAA,OAAO,UAAU,CAAC;AACnB,aAAA;AACD,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC;AAkBM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAiB,uBAAuB,CAAC,CAAC;AACrE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,CAAiB,KAAI;YACvD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,eAAe,CAAC,QAAQ,IAAI,CAAC,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtG,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,oDAAA,EAAuD,eAAe,CAAC,QAAQ,CAAA,MAAA,EAAS,eAAe,CAAC,QAAQ,CAAA,EAAA,CAAI,CAAC,CAAC;AACpI,gBAAA,OAAO,uBAAuB,CAAC;AAChC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAmBM,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAqB,qBAAqB,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;AAE1E,QAAA,IAAA,CAAA,4BAA4B,GAAG,CAAC,CAAqB,KAAI;YAC/D,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC;YAC5F,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;AAC5G,gBAAA,OAAO,qBAAqB,CAAC;AAC9B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAoBM,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAS,sBAAsB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAS,KAAI;AACxC,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;AACnE,gBAAA,OAAO,sBAAsB,CAAC;AAC/B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAuBM,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAS,6BAA6B,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;AAE5E,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAAC,CAAS,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;AAC/E,gBAAA,OAAO,6BAA6B,CAAC;AACtC,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAoBM,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,eAAe,CAAS,6BAA6B,CAAC,CAAC;AAC1F,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,CAAC,8BAA8B,CAAC,YAAY,EAAE,CAAC;AAErF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAgB,qBAAqB,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAE5D,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAgB,KAAI;AACnD,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;AACvE,gBAAA,OAAO,qBAAqB,CAAC;AAC9B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC;AAkBM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAE3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,yBAAyB,GAAY,IAAI,CAAC,2BAA2B,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAInC,IAAY,CAAA,YAAA,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAY,IAAI,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAEzD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA+B,EAAE,CAAC,CAAC;AAChE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAE3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAE7D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAyB,EAAE,CAAC,CAAC;AAEhE,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAY,EAAE,CAAC,CAAC;QAExD,IAAkB,CAAA,kBAAA,GAAsD,EAAE,CAAC;QAE3E,IAAyB,CAAA,yBAAA,GAAsD,EAAE,CAAC;AAElF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,OAAO,GAA6B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAEnE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AAE7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC,CAAC;AAEvD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;AAErD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAEpD,IAA8B,CAAA,8BAAA,GAAG,MAAK;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAClK,IAAI,IAAI,IAAI,QAAQ,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACpD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;AAE7F,gBAAA,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;oBACpC,IAAI,CAAC,CAAC,IAAI,EAAE;wBACV,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAG,EAAA,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAA,EAAGJ,IAAE,CAAA,CAAE,CAAC;AAC3F,qBAAA;AACF,iBAAA;gBAED,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AACxD,gBAAA,IAAI,cAAc,KAAK,eAAe,CAAC,QAAQ,EAAE;oBAC/C,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACzD,IAAI,CAAC,CAAC,gBAAgB,EAAE;wBACtB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAEzG,wBAAA,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAmB,gBAAA,EAAA,gBAAgB,CAAC,OAAO,CAAC,YAAY,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAA,CAAA,EAAI,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAM,GAAA,EAAA,gBAAgB,CAAC,OAAO,CAAC,WAAW,QAAQ,CAAC;wBAExO,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAChG,eAAe,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,EAC5F,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;AAEvD,wBAAA,IAAI,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,MAAc,CAAC;AAC7D,wBAAA,IAAI,UAAU,EAAE;4BACd,IAAI,GAAG,CAAC,CAAC;AACT,4BAAA,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC;4BAClC,GAAG,GAAG,OAAO,CAAC;4BACd,MAAM,GAAG,MAAM,CAAC;AAChB,4BAAA,IAAI,WAAW,KAAK,cAAc,CAAC,GAAG,EAAE;gCACtC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAmB,gBAAA,EAAA,MAAM,CAAM,GAAA,EAAA,KAAK,CAAI,CAAA,EAAA,MAAM,CAAM,GAAA,EAAA,KAAK,IAAI,GAAG,GAAG,KAAK,CAAA,GAAA,EAAM,aAAa,CAAA,CAAA,EAAI,GAAG,GAAG,KAAK,CAAA,GAAA,EAAM,aAAa,CAAA,MAAA,CAAQ,CAAC;AACxK,6BAAA;AAAM,iCAAA;gCACL,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAa,UAAA,EAAA,GAAG,GAAG,KAAK,CAAQ,KAAA,EAAA,MAAM,CAAM,GAAA,EAAA,KAAK,IAAI,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA,EAAI,GAAG,GAAG,KAAK,CAAA,IAAA,CAAM,CAAC;AACxJ,6BAAA;AACF,yBAAA;AAAM,6BAAA;4BACL,IAAI,GAAG,MAAM,CAAC;4BACd,KAAK,GAAG,KAAK,CAAC;4BACd,GAAG,GAAG,CAAC,CAAC;AACR,4BAAA,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAChC,4BAAA,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA,EAAI,MAAM,CAAQ,KAAA,EAAA,MAAM,CAAY,SAAA,EAAA,KAAK,QAAQ,CAAC;AACjH,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;QAEM,IAAsB,CAAA,sBAAA,GAA0B,IAAI,CAAC;AAErD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,OAAoB,EAAE,QAAgB,EAAE,KAAA,GAAwB,eAAe,CAAC,MAAM,EACzG,QAA2B,GAAA,aAAa,KAAI;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,OAAO;AACR,aAAA;AACD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACd,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,EACnI,UAAU,GAAG,IAAI,CAAC,WAAW,EAC7B,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,EAC1C,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;AAC1D,gBAAA,IAAI,GAAG,GAAW,MAAM,CAAC,GAAG,CAAC;AAC7B,gBAAA,QAAQ,KAAK;AACX,oBAAA,KAAK,eAAe,CAAC,KAAK,EAAE;wBAC1B,GAAG,GAAG,QAAQ,CAAC;wBACf,MAAM;AACP,qBAAA;AACD,oBAAA,KAAK,eAAe,CAAC,MAAM,EAAE;wBAC3B,GAAG,GAAG,QAAQ,GAAG,CAAC,YAAY,GAAG,WAAW,IAAI,EAAE,CAAC;wBACnD,MAAM;AACP,qBAAA;AACD,oBAAA,KAAK,eAAe,CAAC,GAAG,EAAE;wBACxB,GAAG,GAAG,QAAQ,IAAI,YAAY,GAAG,WAAW,CAAC,CAAC;wBAC9C,MAAM;AACP,qBAAA;oBACD,KAAK,eAAe,CAAC,IAAI,CAAC;AAC1B,oBAAA,SAAS;wBACP,MAAM;AACP,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtB,oBAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC;AAC3F,oBAAA,IAAI,UAAU,EAAE;wBACd,IAAI,GAAG,GAAG,CAAC,EAAE;4BACX,GAAG,GAAG,CAAC,CAAC;AACT,yBAAA;wBACD,IAAI,GAAG,GAAG,YAAY,EAAE;4BACtB,GAAG,GAAG,YAAY,CAAC;AACpB,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,IAAI,GAAG,GAAG,CAAC,EAAE;4BACX,GAAG,GAAG,CAAC,CAAC;AACT,yBAAA;wBACD,IAAI,GAAG,GAAG,WAAW,EAAE;4BACrB,GAAG,GAAG,WAAW,CAAC;AACnB,yBAAA;AACF,qBAAA;AAED,oBAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC3C,oBAAA,MAAM,MAAM,GAAoB;AAC9B,wBAAA,CAAC,IAAI,CAAC,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,GAAG,EAAE,QAAQ;wBAClE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,cAAc;qBAC/G,CAAC;AACF,oBAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3B,iBAAA;AACF,aAAA;AACH,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAElE;;AAEG;QACK,IAAmB,CAAA,mBAAA,GAA8C,0BAA0B,CAAC;AAGpG;;AAEG;QACK,IAAc,CAAA,cAAA,GAA0B,QAAQ,CAAC;AAEzD;;AAEG;AACK,QAAA,IAAA,CAAA,SAAS,GAAa,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEzE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAU,CAAC;AACtB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAiB,CAAC;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAE7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAiB,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAEtE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAEpD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAgB,CAAC;AACtC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAExC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAW,CAAC;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAW,CAAC;AACpC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;AAE5E,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC;QAIhF,IAAuB,CAAA,uBAAA,GAAW,CAAC,CAAC;QAEpC,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAEhB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAUnB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAcxD,sBAAsB,CAAC,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,GAAG,CAAC,KAAK,MAAM,CAAC,gBAAgB;cAC7F,CAAC,GAAG,sBAAsB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC;AAE3C,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAElE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EACpC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,aAAa,CAAC,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAClD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,KAAI;YACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,CAAC;AAC/D,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EACzB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;AA3iDD;;AAEG;IACH,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;AAsF7B;;AAEG;IACH,IACI,kBAAkB,CAAC,CAAS,EAAA;QAC9B,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC9C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAClD;;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAezE;;AAEG;IACH,IACI,gBAAgB,CAAC,CAAS,EAAA;QAC5B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC5C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAE5D,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAChD;;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAY,CAAC,EAAE;AAe/E;;AAEG;IACH,IACI,sBAAsB,CAAC,CAA0B,EAAA;QACnD,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClD,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;AAElE,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACtD;;IACD,IAAI,sBAAsB,GAAK,EAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAejF;;AAEG;IACH,IACI,oBAAoB,CAAC,CAAqC,EAAA;QAC5D,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChD,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;AAEhE,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACpD;;IACD,IAAI,oBAAoB,GAAK,EAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAe7E;;AAEG;IACH,IACI,OAAO,CAAC,CAAU,EAAA;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACnC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACvC;;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAa,CAAC,EAAE;AAe9D;;AAEG;IACH,IACI,kBAAkB,CAAC,CAAU,EAAA;QAC/B,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC9C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAClD;;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAa,CAAC,EAAE;AAepF;;AAEG;IACH,IACI,aAAa,CAAC,CAAS,EAAA;QACzB,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC7C;;IACD,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAY,CAAC,EAAE;AAezE;;AAEG;IACH,IACI,gCAAgC,CAAC,CAAS,EAAA;QAC5C,IAAI,IAAI,CAAC,kCAAkC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC5D,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAChE;;IACD,IAAI,gCAAgC,GAAK,EAAA,OAAO,IAAI,CAAC,kCAAkC,CAAC,QAAQ,EAAE,CAAC,EAAE;AA8BrG;;AAEG;IACH,IACI,KAAK,CAAC,CAAyB,EAAA;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACjC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACrC;;IACD,IAAI,KAAK,GAAK,EAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAA4B,CAAC,EAAE;IAKzE,IACI,gBAAgB,CAAC,CAA0B,EAAA;QAC7C,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC5C,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjC;;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;AA0BrE;;AAEG;IACH,IACI,WAAW,CAAC,CAAwB,EAAA;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACvC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC3C;;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;AA0B3D;;AAEG;IACH,IACI,YAAY,CAAC,CAAY,EAAA;QAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACxC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC5C;;IACD,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;AAe7D;;;AAGG;IACH,IACI,aAAa,CAAC,CAAU,EAAA;QAC1B,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC7C;;IACD,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE;AAe/D;;;AAGG;IACH,IACI,eAAe,CAAC,CAAU,EAAA;QAC5B,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC/C;;IACD,IAAI,eAAe,GAAK,EAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAenE;;AAEG;IACH,IACI,IAAI,CAAC,CAAU,EAAA;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEhD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACpC;;IACD,IAAI,IAAI,GAAK,EAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE;AAe7C;;AAEG;IACH,IACI,iBAAiB,CAAC,CAAS,EAAA;QAC7B,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC7C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjD;;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAevE;;AAEG;IACH,IACI,eAAe,CAAC,CAAS,EAAA;QAC3B,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC/C;;IACD,IAAI,eAAe,GAAK,EAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAenE;;;;;;;;AAQG;IACH,IACI,iBAAiB,CAAC,CAAU,EAAA;QAC9B,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC7C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjD;;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAevE;;;;;;;AAOG;IACH,IACI,eAAe,CAAC,CAAU,EAAA;QAC5B,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC/C;;IACD,IAAI,eAAe,GAAK,EAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAMnE;;;AAGG;IACH,IACI,kBAAkB,CAAC,CAAU,EAAA;QAC/B,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;AAeD;;AAEG;IACH,IACI,gBAAgB,CAAC,CAAU,EAAA;QAC7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC5C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAE5D,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAChD;;IACD,IAAI,gBAAgB,GAAK,EAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAerE;;AAEG;IACH,IACI,oBAAoB,CAAC,CAAU,EAAA;QACjC,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChD,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;AAEhE,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACpD;;IACD,IAAI,oBAAoB,GAAK,EAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAe7E;;AAEG;IACH,IACI,cAAc,CAAC,CAAiB,EAAA;QAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC1C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9C;;IACD,IAAI,cAAc,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAsDjE;;;;;;;;AAQG;IACH,IACI,iBAAiB,CAAC,CAAqB,EAAA;QACzC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC7C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjD;;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAevE;;AAEG;IACH,IACI,eAAe,CAAC,CAAmB,EAAA;QACrC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC3C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC/C;;IACD,IAAI,eAAe,GAAK,EAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAenE;;AAEG;IACH,IACI,iBAAiB,CAAC,CAAU,EAAA;QAC9B,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC7C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjD;;IACD,IAAI,iBAAiB,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAevE;;;;;AAKG;IACH,IACI,yBAAyB,CAAC,CAAU,EAAA;QACtC,IAAI,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACrD,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;AAErE,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACzD;;IACD,IAAI,yBAAyB,GAAK,EAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,CAAC,EAAE;AAiBvF;;AAEE;IACF,IACI,YAAY,CAAC,CAAmB,EAAA;QAClC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACxC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC5C;;IACD,IAAI,YAAY,GAAK,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAsB,CAAC,EAAE;AA6BjF;;;;;;;;;;AAUG;IACH,IACI,aAAa,CAAC,CAA4B,EAAA;QAC5C,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC7C;;IACD,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE;AAgB/D;;;;AAIG;IACH,IACI,QAAQ,CAAC,CAAS,EAAA;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACpC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAEpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACxC;;IACD,IAAI,QAAQ,GAAK,EAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;AAcrD;;;;AAIG;IACH,IACI,WAAW,CAAC,CAAU,EAAA;QACxB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACvC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC3C;;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;AAc3D;;AAEG;IACH,IACI,SAAS,CAAC,CAAY,EAAA;QACxB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACrC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACzC;;IACD,IAAI,SAAS,GAAK,EAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE;AAcvD;;AAEG;IACH,IACI,cAAc,CAAC,CAAiB,EAAA;QAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC1C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9C;;IACD,IAAI,cAAc,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAcjE;;AAEG;IACH,IACI,UAAU,CAAC,CAAS,EAAA;QACtB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACtC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC1C;;IACD,IAAI,UAAU,GAAK,EAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;AAoBzD;;;;AAIG;IACH,IACI,aAAa,CAAC,CAAS,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,GAAG,EAAE;YAC3C,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC;;IACD,IAAI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE;AAc/D;;;;AAIG;IACH,IACI,cAAc,CAAC,CAAiB,EAAA;QAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC1C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9C;;IACD,IAAI,cAAc,GAAK,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAcjE;;;;;AAKG;IACH,IACI,kBAAkB,CAAC,CAAqB,EAAA;QAC1C,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC9C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAClD;;IACD,IAAI,kBAAkB,GAAK,EAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAczE;;AAEG;IACH,IACI,OAAO,CAAC,CAAS,EAAA;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACnC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACvC;;IACD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;AAoBnD;;;;;AAKG;IACH,IACc,mBAAmB,CAAC,CAAS,EAAA;QACzC,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC/C,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACnD;;IACD,IAAc,mBAAmB,GAAK,EAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE;AAkBrF;;;AAGG;IACH,IACI,WAAW,CAAC,CAAgB,EAAA;QAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACvC,OAAO;AACR,SAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC3C;;IACD,IAAI,WAAW,GAAK,EAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE;AAW3D,IAAA,IAAc,UAAU,GAAA;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAoJD,IAAc,kBAAkB,KAAK,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE;AAgDvE,IAAA,IAAc,QAAQ,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC;KACzC;AAED,IAAA,IAAc,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,cAAc,IAAI,KAAK,CAAC,CAAC;KACnF;AAKS,IAAA,qBAAqB,CAAC,SAAiB,EAAE,UAAkB,EAAE,YAAoB,EAAA;AACzF,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,0BAA0B,CAAC;AACnC,SAAA;QACD,IAAI,SAAS,GAAG,UAAU,EAAE;YAC1B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,KAAK,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;AAChI,SAAA;QACD,OAAO,CAAA,EAAG,IAAI,CAAC,uBAAuB,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;KACrF;;IA8CD,eAAe,GAAA;AACb,QAAA,IAAI,aAAa,GAAG,KAAK,EAAE,sBAAsB,GAAG,KAAK,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAEzD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAmB,CAAC,eAAe,EAC9D,cAAc,GAAG,IAAI,CAAC,kBAAmB,CAAC,cAAe,CAAC;QAE5D,eAAe,CAAC,IAAI,CAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BQ,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,cAAc,CAAC,IAAI,CACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAE3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAC3B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YACtD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC3B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,EAC1B,IAAI,CAAC,CAAC,CAAC,CACR,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAG,CAAC,KAAoB,EAAE,UAAmB,KAAI;AACzE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,KAAK,EACtG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,EAClE,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC;gBAC3E,IAAI,UAAU,IAAI,UAAU,IAAI,iBAAiB,IAAI,UAAU,IAAI,YAAY,EAAE;AAC/E,oBAAA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE;wBAC/B,KAAK,CAAC,wBAAwB,EAAE,CAAC;wBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;QAEF,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAC5BD,WAAS,CAAC,OAAO,IAAG;YAClB,OAAO,SAAS,CAAgB,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAC3D,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CAAC,CAAC,IAAG;gBACZ,QAAQ,CAAC,CAAC,GAAG;AACX,oBAAA,KAAK,YAAY;AACf,wBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,4BAAA,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,yBAAA;wBACD,MAAM;AACR,oBAAA,KAAK,UAAU;wBACb,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,4BAAA,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,yBAAA;wBACD,MAAM;AACR,oBAAA,KAAK,aAAa;AAChB,wBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,4BAAA,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,yBAAA;wBACD,MAAM;AACR,oBAAA,KAAK,YAAY;wBACf,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,4BAAA,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,yBAAA;wBACD,MAAM;AACT,iBAAA;AACD,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;aACjB,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACrD,mBAAmB,CAAC,IAAI,CACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,kBAAkB,IAAG;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,kBAAkB,CAAC;AACnD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,UAAU,IAAG;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EACtE,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EACtG,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAE3G,QAAA,SAAS,CAAgB,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC/C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAC9BD,WAAS,CAAC,CAAC,IAAG;YACZ,OAAO,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAC1D,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CAAC,UAAU,CAAC,EACrB,SAAS,CAAC,WAAW,CAAC,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;aACnC,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAC/B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,OAAO,IAAG;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAC1B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAM,IAAG;YACX,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAO,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AACjC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC7B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,OAAO,IAAG;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC;AAChC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEhD,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CACzC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChBD,WAAS,CAAC,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,CAC3B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,WAAW,CAAC,IAAI,CACd,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,UAAU,IAAG;YACf,aAAa,GAAG,UAAU,CAAC;AAC7B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAC1B,gBAAgB,GAAG,CAAC,OAAkC,KAAI;AACxD,YAAA,IAAI,sCAAsC,GAAG,0BAA0B,EACrE,gCAAgC,GAAG,CAAC,CAAC;AACvC,YAAA,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EACxE,qBAAqB,GAAG,OAAO,EAAE,qBAAqB,IAAI,2BAA2B,CAAC;AACxF,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CAAC,MAAK;gBACb,sCAAsC,GAAG,0BAA0B,CAAC;gBACpE,gCAAgC,GAAG,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,OAAO,OAAO,CAAC,IAAI,CACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACfA,WAAS,CAAC,CAAC,CAAC,KAAI;AACd,oBAAA,IAAI,CAAC,CAAC,sCAAsC,KAAK,0BAA0B,MAAM,sCAAsC,KAAK,CAAC,CAAC;AAC5H,yBAAC,gCAAgC,GAAG,iBAAiB,CAAC,EAAE;wBACxD,IAAI,CAAC,KAAK,0BAA0B,EAAE;4BACpC,sCAAsC,GAAG,CAAC,CAAC;AAC5C,yBAAA;AACD,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,wBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,qBAAA;oBACD,IAAI,sCAAsC,KAAK,CAAC,EAAE;wBAChD,IAAI,gCAAgC,GAAG,qBAAqB,EAAE;AAC5D,4BAAA,gCAAgC,EAAE,CAAC;AACnC,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,4BAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,yBAAA;AACF,qBAAA;oBACD,sCAAsC,GAAG,CAAC,CAAC;AAC3C,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,iBAAC,CAAC,EACFC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,oBAAoB,EAAE,CACvB,CAAA;aACF,CAAC,CACH,CAAA;AACH,SAAC,CAAC;QACJ,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAChD,YAAA,iBAAiB,EAAE,kBAAkB;AACrC,YAAA,qBAAqB,EAAE,2BAA2B;AACnD,SAAA,CAAC,EACA,4BAA4B,GAAG,gBAAgB,CAAC;AAC9C,YAAA,iBAAiB,EAAE,mCAAmC;AACtD,YAAA,qBAAqB,EAAE,4CAA4C;AACpE,SAAA,CAAC,EACF,6BAA6B,GAAG,gBAAgB,CAAC;AAC/C,YAAA,iBAAiB,EAAE,mCAAmC;AACtD,YAAA,qBAAqB,EAAE,4CAA4C;AACpE,SAAA,CAAC,EACF,8BAA8B,GAAG,gBAAgB,CAAC;AAChD,YAAA,iBAAiB,EAAE,qCAAqC;AACxD,YAAA,qBAAqB,EAAE,8CAA8C;AACtE,SAAA,CAAC,EACF,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAC5C,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAEjD,QAAA,aAAa,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAChH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBA,QAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,EACtD,YAAY,CAAC,CAAC,CAAC,EACfD,WAAS,CAAC,CAAC,CAAC,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,CAAC,KAAI;AACtG,YAAA,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,kBAAkB,EAAE;AACpF,gBAAA,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,oBAAA,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;oBACzD,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,iBAAC,CAAC,EACF,GAAG,CAAC,KAAK,IAAG;oBACV,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvD,iBAAC,CAAC,EACFA,WAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EACxC,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;oBACN,IAAI,CAAC,CAAC,EAAE;wBACN,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,wBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,wBAAA,IAAI,CAAC,iBAAiB,IAAI,eAAe,EAAE;AACzC,4BAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACnC,yBAAA;AACD,wBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,wBAAA,IAAI,iBAAiB,EAAE;AACrB,4BAAA,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;4BACnC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACnC,yBAAA;wBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAClC,wBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACnD,wBAAA,IAAI,kBAAkB,EAAE;4BACtB,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gCAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,gCAAA,kBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,6BAAA;AACF,yBAAA;wBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,qBAAA;AACH,iBAAC,CAAC,EACFA,WAAS,CAAC,CAAC,IAAG;oBACZ,IAAI,CAAC,CAAC,EAAE;wBACN,IAAI,IAAI,CAAC,aAAa,EAAE;4BACtB,kBAAmB,CAAC,GAAG,EAAE,CAAC;AAC3B,yBAAA;AACD,wBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,qBAAA;AACD,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACnD,oBAAA,IAAI,kBAAkB,EAAE;AACtB,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;wBAClC,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,4BAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,4BAAA,kBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,yBAAA;AACD,wBAAA,OAAO,wBAAwB,CAAC,IAAI,CAClC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,4BAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;4BAClC,IAAI,IAAI,CAAC,aAAa,EAAE;gCACtB,kBAAmB,CAAC,GAAG,EAAE,CAAC;AAC3B,6BAAA;AACD,4BAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,4BAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,4BAAA,IAAI,iBAAiB,EAAE;AACrB,gCAAA,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnC,6BAAA;4BACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,4BAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACxB,CAAC,CACH,CAAC;AACH,qBAAA;oBACD,IAAI,IAAI,CAAC,aAAa,EAAE;wBACtB,kBAAmB,CAAC,GAAG,EAAE,CAAC;AAC3B,qBAAA;AACD,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,oBAAA,IAAI,CAAC,iBAAiB,IAAI,eAAe,EAAE;AACzC,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACnC,qBAAA;AACD,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,oBAAA,IAAI,iBAAiB,EAAE;AACrB,wBAAA,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnC,qBAAA;oBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;iBAClB,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;gBACL,kBAAmB,CAAC,GAAG,EAAE,CAAC;AAC1B,gBAAA,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,KAAK,IAAG;oBACV,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;wBAChC,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,wBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,wBAAA,IAAI,iBAAiB,EAAE;AACrB,4BAAA,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;AACpC,yBAAA;wBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,qBAAA;oBACD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvD,iBAAC,CAAC,EACFA,WAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EACxC,oBAAoB,EAAE,EACtBC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,oBAAA,IAAI,iBAAiB,EAAE;AACrB,wBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACrC,qBAAA;AAAM,yBAAA,IAAI,eAAe,EAAE;AAC1B,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACnC,qBAAA;AACD,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,oBAAA,IAAI,iBAAiB,EAAE;AACrB,wBAAA,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnC,qBAAA;oBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC/B,CAAC,CACH,CAAC;AACH,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EACvB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,SAAC,CAAC,EACFD,WAAS,CAAC,MAAK;YACb,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACf,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,KAAK,IAAG;AACV,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,iBAAA;aACF,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAC3B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;YACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACxC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAC5B,GAAG,CAAC,OAAO,IAAG;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC;AACtC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAC9C,cAAc,GAAG,IAAI,CAAC,cAAc,EACpC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,EACpD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAChD,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAC5C,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CACrD,CAAC;AAEJ,QAAA,kBAAkB,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACtC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,gBAAgB,CAAC,IAAI,CACnB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;AACpC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,WAAW,CAAC,IAAI,CACd,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;AAC/B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,YAAY,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,iBAAiB,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACrC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,kBAAkB,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACzE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,gBAAgB,CAAC,IAAI,CACnB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;AACrE,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,cAAc,CAAC,IAAI,CACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,EACfA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EACtC,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;AACvC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,YAAY,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,EACfA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EACtC,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;AACvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC9B,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,cAAc,CAAC,IAAI,CACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;AAClC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,gBAAgB,CAAC,IAAI,CACnB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;AACpC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,CAAC,CAAC;AAC1C,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC/BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACjB,EACC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,IAAI,CACjDA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACjB,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,EACjC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC7B,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC,CACzC,EACD,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAAC,CAC1C,EACD,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACvC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAAC,CAC1C,EACD,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACvC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CACtB,EACD,KAAK,GAAG,IAAI,CAAC,KAAK,EAClB,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CACvD,EACD,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,EAC5D,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CACzE,EACD,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAC9C,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CACpC,EACD,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CACpC,EACD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CACnD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,YAAY,CAAC,CAAC,CAAC,CAChB,EACD,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAChD,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3C,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAE9C,aAAa,CAAC,CAAC,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1F,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,KAAI;AACnE,YAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CACtC,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAO,CAAC,CACvF,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,OAAO,CAAC,IAAI,CACV,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBD,WAAS,CAAC,KAAK,IAAG;AAChB,YAAA,OAAO,aAAa,CAAC,CAAC,iBAAiB,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CACtE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,CAAC,CAAC,EACfA,WAAS,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,KAAI;AACnD,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;aAC5D,CAAC,CACH,CAAC;SACH,CAAC,CACH,CAAC;QAEF,iBAAiB,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,WAAS,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,KAAI;YAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;AAC/E,gBAAA,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;AACpE,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5D,aAAA;YACD,OAAO,4BAA4B,CAAC,IAAI,CACtC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,YAAY,CAAC,CAAC,CAAC,EACfA,WAAS,CAAC,MAAK;AACb,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;aAC5D,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,KAAI;AACtD,YAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAe,CAAC;YAE5C,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/H,gBAAA,IAAI,KAAK,EAAE;oBACT,WAAW,GAAG,SAAS,CAAC;AACzB,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,WAAW,EAAE;AACf,wBAAA,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3B,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,MAAM,WAAW,GAA2B,EAAE,CAAC;AAC/C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,gBAAA,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACvB,SAAS;AACV,iBAAA;AACD,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,aAAA;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,WAAW,CAAC,IAAI,CACd,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,MAAM,EAAE,GAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YACvD,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,mBAAmB,GAAG,qBAAqB,EAAE,CAAC,GAAG,qBAAqB,GAAG,mBAAmB,CAAC,CAAC;AACxH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,eAAe,CAAC,IAAI,CAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;YACN,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,CAAC,CAAC;AAC/E,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,mBAAmB,CAAC,IAAI,CACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;YACN,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC;YACjD,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,uBAAuB,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBACvD,IAAI,CAAC,CAAC,EAAE,EAAE;AACR,oBAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACxC,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,YAAY,CAAC;AACzE,aAAA;iBAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,uBAAuB,CAAC,EAAE;AAClE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACtD,IAAI,CAAC,CAAC,EAAE,EAAE;AACR,oBAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACxC,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,MAAM,CAAC;AACnE,aAAA;iBAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,uBAAuB,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACzD,IAAI,CAAC,CAAC,EAAE,EAAE;AACR,oBAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACpC,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AACjE,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAE3D,sBAAsB,CAAC,IAAI,CACzB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK;YACP,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AAClE,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,oBAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC5C,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,EACF,GAAG,CAAC,MAAK;YACP,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,iBAAiB,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EAChCD,WAAS,CAAC,MAAK;AACb,YAAA,OAAO,8BAA8B,CAAC,IAAI,CACxC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC9B,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAGd,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,IAAI,CAAC,CAAC,CAAC,EACPC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EACfD,WAAS,CAAC,MAAK;YACb,cAAc,GAAG,IAAI,CAAC;AACtB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1C,IAAI,CAAC,CAAC,SAAS,EAAE;gBACf,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC1B,SAAS,CAAC,gBAAgB,EAAE,CAAC;AAC9B,aAAA;AACD,YAAA,OAAO,YAAY,CAAC,IAAI,CACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvC,CAAC,EACFA,WAAS,CAAC,MAAM,6BAA6B,CAAC,IAAI,CAChD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;gBACP,cAAc,GAAG,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AACrC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,CAAC,CAAC,SAAS,EAAE;oBACf,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC1B,SAAS,CAAC,gBAAgB,EAAE,CAAC;AAC9B,iBAAA;AACH,aAAC,CAAC,CACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAGd,QAAQ,CAAC,IAAI,CACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,IAAI,CAAC,CAAC,CAAC,EACP,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB,aAAA;AACH,SAAC,CAAC,EACFC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAK;YACP,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,aAAA;SACF,CAAC,EACF,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,CAAC,MAKf,EAAE,YAAwB,GAAA,KAAK,EAAE,QAAA,GAAoB,KAAK,KAAI;AAC7D,YAAA,MAAM,EACJ,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EACnH,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,GAC5H,GAAG,MAAM,CAAC;AACX,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,QAAQ,IAAI,CAAC,MAAM,EAC9H,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,YAAY,IAAI,WAAW,IAAI,cAAc,CAAC;gBACpF,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE;AAC9C,oBAAA,MAAM,iBAAiB,IAAI,UAAU,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,EACzF,UAAU,GAAG,UAAU,IAAI,QAAQ,KAAK,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AACzG,oBAAA,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,eAAe,IAAI,UAAU,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC;yBACjI,UAAU,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,EACjE,YAA0C,CAAC;oBAE7C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,YAAY,IAAI,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC,EAC5E,IAAI,GAAuE;wBACzE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ;wBAC5D,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,yBAAyB;qBACzF,CAAC;AAEJ,oBAAA,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC1C,wBAAA,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAC7E,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;wBACnG,YAAY,GAAG,sBAAsB,CAAC;wBACtC,SAAS,GAAG,oBAAoB,CAAC;AAClC,qBAAA;AAAM,yBAAA;wBACL,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;wBAC7I,YAAY,GAAG,sBAAsB,CAAC;wBACtC,SAAS,GAAG,mBAAmB,CAAC;AACjC,qBAAA;AAED,oBAAA,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;AAE/B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;AAExC,oBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAE5C,oBAAA,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;oBAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAEhB,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAChC,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAChE,gCAAgC,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACxE,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC;oBAEvE,IAAI,IAAI,CAAC,yBAAyB,EAAE;wBAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,qBAAA;AAED,oBAAA,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;oBAEvB,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB;AACvD,yBAAC,iBAAiB,IAAI,iBAAiB,IAAI,+BAA+B,CAAC,EAAE;wBAC7E,IAAI,iBAAiB,KAAK,gCAAgC,EAAE;AAC1D,4BAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;4BAE5B,IAAI,IAAI,CAAC,aAAa,EAAE;gCACtB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/C,6BAAA;AACD,4BAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,4BAAA,MAAM,MAAM,GAAoB;AAC9B,gCAAA,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,CAAC,EAAE,UAAU;AAC5D,gCAAA,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB;gCAC5C,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;6BAC7D,CAAC;AACF,4BAAA,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AAC7B,4BAAA,IAAI,UAAU,EAAE;AACd,gCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACtI,6BAAA;AACF,yBAAA;wBACD,OAAO;AACR,qBAAA;oBAED,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,MAAM,CAAC,iBAAiB,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvH,yBAAC,yBAAyB,GAAG,+BAA+B,IAAI,6BAA6B,CAAC;AAC9F,yBAAC,gCAAgC,IAAI,yBAAyB,GAAG,+BAA+B,CAAC,EAAE;AACnG,wBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAE5B,wBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;AAClC,4BAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,4BAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACnC,yBAAA;wBAED,IAAI,IAAI,CAAC,aAAa,EAAE;4BACtB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C,yBAAA;AACD,wBAAA,MAAM,MAAM,GAAoB;4BAC9B,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,6BAA6B;4BAC5E,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK;4BAC/D,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;yBAC7D,CAAC;AACF,wBAAA,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AAC7B,wBAAA,IAAI,UAAU,EAAE;AACd,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACtI,yBAAA;wBACD,OAAO;AACR,qBAAA;oBAED,IAAI,UAAU,KAAK,yBAAyB;yBACzC,CAAC,yBAAyB,IAAI,CAAC,IAAI,yBAAyB,GAAG,6BAA6B;6BAC1F,UAAU,KAAK,6BAA6B,IAAI,iBAAiB,KAAK,yBAAyB,CAAC,CAAC,EAAE;AACtG,wBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;wBAE5B,IAAI,IAAI,CAAC,aAAa,EAAE;4BACtB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/C,yBAAA;AACD,wBAAA,MAAM,MAAM,GAAoB;AAC9B,4BAAA,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU;4BACpG,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;yBACpF,CAAC;AACF,wBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,wBAAA,IAAI,UAAU,EAAE;AACd,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACtI,yBAAA;wBACD,OAAO;AACR,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACtI,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;QAEF,IAAI,SAAS,GAA2B,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,kDAAkD,CAAC,CAAC;AAChG,QAAA,aAAa,CAAC,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS;AAC/I,YAAA,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,0BAA0B,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW;SAC9I,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CACH,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EACnH,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE,YAAY,EAChH,KAAI;YACH,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvB,YAAY,GAAG,IAAI,CAAC;gBACpB,SAAS,GAAG,KAAK,CAAC;AACnB,aAAA;YAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,IAAI,0BAA0B,CAAC,YAAY,EACzG,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,eAAe,IAAI,CAAC,EAC5F,aAAa,GAAG,UAAU,IAAI,QAAQ,EAAE,YAAY,IAAI,CAAC,KAAK,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC,EACzF,OAAO,GAAG,UAAU,KAAK,CAAC,IAAI,UAAU,KAAK,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EACvG,kBAAkB,GAAG,WAAW,IAAI,CAAC,YAAY,IAAI,aAAa,IAAI,CAAC,WAAW,KAAK,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,iDAAiD,CAAC,EACpK,oBAAoB,GAAG,mBAAmB,IAAI,WAAW,IAAI,CAAC,YAAY,KAAK,aAAa,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC;AACjJ,iBAAC,QAAQ,GAAG,iDAAiD,IAAI,aAAa,CAAC,CAAC;AACpF,YAAA,IAAI,mBAAmB,EAAE;AACvB,gBAAA,IAAI,kBAAkB,EAAE;oBACtB,eAAe,CAAC,OAAO,CAAC;AACtB,wBAAA,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY;AACjI,wBAAA,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa;AAC7H,qBAAA,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;oBACvC,OAAO;AACR,iBAAA;gBAED,eAAe,CAAC,OAAO,EAAE,CAAC;AAC3B,aAAA;YAED,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,MAAM,CAAC;oBACL,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAO,EAAE,UAAU,EAAE,UAAW,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY;AACvJ,oBAAA,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa;AAC7H,iBAAA,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;AACxC,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BA,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,aAAa,CAAC,EAC1B,IAAI,CAAC,CAAC,CAAC,CACR,EACC,eAAe,GAAG,IAAI,CAAC,kBAAmB,CAAC,OAAO,EAClD,kBAAkB,GAAG,IAAI,CAAC,kBAAmB,CAAC,UAAU,EACxD,gBAAgB,GAAG,IAAI,CAAC,kBAAmB,CAAC,gBAAgB,CAAC;AAE/D,QAAA,MAAM,aAAa,GAAG,CAAC,UAAsB,GAAA,KAAK,KAAI;AACpD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,UAAU,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,EACvG,gBAAgB,GAAG,UAAU,CAAC;gBAEhC,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,qBAAA;AACF,iBAAA;AAED,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBD,WAAS,CAAC,QAAQ,IAAG;AACnB,YAAA,OAAO,gBAAgB,CAAC,IAAI,CAC1B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,UAAU,IAAG;gBACf,sBAAsB,GAAG,UAAU,CAAC;AACpC,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC1G,IAAI,UAAU,IAAI,iBAAiB,EAAE;oBACnC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAChE,iBAAA;gBACD,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACnC,4BAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,yBAAA;AACD,wBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;AACjC,4BAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBA,WAAS,CAAC,QAAQ,IAAG;YACnB,OAAO,eAAe,CAAC,IAAI,CACzB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,CAAC;AACJ,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAG;YACf,aAAa,GAAG,UAAU,CAAC;AAC3B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1G,IAAI,UAAU,IAAI,iBAAiB,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC7D,aAAA;YACD,aAAa,CAAC,UAAU,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,SAAS,CAAC,IAAI,CACZ,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBA,WAAS,CAAC,QAAQ,IAAG;YACnB,OAAO,kBAAkB,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,CAAC;AACJ,SAAC,CAAC,EACF,GAAG,CAAC,UAAU,IAAG;YACf,aAAa,GAAG,UAAU,CAAC;AAC3B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1G,IAAI,UAAU,IAAI,iBAAiB,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC5D,aAAA;YACD,aAAa,CAAC,UAAU,CAAC,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAC9B,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAE7C,aAAa,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAClDC,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,KAAK,SAAS,CAAC,EAC9C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAC7E,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AAChB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,iBAAiB,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7BD,WAAS,CAAC,KAAK,IAAG;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EACvE,EACE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACnC,eAAe,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,EAAE,GAClD,GAAG,KAAK,CAAC;AACZ,YAAA,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,aAAa,IAAI,wBAAwB,EAAE,UAAU,GAAG,KAAK,CAAC;AAE9G,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,aAAA;YAED,eAAe,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAExC,YAAA,IAAI,iBAAiB,EAAE;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC5C,gBAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACzB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAEvG,oBAAA,IAAI,WAAW,EAAE;AACf,wBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAC3G,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC,WAAW,EACxG,iBAAiB,GAAG,UAAU,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,EAC3F,IAAI,GAAsE;AACxE,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ;4BACjG,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa;AAC9D,4BAAA,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC;AACrF,4BAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;yBAC3F,CAAC;wBAEJ,IAAI,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc;AAC/D,6BAAC,UAAU,GAAG,iBAAiB,CAAC,YAAY,GAAG,iBAAiB,CAAC,WAAW;4BAC5E,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AAE1D,wBAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,4BAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,yBAAA;AAED,wBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAE5B,wBAAA,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE;AACxF,4BAAA,GAAG,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,EAAE;yBAClE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAElC,wBAAA,iBAAiB,CAAC,SAAS,GAAG,SAAS,CAAC;AAExC,wBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;AAExC,wBAAA,IAAI,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3C,wBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAE5C,wBAAA,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;wBAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAEhB,IAAI,CAAC,eAAe,EAAE,CAAC;wBAEvB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1H,wBAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,4BAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,yBAAA;AACD,wBAAA,MAAM,UAAU,GAAG,UAAU,KAAK,iBAAiB,CAAC;AACpD,wBAAA,IAAI,CAAC,UAAU,IAAI,SAAS,GAAG,wBAAwB,EAAE;AACvD,4BAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAC5B,4BAAA,MAAM,MAAM,GAAoB;AAC9B,gCAAA,CAAC,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,UAAU,EAAE,QAAQ,EAAE,gBAAkC;AACvG,gCAAA,UAAU,EAAE,QAAQ;6BACrB,CAAC;AACF,4BAAA,iBAAiB,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AACtC,4BAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;AACnB,oCAAA,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ;AACtC,oCAAA,eAAe,EAAE,aAAa,GAAG,wBAAwB,EAAE,YAAY,EAAE,EAAE;iCAC5E,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzC,4BAAA,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5D,wBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,4BAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EACjC,iBAAiB,IAAI,UAAU,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,EAC7F,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;4BACrC,IAAI,iBAAiB,KAAK,UAAU,EAAE;AACpC,gCAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,gCAAA,MAAM,MAAM,GAAoB;AAC9B,oCAAA,CAAC,IAAI,CAAC,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,UAAU,EAAE,UAAU;oCAC3E,QAAQ,EAAE,gBAAkC,EAAE,QAAQ;iCACvD,CAAC;AACF,gCAAA,iBAAiB,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;gCACtC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAI;YACzB,MAAM,YAAY,GAAG,MAAoD,CAAC;AAC1E,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE;AAC5C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAuB,CAAC,CAAC;gBACtD,OAAO;AACR,aAAA;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC5C,aAAA;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/C,aAAA;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,YAAY,EAAE,EAAE,IAAI,CAAC;AACvB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAEzC,QAAA,aAAa,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtBC,QAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,OAAO,CAAC,IAAI,CACV,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAM,IAAG;AACX,YAAA,MAAM,IAAI,GAAU,EAAE,KAAK,EAAE,MAAO,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,EAAE,MAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAC3B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,CAAC,IAAG;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAC7B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,iBAAiB,IAAI,sBAAsB,IAAI,CAAC,CAAC,EAAE;AACtF,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBACvE,sBAAsB,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,sBAAsB,GAAG,CAAC,EAAE;oBAC5G,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,iBAAA;AACF,aAAA;YACD,IAAI,sBAAsB,GAAG,CAAC,EAAE;AAC9B,gBAAA,sBAAsB,EAAE,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,YAAY,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC;AAChC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAC9B,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,uBAAuB,IAAI,CAAC,EAAE;AAChC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/B,IAAI,CAAC,uBAAuB,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,uBAAuB,GAAG,CAAC,EAAE;oBAChH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,iBAAA;AACF,aAAA;YACD,IAAI,uBAAuB,GAAG,CAAC,EAAE;AAC/B,gBAAA,uBAAuB,EAAE,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,aAAa,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;AAEd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,GAAG,CAAC,MAAK;YACP,eAAe,CAAC,OAAO,EAAE,CAAC;AAC5B,SAAC,CAAC,CACH,CAAC,SAAS,EAAE,CAAC;KACf;IAEO,aAAa,CAAC,MAAM,GAAG,KAAK,EAAA;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,MAAM,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACtC,gBAAA,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,iBAAA;AACD,gBAAA,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC1C,aAAA;AACF,SAAA;KACF;IAEO,qBAAqB,GAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;AACvD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EACrC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,SAAA;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzC,IAAI,CAAC,CAAC,QAAQ,EAAE;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAChC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,EAC/F,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,EAC5E,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1C,IAAI,aAAa,IAAI,CAAC,EAAE;AACtB,oBAAA,MAAM,aAAa,IAAI,gBAAgB,IAAI,+BAA+B,CAAC,CAAC;AAC5E,oBAAA,IAAI,aAAa,EAAE;AACjB,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,wBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACpC,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AACpC,qBAAA;AAAM,yBAAA;wBACL,MAAM,WAAW,IAAI,gBAAgB,KAAK,aAAa,GAAG,+BAA+B,CAAC,CAAC,CAAC;AAC5F,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrC,wBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,wBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAC1C,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACzF,gBAAA,IAAI,CAAC,iBAAiB,IAAI,eAAe,EAAE;AACzC,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACnC,iBAAA;qBAAM,IAAI,iBAAiB,IAAI,eAAe,EAAE;AAC/C,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AACpC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AACpC,iBAAA;AACF,aAAA;AACF,SAAA;KACF;;IAEO,eAAe,CAAC,cAAuB,KAAK,EAAE,SAAkB,IAAI,EAAE,aAAsB,KAAK,EAAA;AACvG,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC1G,IAAI,UAAU,IAAI,iBAAiB,EAAE;AACnC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,UAAU,GAAG,iBAAiB,CAAC,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,EACzH,aAAa,IAAI,UAAU,GAAG,iBAAiB,CAAC,YAAY,GAAG,iBAAiB,CAAC,WAAW,CAAC,EAC7F,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,EACxG,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,iBAAiB,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,iBAAiB,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7G,YAAA,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAClH,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAC/B,KAAK,GAAG,IAAI,WAAW,CAAC;gBACtB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU;AAChE,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAG,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AACxE,gBAAA,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU;gBAC3D,UAAU;gBACV,UAAU;gBACV,KAAK,EAAE,CAAC,iBAAiB,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC/H,UAAU;AACX,aAAA,CAAC,CAAC;AACL,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAA;AAED,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAA;AACF,SAAA;KACF;AAEO,IAAA,2BAA2B,CAAC,CAAkB,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;AACxC,QAAA,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;KACzC;AAEO,IAAA,iBAAiB,CAAC,CAAsB,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC5C,OAAO,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC/D;AAEO,IAAA,oBAAoB,CAAC,CAAsB,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC5C,OAAO,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;KACjE;AAEO,IAAA,mBAAmB,CAAC,CAAsB,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC5C,OAAO,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;KACvE;AAEO,IAAA,aAAa,CAAC,CAAa,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;QAChC,OAAO,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;KAC9C;AAEO,IAAA,SAAS,CAAC,CAAkB,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;QACtC,OAAO,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;KACrD;AAEO,IAAA,6BAA6B,CAAC,YAAiD,EAAA;AACrF,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC5C,YAAA,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO;AACR,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,IAAI,EAAE;YAC/C,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,6BAA6B,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACnG,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,6BAA6B,EAAE;AAC5E,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBAC9E,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;AAC7B,oBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,CAAC;oBACzE,IAAI,CAAC,sBAAsB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBACtF,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC5D,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;AAEpC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEhD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAE5E,IAAI,CAAC,CAAC,gBAAgB,EAAE;YACtB,MAAM,KAAK,GAA6B,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,YAAA,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3C,oBAAA,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACf,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,SAAS,EAAE;gBACpC,MAAM,IAAI,GAAG,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxE,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3C,gBAAA,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACd,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,gBAAA,CAAC,EAAE,CAAC;AACL,aAAA;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACpD,SAAA;KACF;IAEO,qBAAqB,GAAA;QAC3B,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACvC;AAED;;AAEG;IACK,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACxB;IAEO,eAAe,CAAC,UAAmB,EAAE,SAAiB,EAAA;QAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,EACtF,IAAI,GAAG,SAAS,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;AACvD,YAAA,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAG,EAAA,IAAI,CAAG,EAAAR,IAAE,EAAE,CAAC;AAC9C,SAAA;KACF;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,EAAM,EAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACxC;AAED;;AAEG;AACH,IAAA,KAAK,CAAC,EAAM,EAAE,KAAwB,GAAA,eAAe,CAAC,IAAI,EAAA;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KACzD;AAED;;AAEG;AACH,IAAA,QAAQ,CAAC,EAAM,EAAE,KAA0B,IAAI,EAAE,UAAiC,IAAI,EAAA;AACpF,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EACpD,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,EACrC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,EAClC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QACtC,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,MAAM,eAAe,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,YAAA,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,KAAK,wBAAwB,EAAE,EAAE,EAAE,MAAK;gBAC1H,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;aACxC;AACF,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,EAAA,GAA0B,IAAI,EAAE,UAAiC,IAAI,EAAA;AACjF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACzC,QAAA,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AACD,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EACpD,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,EACrC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,EAClC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QACtC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,EACzI,eAAe,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,SAAS,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,gBAAA,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,KAAK,wBAAwB,EAAE,EAAE,EAAE,MAAK;AAC1H,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;iBACxC;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED;;;AAGG;IACH,eAAe,CAAC,EAAe,EAAE,OAAwB,EAAA;AACvD,QAAA,MAAM,KAAK,CAAC,uEAAuE,CAAC,CAAC;KACtF;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,EAAA,GAA0B,IAAI,EAAE,UAAiC,IAAI,EAAA;AAC/E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACzC,QAAA,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AACD,QAAA,MAAM,QAAQ,IAAI,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAmB,EACxE,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,EACrC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,EAClC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QACtC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAC/H,eAAe,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;YACxC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,YAAA,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,KAAK,wBAAwB,EAAE,EAAE,EAAE,MAAK;AAC1H,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,gBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;aACxC;AACF,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,gBAAgB,CAAC,EAAM,EAAE,OAAgB,EAAE,EAAuB,EAAA;AACxE,QAAA,IAAI,OAAO,EAAE;YACX,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,EAAE,EAAE;gBACR,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;AACD,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,EAAE,IAAI,CAAC;AACR,SAAA;KACF;IAES,OAAO,GAAA;QACf,MAAM,YAAY,GAAiC,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;AACxC,QAAA,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC1C;AAED;;AAEG;IACO,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,CAAC,kBAAkB,EAAE;YACxB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,kBAAkB,CAAC,GAAG,EAAE,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,QAAA,IAAI,iBAAiB,EAAE;YACrB,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC3B,SAAA;KACF;AAED;;;AAGG;IACH,uBAAuB,GAAA;AACrB,QAAA,MAAM,KAAK,CAAC,mFAAmF,CAAC,CAAC;KAClG;AAED;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;KACF;IAEQ,WAAW,GAAA;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC5B,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACjC,YAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC;AAC1C,SAAA;AAED,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC7C,IAAI,EAAE,OAAO,EAAE,CAAC;AACjB,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC7C,IAAI,EAAE,OAAO,EAAE,CAAC;AACjB,aAAA;AACF,SAAA;KACF;;AAzuGc,sBAAQ,CAAA,QAAA,GAAW,CAAE,CAAA;mHADzB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAFtB,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAc7B,oBAAoB,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGX,gBAAgB,EAGb,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAgB,EAG7B,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mBAAmB,oDCpGpD,g8DA4Bc,EAAA,MAAA,EAAA,CAAA,soBAAA,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,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsB,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FDmDD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAXlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAGrB,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,qBAAqB;AAC/B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,SAAS,EAAA,SAAA,EAC/B,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,EAAA,QAAA,EAAA,g8DAAA,EAAA,MAAA,EAAA,CAAA,soBAAA,CAAA,EAAA,CAAA;0EAerD,UAAU,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;gBAI9C,iBAAiB,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAInD,iBAAiB,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAItD,kBAAkB,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAA;gBAapD,QAAQ,EAAA,CAAA;sBADP,MAAM;gBAOP,WAAW,EAAA,CAAA;sBADV,MAAM;gBAOP,gBAAgB,EAAA,CAAA;sBADf,MAAM;gBAOP,WAAW,EAAA,CAAA;sBADV,MAAM;gBAOP,QAAQ,EAAA,CAAA;sBADP,MAAM;gBAOP,UAAU,EAAA,CAAA;sBADT,MAAM;gBAOP,kBAAkB,EAAA,CAAA;sBADjB,MAAM;gBAOP,gBAAgB,EAAA,CAAA;sBADf,MAAM;gBAuBH,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBA6BF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBA6BF,sBAAsB,EAAA,CAAA;sBADzB,KAAK;gBA6BF,oBAAoB,EAAA,CAAA;sBADvB,KAAK;gBA6BF,OAAO,EAAA,CAAA;sBADV,KAAK;gBA6BF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBA6BF,aAAa,EAAA,CAAA;sBADhB,KAAK;gBA6BF,gCAAgC,EAAA,CAAA;sBADnC,KAAK;gBA4CF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAgBF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAsCF,WAAW,EAAA,CAAA;sBADd,KAAK;gBAwCF,YAAY,EAAA,CAAA;sBADf,KAAK;gBA8BF,aAAa,EAAA,CAAA;sBADhB,KAAK;gBA8BF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBA6BF,IAAI,EAAA,CAAA;sBADP,KAAK;gBA6BF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBA6BF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBAmCF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBAkCF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBAqBF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBAsBF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBA6BF,oBAAoB,EAAA,CAAA;sBADvB,KAAK;gBA6BF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBA0EF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBA6BF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBA6BF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBAgCF,yBAAyB,EAAA,CAAA;sBAD5B,KAAK;gBA+BF,YAAY,EAAA,CAAA;sBADf,KAAK;gBAmDF,aAAa,EAAA,CAAA;sBADhB,KAAK;gBAgCF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBA8BF,WAAW,EAAA,CAAA;sBADd,KAAK;gBA4BF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBA4BF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBA4BF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAoCF,aAAa,EAAA,CAAA;sBADhB,KAAK;gBA6BF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBA+BF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBA4BF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAqCQ,mBAAmB,EAAA,CAAA;sBADhC,KAAK;gBAiCF,WAAW,EAAA,CAAA;sBADd,KAAK;;;ME31CK,qBAAqB,CAAA;;kHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EALjB,YAAA,EAAA,CAAA,wBAAwB,CAE7B,EAAA,OAAA,EAAA,CAAA,YAAY,aADZ,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAIvB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAHtB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,wBAAwB,CAAC;oBACxC,OAAO,EAAE,CAAC,wBAAwB,CAAC;oBACnC,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCCY,eAAe,CAAA;;4GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EALX,YAAA,EAAA,CAAA,kBAAkB,CAEvB,EAAA,OAAA,EAAA,CAAA,YAAY,aADZ,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAIjB,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHhB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;oBAC7B,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCEY,uBAAuB,CAAA;;oHAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,iBALnB,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAE/B,YAAY,EAAE,eAAe,aAD7B,0BAA0B,CAAA,EAAA,CAAA,CAAA;qHAIzB,uBAAuB,EAAA,OAAA,EAAA,CAHxB,YAAY,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;2FAG5B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,0BAA0B,CAAC;oBAC1C,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACrC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;oBACxC,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCAY,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EALb,YAAA,EAAA,CAAA,oBAAoB,CAEzB,EAAA,OAAA,EAAA,CAAA,YAAY,aADZ,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAInB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,oBAAoB,CAAC;oBACpC,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCIY,gBAAgB,CAAA;;6GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;8GAAhB,gBAAgB,EAAA,YAAA,EAAA,CALZ,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAExB,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAD3E,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAIlB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAHjB,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;2FAG1E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;oBACtF,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCDY,gCAAgC,CAAA;;6HAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhC,gCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,iBAL5B,mCAAmC,CAAA,EAAA,OAAA,EAAA,CAExC,YAAY,EAAE,eAAe,aAD7B,mCAAmC,CAAA,EAAA,CAAA,CAAA;8HAIlC,gCAAgC,EAAA,OAAA,EAAA,CAHjC,YAAY,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;2FAG5B,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,mCAAmC,CAAC;oBACnD,OAAO,EAAE,CAAC,mCAAmC,CAAC;AAC9C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;oBACxC,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;MCCY,yBAAyB,CAAA;;sHAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iBALnB,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAEjC,YAAY,EAAE,qBAAqB,aADnC,4BAA4B,CAAA,EAAA,CAAA,CAAA;uHAI7B,yBAAyB,EAAA,OAAA,EAAA,CAHxB,YAAY,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;2FAGpC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,4BAA4B,CAAC;oBAC5C,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACvC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;AAC9C,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;AACtD,iBAAA,CAAA;;;MCEY,qBAAqB,CAAA;;kHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,YAAA,EAAA,CALf,eAAe,CAEpB,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,gCAAgC,EAAE,yBAAyB,CAAA,EAAA,OAAA,EAAA,CADzE,eAAe,CAAA,EAAA,CAAA,CAAA;AAIhB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAHpB,OAAA,EAAA,CAAA,YAAY,EAAE,gCAAgC,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;2FAG1E,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,eAAe,CAAC;oBAC/B,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,gCAAgC,EAAE,yBAAyB,CAAC;oBACpF,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA,CAAA;;;MCAY,0BAA0B,CAAA;;uHAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,iBALpB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEzB,YAAY,EAAE,qBAAqB,aADnC,oBAAoB,CAAA,EAAA,CAAA,CAAA;wHAIrB,0BAA0B,EAAA,OAAA,EAAA,CAHzB,YAAY,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;2FAGpC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,oBAAoB,CAAC;oBACpC,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAC/B,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;oBAC9C,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA,CAAA;;;MCIY,mBAAmB,CAAA;;gHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EALf,YAAA,EAAA,CAAA,sBAAsB,CAE3B,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,qBAAqB,aAD1G,sBAAsB,CAAA,EAAA,CAAA,CAAA;iHAIrB,mBAAmB,EAAA,OAAA,EAAA,CAHpB,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;2FAGzG,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,sBAAsB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,OAAO,EAAE,CAAC,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,qBAAqB,CAAC;oBACrH,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;ACRD;;;;;AAKG;MACmB,4BAA4B,CAAA;AAYjD;;ACvBD;;AAEG;;ACFH;;AAEG;;;;"}