@acorex/cdk 21.0.1-next.8 → 21.0.1-next.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-cdk-drag-drop.mjs +2 -4
- package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/acorex-cdk-full-screen.mjs +12 -1
- package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
- package/fesm2022/acorex-cdk-overlay.mjs +371 -10
- package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
- package/fesm2022/acorex-cdk-z-index.mjs +35 -0
- package/fesm2022/acorex-cdk-z-index.mjs.map +1 -0
- package/full-screen/index.d.ts +5 -0
- package/overlay/index.d.ts +94 -5
- package/package.json +13 -9
- package/z-index/README.md +3 -0
- package/z-index/index.d.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-cdk-drag-drop.mjs","sources":["../tmp-esm2022/drag-drop/lib/drag-handle.directive.js","../tmp-esm2022/drag-drop/lib/drop-list.directive.js","../tmp-esm2022/drag-drop/lib/drag.directive.js","../tmp-esm2022/drag-drop/lib/drop-zone.directive.js","../tmp-esm2022/drag-drop/lib/drag-drop.module.js","../tmp-esm2022/drag-drop/lib/drag-drop.utils.js","../tmp-esm2022/drag-drop/acorex-cdk-drag-drop.js"],"sourcesContent":["import { Directive, ElementRef, inject, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXDragHandleDirective {\n constructor() {\n this.el = inject(ElementRef);\n this.element = signal(this.el.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.15\", type: AXDragHandleDirective, isStandalone: true, selector: \"[axDragHandle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDragHandle]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1oYW5kbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSVUsT0FBRSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDaEQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsbURBQUMsQ0FBQztLQUNsRDsrR0FIWSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJhZ0hhbmRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyYWdIYW5kbGVEaXJlY3RpdmUge1xuICBwcml2YXRlIGVsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgZWxlbWVudCA9IHNpZ25hbCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xufVxuIl19","import { NXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, contentChildren, Directive, ElementRef, inject, input, NgZone, output, PLATFORM_ID, Renderer2, signal, } from '@angular/core';\nimport { AXDragDirective } from './drag.directive';\nimport * as i0 from \"@angular/core\";\n/**\n * @Directive axDropList\n *\n * Manages a list of draggable items (`axDrag`), enabling sorting within the list\n * and transferring items between compatible lists. It handles the visual shifting\n * of items during a drag operation to provide a clear preview of the drop location.\n *\n * This directive automatically detects `gap` from flexbox/grid layouts and handles\n * items with variable sizes and margins.\n */\nexport class AXDropListDirective extends NXComponent {\n constructor() {\n super(...arguments);\n this._zone = inject(NgZone);\n this._renderer = inject(Renderer2);\n this._cdr = inject(ChangeDetectorRef);\n this._platformId = inject(PLATFORM_ID);\n this._hostEl = inject(ElementRef);\n // --- Public API: Inputs and Outputs ---\n /** Boolean input matching the directive selector name for conditional application. */\n this.axDropList = input(true, ...(ngDevMode ? [{ debugName: \"axDropList\", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));\n /** Whether sorting within this list is disabled. */\n this.sortingDisabled = input(false, ...(ngDevMode ? [{ debugName: \"sortingDisabled\" }] : []));\n /** The group this drop list belongs to. Dragging is only allowed between lists of the same group. */\n this.dropListGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropListGroup\" }] : []));\n /** The layout orientation of the list. */\n this.dropListOrientation = input('vertical', ...(ngDevMode ? [{ debugName: \"dropListOrientation\" }] : []));\n /** Emits when an item is dropped into the list. */\n this.dropListDropped = output();\n /** The `axDrag` directives that are direct children of this list. */\n this._draggableItems = contentChildren(AXDragDirective, ...(ngDevMode ? [{ debugName: \"_draggableItems\", descendants: false }] : [{ descendants: false }]));\n // --- Internal State Management ---\n /** The native element of the drop list. */\n this.element = this._hostEl.nativeElement;\n /** The draggable item currently being moved over this list. */\n this._activeDragItem = signal(null, ...(ngDevMode ? [{ debugName: \"_activeDragItem\" }] : []));\n /** The calculated index where the placeholder/item should be. */\n this._placeholderIndex = signal(-1, ...(ngDevMode ? [{ debugName: \"_placeholderIndex\" }] : []));\n /** A snapshot of the items' data and geometry at the start of the drag. */\n this._cachedItems = signal([], ...(ngDevMode ? [{ debugName: \"_cachedItems\" }] : []));\n /** The list's initial bounding box, used to calculate scroll delta. */\n this._listInitialRect = signal(null, ...(ngDevMode ? [{ debugName: \"_listInitialRect\" }] : []));\n /** The detected `gap` of the list for the current orientation. */\n this._listGap = signal(0, ...(ngDevMode ? [{ debugName: \"_listGap\" }] : []));\n /** A signal-based alias for the orientation input for internal use. */\n this._orientation = this.dropListOrientation;\n /** DOM placeholder element for inter-list drags */\n this._placeholderElement = null;\n }\n ngOnInit() {\n if (isPlatformBrowser(this._platformId)) {\n this.element.dataset['axDropList'] = 'true';\n this.element.classList.add('ax-drop-list-sorting-transition');\n // Store reference to this directive instance on the element for drag directive access\n this.element['__axContext__'] = this;\n }\n }\n ngAfterContentInit() {\n this._cdr.detectChanges();\n }\n ngOnDestroy() {\n // Clean up placeholder element if directive destroyed during drag\n this._removePlaceholderElement();\n }\n // --- Public Methods (for internal library use) ---\n /** Checks if the given drag item is the one currently active in this list. */\n isDragActiveForThisList(dragItem) {\n return this._activeDragItem() === dragItem;\n }\n /**\n * Prepares the list for sorting when a drag operation starts from within this list.\n * @param dragItem The item that is being dragged.\n */\n prepareSort(dragItem) {\n if (!this.axDropList() || this.sortingDisabled() || this._activeDragItem() || dragItem.dragDisabled())\n return;\n this._activeDragItem.set(dragItem);\n this.element.classList.add('ax-drop-list-sorting-active');\n requestAnimationFrame(() => {\n this._zone.run(() => {\n this._cacheGeometry();\n const placeholderIdx = this._cachedItems().findIndex((data) => data.item === dragItem);\n this._placeholderIndex.set(placeholderIdx);\n });\n });\n }\n /**\n * Prepares the list for receiving an item that started dragging from another list.\n * @param dragItem The item entering this list.\n */\n enter(dragItem) {\n if (!this.axDropList() || this.sortingDisabled() || this.isDragActiveForThisList(dragItem))\n return;\n // Clean up any existing placeholder from previous list\n this._removePlaceholderElement();\n this._activeDragItem.set(dragItem);\n this.element.classList.add('ax-drop-list-sorting-active');\n requestAnimationFrame(() => this._zone.run(() => this._cacheGeometry()));\n }\n /**\n * Calculates the new placeholder index based on the pointer's position and applies visual shifts.\n * @param event The pointer move event.\n * @param dragItem The item being dragged.\n */\n sort(event, dragItem) {\n if (!this.axDropList() ||\n !this.isDragActiveForThisList(dragItem) ||\n this.sortingDisabled() ||\n !this._listInitialRect())\n return;\n const pointerPosition = this._orientation() === 'vertical' ? event.clientY : event.clientX;\n const newPlaceholderIndex = this._calculatePlaceholderIndex(pointerPosition);\n if (this._placeholderIndex() !== newPlaceholderIndex) {\n this._placeholderIndex.set(newPlaceholderIndex);\n this._applyVisualShifts();\n }\n }\n /**\n * Finalizes the drop, emits the drop event, and resets the list's state.\n * @param event The pointer up event.\n * @param droppedItem The item that was dropped.\n * @param sourceList The list where the drag originated.\n */\n finalizeSort(event, droppedItem, sourceList) {\n if (!this.axDropList() || !this.isDragActiveForThisList(droppedItem) || this.sortingDisabled()) {\n this.resetSortStateAndStyles(sourceList);\n return;\n }\n const activeItem = this._activeDragItem();\n const targetSlotIndex = this._placeholderIndex();\n if (!activeItem || targetSlotIndex === -1) {\n this.resetSortStateAndStyles(sourceList);\n return;\n }\n const previousIndex = sourceList._cachedItems().findIndex((d) => d.item === activeItem);\n // Adjust the index for array mutation if moving an item to a later position in the same list.\n const currentIndex = sourceList === this && previousIndex !== -1 && targetSlotIndex > previousIndex\n ? targetSlotIndex - 1\n : targetSlotIndex;\n this.dropListDropped.emit({\n nativeEvent: event,\n sender: this,\n item: activeItem,\n previousIndex,\n currentIndex,\n container: this,\n previousContainer: sourceList,\n });\n this.resetSortStateAndStyles(sourceList);\n }\n /** Resets the transforms on all items and cancels the current sort operation. */\n cancelSort(dragItem) {\n if (dragItem && !this.isDragActiveForThisList(dragItem))\n return;\n this._resetAllTransforms();\n this.resetSortState();\n }\n /** Resets transforms but keeps the active state, used when moving between lists. */\n cancelSortPreview() {\n if (!this._activeDragItem())\n return;\n this._resetAllTransforms();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === this._activeDragItem());\n this._placeholderIndex.set(originalIndex > -1 ? originalIndex : -1);\n }\n // --- Private Helper Methods ---\n /** Caches the geometry of the list and its items at the start of a drag. */\n _cacheGeometry() {\n this._listInitialRect.set(this.element.getBoundingClientRect());\n this._detectAndCacheListGap();\n const items = this._draggableItems().map((itemDraggable) => {\n const el = itemDraggable.element();\n const style = window.getComputedStyle(el);\n const rect = el.getBoundingClientRect();\n return {\n item: itemDraggable,\n element: el,\n initialRect: rect,\n width: rect.width,\n height: rect.height,\n margins: {\n top: parseFloat(style.marginTop),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft),\n right: parseFloat(style.marginRight),\n },\n };\n });\n this._cachedItems.set(items);\n }\n /** Detects and caches the `gap` property from the list's computed styles. */\n _detectAndCacheListGap() {\n const listStyle = window.getComputedStyle(this.element);\n const gapValue = listStyle.getPropertyValue('gap');\n if (gapValue && gapValue !== 'normal') {\n const gapParts = gapValue.split(' ');\n const rowGap = parseFloat(gapParts[0]);\n const columnGap = parseFloat(gapParts[1] || gapParts[0]);\n this._listGap.set(this._orientation() === 'vertical' ? rowGap : columnGap);\n }\n else {\n this._listGap.set(0);\n }\n }\n /**\n * Determines the new placeholder index by comparing the pointer position against the\n * midpoints of the other items in the list.\n * @param pointerPosition The clientX or clientY of the pointer.\n * @returns The calculated placeholder index.\n */\n _calculatePlaceholderIndex(pointerPosition) {\n const activeItem = this._activeDragItem();\n const listRect = this._listInitialRect();\n if (!activeItem || !listRect)\n return -1;\n const cachedItems = this._cachedItems();\n const originalIndex = cachedItems.findIndex((d) => d.item === activeItem);\n const siblings = cachedItems.filter((d) => d.item !== activeItem);\n const scrollDelta = this._orientation() === 'vertical'\n ? this.element.getBoundingClientRect().top - listRect.top\n : this.element.getBoundingClientRect().left - listRect.left;\n let newIndexInSiblings = -1;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n const itemMidPoint = (this._orientation() === 'vertical' ? sibling.initialRect.top : sibling.initialRect.left) +\n scrollDelta +\n (this._orientation() === 'vertical' ? sibling.height : sibling.width) / 2;\n if (pointerPosition < itemMidPoint) {\n newIndexInSiblings = i;\n break;\n }\n }\n if (newIndexInSiblings === -1) {\n newIndexInSiblings = siblings.length;\n }\n // Map the index from the 'siblings' array back to the original `_cachedItems` array.\n const potentialPlaceholderIndex = originalIndex > -1 && newIndexInSiblings >= originalIndex ? newIndexInSiblings + 1 : newIndexInSiblings;\n // A drag starting from outside the list doesn't have an original index.\n if (originalIndex === -1) {\n return potentialPlaceholderIndex;\n }\n // --- New logic: Prevent crossing disabled items ---\n const start = Math.min(originalIndex, potentialPlaceholderIndex);\n const end = Math.max(originalIndex, potentialPlaceholderIndex);\n for (let i = start; i < end; i++) {\n const itemData = cachedItems[i];\n if (itemData.item !== activeItem && itemData.item.dragDisabled()) {\n // We've hit a disabled \"wall\". Stop the placeholder at the boundary.\n if (potentialPlaceholderIndex > originalIndex) {\n return i; // Dragging down/right: stop *before* the wall.\n }\n else {\n return i + 1; // Dragging up/left: stop *after* the wall.\n }\n }\n }\n return potentialPlaceholderIndex;\n }\n /** Applies visual shifts - uses placeholder for inter-list, transforms for intra-list. */\n _applyVisualShifts() {\n const activeItem = this._activeDragItem();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n const isIntraListDrag = originalIndex > -1;\n const placeholderIndex = this._placeholderIndex();\n // Check if this is an \"onto-node\" drop list (no items, just a drop target)\n const isOntoNodeList = this.element.dataset['dropType'] === 'onto-node';\n if (!isIntraListDrag && activeItem && !isOntoNodeList && this._cachedItems().length > 0) {\n // --- INTER-LIST DRAG: Use DOM placeholder for reorder lists with items ---\n this._updatePlaceholderElement(activeItem, placeholderIndex);\n }\n else {\n // --- INTRA-LIST DRAG: Use transforms (works well for same-list reordering) ---\n this._removePlaceholderElement();\n const getItemSpace = (itemData) => this._orientation() === 'vertical'\n ? itemData.height + itemData.margins.top + itemData.margins.bottom\n : itemData.width + itemData.margins.left + itemData.margins.right;\n const draggedItemSize = isIntraListDrag ? getItemSpace(this._cachedItems()[originalIndex]) : 0;\n this._cachedItems().forEach((data, index) => {\n if (data.item.dragDisabled()) {\n this._renderer.removeStyle(data.element, 'transform');\n return;\n }\n const transform = this._calculateTransform(index, originalIndex, draggedItemSize, getItemSpace);\n this._renderer.setStyle(data.element, 'transform', transform ? `${this._orientation() === 'vertical' ? 'translateY' : 'translateX'}(${transform}px)` : '');\n });\n }\n }\n /** Creates or moves the placeholder element for inter-list drags */\n _updatePlaceholderElement(activeItem, targetIndex) {\n const rect = activeItem.elementRect();\n if (!rect)\n return;\n // Create placeholder as a clone of the dragged element\n if (!this._placeholderElement) {\n // Clone the entire dragged element\n const sourceElement = activeItem.element();\n this._placeholderElement = sourceElement.cloneNode(true);\n // Mark it as a placeholder\n this._renderer.addClass(this._placeholderElement, 'ax-drop-placeholder');\n this._renderer.addClass(this._placeholderElement, 'ax-drag-placeholder');\n // Prevent interaction with cloned content\n this._renderer.setStyle(this._placeholderElement, 'pointerEvents', 'none');\n // Add faded styling to indicate it's a placeholder\n this._renderer.setStyle(this._placeholderElement, 'opacity', '0.4');\n this._renderer.setStyle(this._placeholderElement, 'transition', 'all 200ms ease');\n }\n // Insert/move placeholder at target index\n const items = this._cachedItems();\n if (targetIndex >= 0 && targetIndex < items.length) {\n const targetItem = items[targetIndex];\n if (targetItem && targetItem.element) {\n this._renderer.insertBefore(this.element, this._placeholderElement, targetItem.element);\n }\n else {\n // Fallback: append at end if target item invalid\n this._renderer.appendChild(this.element, this._placeholderElement);\n }\n }\n else {\n // Insert at end\n this._renderer.appendChild(this.element, this._placeholderElement);\n }\n }\n /** Removes the placeholder element if it exists */\n _removePlaceholderElement() {\n if (this._placeholderElement) {\n this._renderer.removeChild(this.element, this._placeholderElement);\n this._placeholderElement = null;\n }\n }\n /**\n * Calculates the required transform in pixels for a single item.\n * @param index The index of the item to transform.\n * @param originalIndex The original index of the dragged item (-1 if from another list).\n * @param draggedItemSize The size (including margins) of the item being dragged.\n * @param getItemSpace A helper function to get an item's size including margins.\n * @returns The transform value in pixels.\n */\n _calculateTransform(index, originalIndex, draggedItemSize, getItemSpace) {\n const targetIndex = this._placeholderIndex();\n const listGap = this._listGap();\n if (originalIndex > -1) {\n // --- Intra-list Drag ---\n if (index === originalIndex) {\n // The dragged item moves by the sum of the sizes of the items it passes over, PLUS the gaps between them.\n let offset = 0;\n if (targetIndex > originalIndex) {\n // Dragging down/right\n for (let i = originalIndex + 1; i < targetIndex; i++) {\n offset += getItemSpace(this._cachedItems()[i]) + listGap;\n }\n }\n else {\n // Dragging up/left\n for (let i = targetIndex; i < originalIndex; i++) {\n offset -= getItemSpace(this._cachedItems()[i]) + listGap;\n }\n }\n return offset;\n }\n else {\n // It's a sibling item that needs to make space.\n // It moves by the size of the dragged item, plus ONE gap to fill the void.\n const shift = draggedItemSize + listGap;\n if (originalIndex < targetIndex && index > originalIndex && index < targetIndex) {\n return -shift;\n }\n else if (originalIndex > targetIndex && index >= targetIndex && index < originalIndex) {\n return shift;\n }\n }\n }\n else {\n // --- Inter-list Drag (from another list) ---\n if (index >= targetIndex) {\n // An item from another list enters. Siblings shift by its size plus ONE gap.\n return draggedItemSize + listGap;\n }\n }\n return 0;\n }\n /** Resets the state of this list and the source list after a drop. */\n resetSortStateAndStyles(sourceList) {\n const listsToReset = new Set([this, sourceList]);\n listsToReset.forEach((list) => {\n if (list) {\n list._resetAllTransforms();\n list.resetSortState();\n }\n });\n }\n /** Removes all `transform` styles from the items in this list. */\n _resetAllTransforms() {\n this._cachedItems().forEach((data) => this._renderer.setStyle(data.element, 'transform', ''));\n this._removePlaceholderElement(); // Clean up inter-list placeholder\n }\n /** Resets the internal state of the directive to its initial values. */\n resetSortState() {\n this.element.classList.remove('ax-drop-list-sorting-active');\n this._activeDragItem.set(null);\n this._cachedItems.set([]);\n this._placeholderIndex.set(-1);\n this._listInitialRect.set(null);\n this._listGap.set(0);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.15\", type: AXDropListDirective, isStandalone: true, selector: \"[axDropList]\", inputs: { axDropList: { classPropertyName: \"axDropList\", publicName: \"axDropList\", isSignal: true, isRequired: false, transformFunction: null }, sortingDisabled: { classPropertyName: \"sortingDisabled\", publicName: \"sortingDisabled\", isSignal: true, isRequired: false, transformFunction: null }, dropListGroup: { classPropertyName: \"dropListGroup\", publicName: \"dropListGroup\", isSignal: true, isRequired: false, transformFunction: null }, dropListOrientation: { classPropertyName: \"dropListOrientation\", publicName: \"dropListOrientation\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropListDropped: \"dropListDropped\" }, queries: [{ propertyName: \"_draggableItems\", predicate: AXDragDirective, isSignal: true }], exportAs: [\"axDropList\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropList]',\n exportAs: 'axDropList',\n }]\n }], propDecorators: { axDropList: [{ type: i0.Input, args: [{ isSignal: true, alias: \"axDropList\", required: false }] }], sortingDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: \"sortingDisabled\", required: false }] }], dropListGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropListGroup\", required: false }] }], dropListOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropListOrientation\", required: false }] }], dropListDropped: [{ type: i0.Output, args: [\"dropListDropped\"] }], _draggableItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXDragDirective), { ...{ descendants: false }, isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1saXN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLWxpc3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQXFCbkQ7Ozs7Ozs7OztHQVNHO0FBS0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS21CLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixTQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFdkUseUNBQXlDO1FBRXpDLHNGQUFzRjtRQUN0RixlQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksOENBQUksU0FBUyxFQUFFLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxPQUF4RSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxHQUFDLENBQUM7UUFDckcsb0RBQW9EO1FBQ3BELG9CQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssMkRBQUMsQ0FBQztRQUMvQixxR0FBcUc7UUFDckcsa0JBQWEsR0FBRyxLQUFLLG1FQUFVLENBQUM7UUFDaEMsMENBQTBDO1FBQzFDLHdCQUFtQixHQUFHLEtBQUssQ0FBNEIsVUFBVSwrREFBQyxDQUFDO1FBQ25FLG1EQUFtRDtRQUNuRCxvQkFBZSxHQUFHLE1BQU0sRUFBMEIsQ0FBQztRQUVuRCxxRUFBcUU7UUFDNUQsb0JBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxtREFBSSxXQUFXLEVBQUUsS0FBSyxPQUFwQixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBQyxDQUFDO1FBRXBGLG9DQUFvQztRQUVwQywyQ0FBMkM7UUFDbEMsWUFBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRTlDLCtEQUErRDtRQUM5QyxvQkFBZSxHQUFHLE1BQU0sQ0FBeUIsSUFBSSwyREFBQyxDQUFDO1FBQ3hFLGlFQUFpRTtRQUNoRCxzQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLDZEQUFDLENBQUM7UUFDaEQsMkVBQTJFO1FBQzFELGlCQUFZLEdBQUcsTUFBTSxDQUE4QixFQUFFLHdEQUFDLENBQUM7UUFDeEUsdUVBQXVFO1FBQ3RELHFCQUFnQixHQUFHLE1BQU0sQ0FBaUIsSUFBSSw0REFBQyxDQUFDO1FBQ2pFLGtFQUFrRTtRQUNqRCxhQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsb0RBQUMsQ0FBQztRQUV0Qyx1RUFBdUU7UUFDdEQsaUJBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFekQsbURBQW1EO1FBQzNDLHdCQUFtQixHQUF1QixJQUFJLENBQUM7S0EwWnhEO0lBeFpDLFFBQVE7UUFDTixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUM5RCxzRkFBc0Y7WUFDckYsSUFBSSxDQUFDLE9BQWlFLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xHLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELG9EQUFvRDtJQUVwRCw4RUFBOEU7SUFDOUUsdUJBQXVCLENBQUMsUUFBeUI7UUFDL0MsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssUUFBUSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsUUFBeUI7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPO1FBRTlHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRTFELHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUF5QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUVuRyx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDMUQscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxLQUFtQixFQUFFLFFBQXlCO1FBQ2pELElBQ0UsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztZQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBRXhCLE9BQU87UUFFVCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzNGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTdFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxLQUFtQixFQUFFLFdBQTRCLEVBQUUsVUFBK0I7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUMvRixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3hGLDhGQUE4RjtRQUM5RixNQUFNLFlBQVksR0FDaEIsVUFBVSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLElBQUksZUFBZSxHQUFHLGFBQWE7WUFDNUUsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFFdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsTUFBTSxFQUFFLElBQUk7WUFDWixJQUFJLEVBQUUsVUFBVTtZQUNoQixhQUFhO1lBQ2IsWUFBWTtZQUNaLFNBQVMsRUFBRSxJQUFJO1lBQ2YsaUJBQWlCLEVBQUUsVUFBVTtTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixVQUFVLENBQUMsUUFBMEI7UUFDbkMsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUFFLE9BQU87UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxpQ0FBaUM7SUFFakMsNEVBQTRFO0lBQ3BFLGNBQWM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDekQsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN4QyxPQUFPO2dCQUNMLElBQUksRUFBRSxhQUFhO2dCQUNuQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRTtvQkFDUCxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ2hDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztvQkFDdEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUNsQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7aUJBQ3JDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELDZFQUE2RTtJQUNyRSxzQkFBc0I7UUFDNUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSywwQkFBMEIsQ0FBQyxlQUF1QjtRQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQ2YsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVU7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUc7WUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUVoRSxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUNoQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDekYsV0FBVztnQkFDWCxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFNUUsSUFBSSxlQUFlLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ25DLGtCQUFrQixHQUFHLENBQUMsQ0FBQztnQkFDdkIsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlCLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkMsQ0FBQztRQUVELHFGQUFxRjtRQUNyRixNQUFNLHlCQUF5QixHQUM3QixhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksa0JBQWtCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBRTFHLHdFQUF3RTtRQUN4RSxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8seUJBQXlCLENBQUM7UUFDbkMsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFL0QsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDakUscUVBQXFFO2dCQUNyRSxJQUFJLHlCQUF5QixHQUFHLGFBQWEsRUFBRSxDQUFDO29CQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtDQUErQztnQkFDM0QsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDJDQUEyQztnQkFDM0QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsMEZBQTBGO0lBQ2xGLGtCQUFrQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztRQUNsRixNQUFNLGVBQWUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVsRCwyRUFBMkU7UUFDM0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssV0FBVyxDQUFDO1FBRXhFLElBQUksQ0FBQyxlQUFlLElBQUksVUFBVSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEYsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLGdGQUFnRjtZQUNoRixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUVqQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQTBCLEVBQUUsRUFBRSxDQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssVUFBVTtnQkFDaEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUNsRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUV0RSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9GLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO29CQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN0RCxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDckIsSUFBSSxDQUFDLE9BQU8sRUFDWixXQUFXLEVBQ1gsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3ZHLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsb0VBQW9FO0lBQzVELHlCQUF5QixDQUFDLFVBQTJCLEVBQUUsV0FBbUI7UUFDaEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUVsQix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlCLG1DQUFtQztZQUNuQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFnQixDQUFDO1lBRXhFLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUV6RSwwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUzRSxtREFBbUQ7WUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEMsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFRCxtREFBbUQ7SUFDM0MseUJBQXlCO1FBQy9CLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLG1CQUFtQixDQUN6QixLQUFhLEVBQ2IsYUFBcUIsRUFDckIsZUFBdUIsRUFDdkIsWUFBZ0Q7UUFFaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsMEJBQTBCO1lBQzFCLElBQUksS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUM1QiwwR0FBMEc7Z0JBQzFHLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLFdBQVcsR0FBRyxhQUFhLEVBQUUsQ0FBQztvQkFDaEMsc0JBQXNCO29CQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUNyRCxNQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDM0QsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbUJBQW1CO29CQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ2pELE1BQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO29CQUMzRCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdEQUFnRDtnQkFDaEQsMkVBQTJFO2dCQUMzRSxNQUFNLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTyxDQUFDO2dCQUN4QyxJQUFJLGFBQWEsR0FBRyxXQUFXLElBQUksS0FBSyxHQUFHLGFBQWEsSUFBSSxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQ2hGLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLENBQUM7cUJBQU0sSUFBSSxhQUFhLEdBQUcsV0FBVyxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDO29CQUN4RixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sOENBQThDO1lBQzlDLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUN6Qiw2RUFBNkU7Z0JBQzdFLE9BQU8sZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELHNFQUFzRTtJQUM5RCx1QkFBdUIsQ0FBQyxVQUErQjtRQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2pELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtFQUFrRTtJQUMxRCxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztJQUN0RSxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDOytHQXBjVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixvdkJBcUJhLGVBQWU7OzRGQXJCL0MsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsWUFBWTtpQkFDdkI7NGxCQXNCNEMsZUFBZSxRQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnLmRpcmVjdGl2ZSc7XG5cbi8qKiBEZXNjcmliZXMgdGhlIGNhY2hlZCBnZW9tZXRyaWMgZGF0YSBvZiBhIGRyYWdnYWJsZSBpdGVtIHdpdGhpbiB0aGUgbGlzdC4gKi9cbmludGVyZmFjZSBEcm9wTGlzdEl0ZW1EYXRhIHtcbiAgaXRlbTogQVhEcmFnRGlyZWN0aXZlO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgaW5pdGlhbFJlY3Q6IERPTVJlY3Q7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtYXJnaW5zOiB7IHRvcDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyByaWdodDogbnVtYmVyIH07XG59XG5cbi8qKiBFdmVudCBvYmplY3QgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbnRvIGEgZHJvcCBsaXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWERyb3BMaXN0RHJvcHBlZEV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWERyb3BMaXN0RGlyZWN0aXZlLCBNb3VzZUV2ZW50PiB7XG4gIGl0ZW06IEFYRHJhZ0RpcmVjdGl2ZTtcbiAgY3VycmVudEluZGV4OiBudW1iZXI7XG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgY29udGFpbmVyOiBBWERyb3BMaXN0RGlyZWN0aXZlO1xuICBwcmV2aW91c0NvbnRhaW5lcjogQVhEcm9wTGlzdERpcmVjdGl2ZTtcbn1cblxuLyoqXG4gKiBARGlyZWN0aXZlIGF4RHJvcExpc3RcbiAqXG4gKiBNYW5hZ2VzIGEgbGlzdCBvZiBkcmFnZ2FibGUgaXRlbXMgKGBheERyYWdgKSwgZW5hYmxpbmcgc29ydGluZyB3aXRoaW4gdGhlIGxpc3RcbiAqIGFuZCB0cmFuc2ZlcnJpbmcgaXRlbXMgYmV0d2VlbiBjb21wYXRpYmxlIGxpc3RzLiBJdCBoYW5kbGVzIHRoZSB2aXN1YWwgc2hpZnRpbmdcbiAqIG9mIGl0ZW1zIGR1cmluZyBhIGRyYWcgb3BlcmF0aW9uIHRvIHByb3ZpZGUgYSBjbGVhciBwcmV2aWV3IG9mIHRoZSBkcm9wIGxvY2F0aW9uLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBgZ2FwYCBmcm9tIGZsZXhib3gvZ3JpZCBsYXlvdXRzIGFuZCBoYW5kbGVzXG4gKiBpdGVtcyB3aXRoIHZhcmlhYmxlIHNpemVzIGFuZCBtYXJnaW5zLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcm9wTGlzdF0nLFxuICBleHBvcnRBczogJ2F4RHJvcExpc3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyb3BMaXN0RGlyZWN0aXZlIGV4dGVuZHMgTlhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RFbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLy8gLS0tIFB1YmxpYyBBUEk6IElucHV0cyBhbmQgT3V0cHV0cyAtLS1cblxuICAvKiogQm9vbGVhbiBpbnB1dCBtYXRjaGluZyB0aGUgZGlyZWN0aXZlIHNlbGVjdG9yIG5hbWUgZm9yIGNvbmRpdGlvbmFsIGFwcGxpY2F0aW9uLiAqL1xuICBheERyb3BMaXN0ID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIH0pO1xuICAvKiogV2hldGhlciBzb3J0aW5nIHdpdGhpbiB0aGlzIGxpc3QgaXMgZGlzYWJsZWQuICovXG4gIHNvcnRpbmdEaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgLyoqIFRoZSBncm91cCB0aGlzIGRyb3AgbGlzdCBiZWxvbmdzIHRvLiBEcmFnZ2luZyBpcyBvbmx5IGFsbG93ZWQgYmV0d2VlbiBsaXN0cyBvZiB0aGUgc2FtZSBncm91cC4gKi9cbiAgZHJvcExpc3RHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcbiAgLyoqIFRoZSBsYXlvdXQgb3JpZW50YXRpb24gb2YgdGhlIGxpc3QuICovXG4gIGRyb3BMaXN0T3JpZW50YXRpb24gPSBpbnB1dDwnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnPigndmVydGljYWwnKTtcbiAgLyoqIEVtaXRzIHdoZW4gYW4gaXRlbSBpcyBkcm9wcGVkIGludG8gdGhlIGxpc3QuICovXG4gIGRyb3BMaXN0RHJvcHBlZCA9IG91dHB1dDxBWERyb3BMaXN0RHJvcHBlZEV2ZW50PigpO1xuXG4gIC8qKiBUaGUgYGF4RHJhZ2AgZGlyZWN0aXZlcyB0aGF0IGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhpcyBsaXN0LiAqL1xuICByZWFkb25seSBfZHJhZ2dhYmxlSXRlbXMgPSBjb250ZW50Q2hpbGRyZW4oQVhEcmFnRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KTtcblxuICAvLyAtLS0gSW50ZXJuYWwgU3RhdGUgTWFuYWdlbWVudCAtLS1cblxuICAvKiogVGhlIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBkcm9wIGxpc3QuICovXG4gIHJlYWRvbmx5IGVsZW1lbnQgPSB0aGlzLl9ob3N0RWwubmF0aXZlRWxlbWVudDtcblxuICAvKiogVGhlIGRyYWdnYWJsZSBpdGVtIGN1cnJlbnRseSBiZWluZyBtb3ZlZCBvdmVyIHRoaXMgbGlzdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlRHJhZ0l0ZW0gPSBzaWduYWw8QVhEcmFnRGlyZWN0aXZlIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbmRleCB3aGVyZSB0aGUgcGxhY2Vob2xkZXIvaXRlbSBzaG91bGQgYmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYWNlaG9sZGVySW5kZXggPSBzaWduYWwoLTEpO1xuICAvKiogQSBzbmFwc2hvdCBvZiB0aGUgaXRlbXMnIGRhdGEgYW5kIGdlb21ldHJ5IGF0IHRoZSBzdGFydCBvZiB0aGUgZHJhZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVkSXRlbXMgPSBzaWduYWw8cmVhZG9ubHkgRHJvcExpc3RJdGVtRGF0YVtdPihbXSk7XG4gIC8qKiBUaGUgbGlzdCdzIGluaXRpYWwgYm91bmRpbmcgYm94LCB1c2VkIHRvIGNhbGN1bGF0ZSBzY3JvbGwgZGVsdGEuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RJbml0aWFsUmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgZGV0ZWN0ZWQgYGdhcGAgb2YgdGhlIGxpc3QgZm9yIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0R2FwID0gc2lnbmFsKDApO1xuXG4gIC8qKiBBIHNpZ25hbC1iYXNlZCBhbGlhcyBmb3IgdGhlIG9yaWVudGF0aW9uIGlucHV0IGZvciBpbnRlcm5hbCB1c2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX29yaWVudGF0aW9uID0gdGhpcy5kcm9wTGlzdE9yaWVudGF0aW9uO1xuXG4gIC8qKiBET00gcGxhY2Vob2xkZXIgZWxlbWVudCBmb3IgaW50ZXItbGlzdCBkcmFncyAqL1xuICBwcml2YXRlIF9wbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuZGF0YXNldFsnYXhEcm9wTGlzdCddID0gJ3RydWUnO1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWRyb3AtbGlzdC1zb3J0aW5nLXRyYW5zaXRpb24nKTtcbiAgICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byB0aGlzIGRpcmVjdGl2ZSBpbnN0YW5jZSBvbiB0aGUgZWxlbWVudCBmb3IgZHJhZyBkaXJlY3RpdmUgYWNjZXNzXG4gICAgICAodGhpcy5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2F4Q29udGV4dF9fPzogQVhEcm9wTGlzdERpcmVjdGl2ZSB9KVsnX19heENvbnRleHRfXyddID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIHBsYWNlaG9sZGVyIGVsZW1lbnQgaWYgZGlyZWN0aXZlIGRlc3Ryb3llZCBkdXJpbmcgZHJhZ1xuICAgIHRoaXMuX3JlbW92ZVBsYWNlaG9sZGVyRWxlbWVudCgpO1xuICB9XG5cbiAgLy8gLS0tIFB1YmxpYyBNZXRob2RzIChmb3IgaW50ZXJuYWwgbGlicmFyeSB1c2UpIC0tLVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIGRyYWcgaXRlbSBpcyB0aGUgb25lIGN1cnJlbnRseSBhY3RpdmUgaW4gdGhpcyBsaXN0LiAqL1xuICBpc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJdGVtKCkgPT09IGRyYWdJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciBzb3J0aW5nIHdoZW4gYSBkcmFnIG9wZXJhdGlvbiBzdGFydHMgZnJvbSB3aXRoaW4gdGhpcyBsaXN0LlxuICAgKiBAcGFyYW0gZHJhZ0l0ZW0gVGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBkcmFnZ2VkLlxuICAgKi9cbiAgcHJlcGFyZVNvcnQoZHJhZ0l0ZW06IEFYRHJhZ0RpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5heERyb3BMaXN0KCkgfHwgdGhpcy5zb3J0aW5nRGlzYWJsZWQoKSB8fCB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpIHx8IGRyYWdJdGVtLmRyYWdEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlR2VvbWV0cnkoKTtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZHggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZGF0YSkgPT4gZGF0YS5pdGVtID09PSBkcmFnSXRlbSk7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KHBsYWNlaG9sZGVySWR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciByZWNlaXZpbmcgYW4gaXRlbSB0aGF0IHN0YXJ0ZWQgZHJhZ2dpbmcgZnJvbSBhbm90aGVyIGxpc3QuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBlbnRlcmluZyB0aGlzIGxpc3QuXG4gICAqL1xuICBlbnRlcihkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF4RHJvcExpc3QoKSB8fCB0aGlzLnNvcnRpbmdEaXNhYmxlZCgpIHx8IHRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG5cbiAgICAvLyBDbGVhbiB1cCBhbnkgZXhpc3RpbmcgcGxhY2Vob2xkZXIgZnJvbSBwcmV2aW91cyBsaXN0XG4gICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5fY2FjaGVHZW9tZXRyeSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbmV3IHBsYWNlaG9sZGVyIGluZGV4IGJhc2VkIG9uIHRoZSBwb2ludGVyJ3MgcG9zaXRpb24gYW5kIGFwcGxpZXMgdmlzdWFsIHNoaWZ0cy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBwb2ludGVyIG1vdmUgZXZlbnQuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxuICAgKi9cbiAgc29ydChldmVudDogUG9pbnRlckV2ZW50LCBkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuYXhEcm9wTGlzdCgpIHx8XG4gICAgICAhdGhpcy5pc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbSkgfHxcbiAgICAgIHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHxcbiAgICAgICF0aGlzLl9saXN0SW5pdGlhbFJlY3QoKVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHBvaW50ZXJQb3NpdGlvbiA9IHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBldmVudC5jbGllbnRZIDogZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBuZXdQbGFjZWhvbGRlckluZGV4ID0gdGhpcy5fY2FsY3VsYXRlUGxhY2Vob2xkZXJJbmRleChwb2ludGVyUG9zaXRpb24pO1xuXG4gICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVySW5kZXgoKSAhPT0gbmV3UGxhY2Vob2xkZXJJbmRleCkge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQobmV3UGxhY2Vob2xkZXJJbmRleCk7XG4gICAgICB0aGlzLl9hcHBseVZpc3VhbFNoaWZ0cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5hbGl6ZXMgdGhlIGRyb3AsIGVtaXRzIHRoZSBkcm9wIGV2ZW50LCBhbmQgcmVzZXRzIHRoZSBsaXN0J3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgcG9pbnRlciB1cCBldmVudC5cbiAgICogQHBhcmFtIGRyb3BwZWRJdGVtIFRoZSBpdGVtIHRoYXQgd2FzIGRyb3BwZWQuXG4gICAqIEBwYXJhbSBzb3VyY2VMaXN0IFRoZSBsaXN0IHdoZXJlIHRoZSBkcmFnIG9yaWdpbmF0ZWQuXG4gICAqL1xuICBmaW5hbGl6ZVNvcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJvcHBlZEl0ZW06IEFYRHJhZ0RpcmVjdGl2ZSwgc291cmNlTGlzdDogQVhEcm9wTGlzdERpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5heERyb3BMaXN0KCkgfHwgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJvcHBlZEl0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVzZXRTb3J0U3RhdGVBbmRTdHlsZXMoc291cmNlTGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGlmICghYWN0aXZlSXRlbSB8fCB0YXJnZXRTbG90SW5kZXggPT09IC0xKSB7XG4gICAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBzb3VyY2VMaXN0Ll9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBBZGp1c3QgdGhlIGluZGV4IGZvciBhcnJheSBtdXRhdGlvbiBpZiBtb3ZpbmcgYW4gaXRlbSB0byBhIGxhdGVyIHBvc2l0aW9uIGluIHRoZSBzYW1lIGxpc3QuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID1cbiAgICAgIHNvdXJjZUxpc3QgPT09IHRoaXMgJiYgcHJldmlvdXNJbmRleCAhPT0gLTEgJiYgdGFyZ2V0U2xvdEluZGV4ID4gcHJldmlvdXNJbmRleFxuICAgICAgICA/IHRhcmdldFNsb3RJbmRleCAtIDFcbiAgICAgICAgOiB0YXJnZXRTbG90SW5kZXg7XG5cbiAgICB0aGlzLmRyb3BMaXN0RHJvcHBlZC5lbWl0KHtcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIGl0ZW06IGFjdGl2ZUl0ZW0sXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY29udGFpbmVyOiB0aGlzLFxuICAgICAgcHJldmlvdXNDb250YWluZXI6IHNvdXJjZUxpc3QsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgdHJhbnNmb3JtcyBvbiBhbGwgaXRlbXMgYW5kIGNhbmNlbHMgdGhlIGN1cnJlbnQgc29ydCBvcGVyYXRpb24uICovXG4gIGNhbmNlbFNvcnQoZHJhZ0l0ZW0/OiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoZHJhZ0l0ZW0gJiYgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG4gICAgdGhpcy5fcmVzZXRBbGxUcmFuc2Zvcm1zKCk7XG4gICAgdGhpcy5yZXNldFNvcnRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0cmFuc2Zvcm1zIGJ1dCBrZWVwcyB0aGUgYWN0aXZlIHN0YXRlLCB1c2VkIHdoZW4gbW92aW5nIGJldHdlZW4gbGlzdHMuICovXG4gIGNhbmNlbFNvcnRQcmV2aWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKSkgcmV0dXJuO1xuICAgIHRoaXMuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKTtcbiAgICB0aGlzLl9wbGFjZWhvbGRlckluZGV4LnNldChvcmlnaW5hbEluZGV4ID4gLTEgPyBvcmlnaW5hbEluZGV4IDogLTEpO1xuICB9XG5cbiAgLy8gLS0tIFByaXZhdGUgSGVscGVyIE1ldGhvZHMgLS0tXG5cbiAgLyoqIENhY2hlcyB0aGUgZ2VvbWV0cnkgb2YgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBkcmFnLiAqL1xuICBwcml2YXRlIF9jYWNoZUdlb21ldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQodGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLl9kZXRlY3RBbmRDYWNoZUxpc3RHYXAoKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZHJhZ2dhYmxlSXRlbXMoKS5tYXAoKGl0ZW1EcmFnZ2FibGUpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbURyYWdnYWJsZS5lbGVtZW50KCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW06IGl0ZW1EcmFnZ2FibGUsXG4gICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICBpbml0aWFsUmVjdDogcmVjdCxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIG1hcmdpbnM6IHtcbiAgICAgICAgICB0b3A6IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wKSxcbiAgICAgICAgICBib3R0b206IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKSxcbiAgICAgICAgICBsZWZ0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpLFxuICAgICAgICAgIHJpZ2h0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblJpZ2h0KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMuc2V0KGl0ZW1zKTtcbiAgfVxuXG4gIC8qKiBEZXRlY3RzIGFuZCBjYWNoZXMgdGhlIGBnYXBgIHByb3BlcnR5IGZyb20gdGhlIGxpc3QncyBjb21wdXRlZCBzdHlsZXMuICovXG4gIHByaXZhdGUgX2RldGVjdEFuZENhY2hlTGlzdEdhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpO1xuICAgIGNvbnN0IGdhcFZhbHVlID0gbGlzdFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2dhcCcpO1xuICAgIGlmIChnYXBWYWx1ZSAmJiBnYXBWYWx1ZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgIGNvbnN0IGdhcFBhcnRzID0gZ2FwVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IHJvd0dhcCA9IHBhcnNlRmxvYXQoZ2FwUGFydHNbMF0pO1xuICAgICAgY29uc3QgY29sdW1uR2FwID0gcGFyc2VGbG9hdChnYXBQYXJ0c1sxXSB8fCBnYXBQYXJ0c1swXSk7XG4gICAgICB0aGlzLl9saXN0R2FwLnNldCh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gcm93R2FwIDogY29sdW1uR2FwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5ldyBwbGFjZWhvbGRlciBpbmRleCBieSBjb21wYXJpbmcgdGhlIHBvaW50ZXIgcG9zaXRpb24gYWdhaW5zdCB0aGVcbiAgICogbWlkcG9pbnRzIG9mIHRoZSBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHBvaW50ZXJQb3NpdGlvbiBUaGUgY2xpZW50WCBvciBjbGllbnRZIG9mIHRoZSBwb2ludGVyLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBwbGFjZWhvbGRlciBpbmRleC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpO1xuICAgIGNvbnN0IGxpc3RSZWN0ID0gdGhpcy5fbGlzdEluaXRpYWxSZWN0KCk7XG4gICAgaWYgKCFhY3RpdmVJdGVtIHx8ICFsaXN0UmVjdCkgcmV0dXJuIC0xO1xuXG4gICAgY29uc3QgY2FjaGVkSXRlbXMgPSB0aGlzLl9jYWNoZWRJdGVtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBjYWNoZWRJdGVtcy5maW5kSW5kZXgoKGQpID0+IGQuaXRlbSA9PT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3Qgc2libGluZ3MgPSBjYWNoZWRJdGVtcy5maWx0ZXIoKGQpID0+IGQuaXRlbSAhPT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3Qgc2Nyb2xsRGVsdGEgPVxuICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBsaXN0UmVjdC50b3BcbiAgICAgICAgOiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGxpc3RSZWN0LmxlZnQ7XG5cbiAgICBsZXQgbmV3SW5kZXhJblNpYmxpbmdzID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgICAgY29uc3QgaXRlbU1pZFBvaW50ID1cbiAgICAgICAgKHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBzaWJsaW5nLmluaXRpYWxSZWN0LnRvcCA6IHNpYmxpbmcuaW5pdGlhbFJlY3QubGVmdCkgK1xuICAgICAgICBzY3JvbGxEZWx0YSArXG4gICAgICAgICh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gc2libGluZy5oZWlnaHQgOiBzaWJsaW5nLndpZHRoKSAvIDI7XG5cbiAgICAgIGlmIChwb2ludGVyUG9zaXRpb24gPCBpdGVtTWlkUG9pbnQpIHtcbiAgICAgICAgbmV3SW5kZXhJblNpYmxpbmdzID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0luZGV4SW5TaWJsaW5ncyA9PT0gLTEpIHtcbiAgICAgIG5ld0luZGV4SW5TaWJsaW5ncyA9IHNpYmxpbmdzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBNYXAgdGhlIGluZGV4IGZyb20gdGhlICdzaWJsaW5ncycgYXJyYXkgYmFjayB0byB0aGUgb3JpZ2luYWwgYF9jYWNoZWRJdGVtc2AgYXJyYXkuXG4gICAgY29uc3QgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCA9XG4gICAgICBvcmlnaW5hbEluZGV4ID4gLTEgJiYgbmV3SW5kZXhJblNpYmxpbmdzID49IG9yaWdpbmFsSW5kZXggPyBuZXdJbmRleEluU2libGluZ3MgKyAxIDogbmV3SW5kZXhJblNpYmxpbmdzO1xuXG4gICAgLy8gQSBkcmFnIHN0YXJ0aW5nIGZyb20gb3V0c2lkZSB0aGUgbGlzdCBkb2Vzbid0IGhhdmUgYW4gb3JpZ2luYWwgaW5kZXguXG4gICAgaWYgKG9yaWdpbmFsSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleDtcbiAgICB9XG5cbiAgICAvLyAtLS0gTmV3IGxvZ2ljOiBQcmV2ZW50IGNyb3NzaW5nIGRpc2FibGVkIGl0ZW1zIC0tLVxuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4ob3JpZ2luYWxJbmRleCwgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCk7XG4gICAgY29uc3QgZW5kID0gTWF0aC5tYXgob3JpZ2luYWxJbmRleCwgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCk7XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSBjYWNoZWRJdGVtc1tpXTtcbiAgICAgIGlmIChpdGVtRGF0YS5pdGVtICE9PSBhY3RpdmVJdGVtICYmIGl0ZW1EYXRhLml0ZW0uZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgICAgLy8gV2UndmUgaGl0IGEgZGlzYWJsZWQgXCJ3YWxsXCIuIFN0b3AgdGhlIHBsYWNlaG9sZGVyIGF0IHRoZSBib3VuZGFyeS5cbiAgICAgICAgaWYgKHBvdGVudGlhbFBsYWNlaG9sZGVySW5kZXggPiBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGk7IC8vIERyYWdnaW5nIGRvd24vcmlnaHQ6IHN0b3AgKmJlZm9yZSogdGhlIHdhbGwuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGkgKyAxOyAvLyBEcmFnZ2luZyB1cC9sZWZ0OiBzdG9wICphZnRlciogdGhlIHdhbGwuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvdGVudGlhbFBsYWNlaG9sZGVySW5kZXg7XG4gIH1cblxuICAvKiogQXBwbGllcyB2aXN1YWwgc2hpZnRzIC0gdXNlcyBwbGFjZWhvbGRlciBmb3IgaW50ZXItbGlzdCwgdHJhbnNmb3JtcyBmb3IgaW50cmEtbGlzdC4gKi9cbiAgcHJpdmF0ZSBfYXBwbHlWaXN1YWxTaGlmdHMoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IHRoaXMuX2NhY2hlZEl0ZW1zKCkuZmluZEluZGV4KChkKSA9PiBkLml0ZW0gPT09IGFjdGl2ZUl0ZW0pO1xuICAgIGNvbnN0IGlzSW50cmFMaXN0RHJhZyA9IG9yaWdpbmFsSW5kZXggPiAtMTtcbiAgICBjb25zdCBwbGFjZWhvbGRlckluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBcIm9udG8tbm9kZVwiIGRyb3AgbGlzdCAobm8gaXRlbXMsIGp1c3QgYSBkcm9wIHRhcmdldClcbiAgICBjb25zdCBpc09udG9Ob2RlTGlzdCA9IHRoaXMuZWxlbWVudC5kYXRhc2V0Wydkcm9wVHlwZSddID09PSAnb250by1ub2RlJztcblxuICAgIGlmICghaXNJbnRyYUxpc3REcmFnICYmIGFjdGl2ZUl0ZW0gJiYgIWlzT250b05vZGVMaXN0ICYmIHRoaXMuX2NhY2hlZEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuICAgICAgLy8gLS0tIElOVEVSLUxJU1QgRFJBRzogVXNlIERPTSBwbGFjZWhvbGRlciBmb3IgcmVvcmRlciBsaXN0cyB3aXRoIGl0ZW1zIC0tLVxuICAgICAgdGhpcy5fdXBkYXRlUGxhY2Vob2xkZXJFbGVtZW50KGFjdGl2ZUl0ZW0sIHBsYWNlaG9sZGVySW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLS0gSU5UUkEtTElTVCBEUkFHOiBVc2UgdHJhbnNmb3JtcyAod29ya3Mgd2VsbCBmb3Igc2FtZS1saXN0IHJlb3JkZXJpbmcpIC0tLVxuICAgICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7XG5cbiAgICAgIGNvbnN0IGdldEl0ZW1TcGFjZSA9IChpdGVtRGF0YTogRHJvcExpc3RJdGVtRGF0YSkgPT5cbiAgICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICAgID8gaXRlbURhdGEuaGVpZ2h0ICsgaXRlbURhdGEubWFyZ2lucy50b3AgKyBpdGVtRGF0YS5tYXJnaW5zLmJvdHRvbVxuICAgICAgICAgIDogaXRlbURhdGEud2lkdGggKyBpdGVtRGF0YS5tYXJnaW5zLmxlZnQgKyBpdGVtRGF0YS5tYXJnaW5zLnJpZ2h0O1xuXG4gICAgICBjb25zdCBkcmFnZ2VkSXRlbVNpemUgPSBpc0ludHJhTGlzdERyYWcgPyBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtvcmlnaW5hbEluZGV4XSkgOiAwO1xuXG4gICAgICB0aGlzLl9jYWNoZWRJdGVtcygpLmZvckVhY2goKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChkYXRhLml0ZW0uZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShkYXRhLmVsZW1lbnQsICd0cmFuc2Zvcm0nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGluZGV4LCBvcmlnaW5hbEluZGV4LCBkcmFnZ2VkSXRlbVNpemUsIGdldEl0ZW1TcGFjZSk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIGRhdGEuZWxlbWVudCxcbiAgICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgICB0cmFuc2Zvcm0gPyBgJHt0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gJ3RyYW5zbGF0ZVknIDogJ3RyYW5zbGF0ZVgnfSgke3RyYW5zZm9ybX1weClgIDogJycsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyBvciBtb3ZlcyB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudCBmb3IgaW50ZXItbGlzdCBkcmFncyAqL1xuICBwcml2YXRlIF91cGRhdGVQbGFjZWhvbGRlckVsZW1lbnQoYWN0aXZlSXRlbTogQVhEcmFnRGlyZWN0aXZlLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IGFjdGl2ZUl0ZW0uZWxlbWVudFJlY3QoKTtcbiAgICBpZiAoIXJlY3QpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSBwbGFjZWhvbGRlciBhcyBhIGNsb25lIG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgLy8gQ2xvbmUgdGhlIGVudGlyZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICAgIGNvbnN0IHNvdXJjZUVsZW1lbnQgPSBhY3RpdmVJdGVtLmVsZW1lbnQoKTtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IHNvdXJjZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgXG4gICAgICAvLyBNYXJrIGl0IGFzIGEgcGxhY2Vob2xkZXJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCwgJ2F4LWRyb3AtcGxhY2Vob2xkZXInKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCwgJ2F4LWRyYWctcGxhY2Vob2xkZXInKTtcbiAgICAgIFxuICAgICAgLy8gUHJldmVudCBpbnRlcmFjdGlvbiB3aXRoIGNsb25lZCBjb250ZW50XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGZhZGVkIHN0eWxpbmcgdG8gaW5kaWNhdGUgaXQncyBhIHBsYWNlaG9sZGVyXG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsICdvcGFjaXR5JywgJzAuNCcpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LCAndHJhbnNpdGlvbicsICdhbGwgMjAwbXMgZWFzZScpO1xuICAgIH1cblxuICAgIC8vIEluc2VydC9tb3ZlIHBsYWNlaG9sZGVyIGF0IHRhcmdldCBpbmRleFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fY2FjaGVkSXRlbXMoKTtcbiAgICBpZiAodGFyZ2V0SW5kZXggPj0gMCAmJiB0YXJnZXRJbmRleCA8IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGFyZ2V0SXRlbSA9IGl0ZW1zW3RhcmdldEluZGV4XTtcbiAgICAgIGlmICh0YXJnZXRJdGVtICYmIHRhcmdldEl0ZW0uZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsIHRhcmdldEl0ZW0uZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjazogYXBwZW5kIGF0IGVuZCBpZiB0YXJnZXQgaXRlbSBpbnZhbGlkXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCwgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5zZXJ0IGF0IGVuZFxuICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBwbGFjZWhvbGRlciBlbGVtZW50IGlmIGl0IGV4aXN0cyAqL1xuICBwcml2YXRlIF9yZW1vdmVQbGFjZWhvbGRlckVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcmVxdWlyZWQgdHJhbnNmb3JtIGluIHBpeGVscyBmb3IgYSBzaW5nbGUgaXRlbS5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byB0cmFuc2Zvcm0uXG4gICAqIEBwYXJhbSBvcmlnaW5hbEluZGV4IFRoZSBvcmlnaW5hbCBpbmRleCBvZiB0aGUgZHJhZ2dlZCBpdGVtICgtMSBpZiBmcm9tIGFub3RoZXIgbGlzdCkuXG4gICAqIEBwYXJhbSBkcmFnZ2VkSXRlbVNpemUgVGhlIHNpemUgKGluY2x1ZGluZyBtYXJnaW5zKSBvZiB0aGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxuICAgKiBAcGFyYW0gZ2V0SXRlbVNwYWNlIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBhbiBpdGVtJ3Mgc2l6ZSBpbmNsdWRpbmcgbWFyZ2lucy5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybSB2YWx1ZSBpbiBwaXhlbHMuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVUcmFuc2Zvcm0oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcmlnaW5hbEluZGV4OiBudW1iZXIsXG4gICAgZHJhZ2dlZEl0ZW1TaXplOiBudW1iZXIsXG4gICAgZ2V0SXRlbVNwYWNlOiAoaXRlbTogRHJvcExpc3RJdGVtRGF0YSkgPT4gbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGNvbnN0IGxpc3RHYXAgPSB0aGlzLl9saXN0R2FwKCk7XG5cbiAgICBpZiAob3JpZ2luYWxJbmRleCA+IC0xKSB7XG4gICAgICAvLyAtLS0gSW50cmEtbGlzdCBEcmFnIC0tLVxuICAgICAgaWYgKGluZGV4ID09PSBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgIC8vIFRoZSBkcmFnZ2VkIGl0ZW0gbW92ZXMgYnkgdGhlIHN1bSBvZiB0aGUgc2l6ZXMgb2YgdGhlIGl0ZW1zIGl0IHBhc3NlcyBvdmVyLCBQTFVTIHRoZSBnYXBzIGJldHdlZW4gdGhlbS5cbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgICAvLyBEcmFnZ2luZyBkb3duL3JpZ2h0XG4gICAgICAgICAgZm9yIChsZXQgaSA9IG9yaWdpbmFsSW5kZXggKyAxOyBpIDwgdGFyZ2V0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1TcGFjZSh0aGlzLl9jYWNoZWRJdGVtcygpW2ldKSArIGxpc3RHYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERyYWdnaW5nIHVwL2xlZnRcbiAgICAgICAgICBmb3IgKGxldCBpID0gdGFyZ2V0SW5kZXg7IGkgPCBvcmlnaW5hbEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIG9mZnNldCAtPSBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtpXSkgKyBsaXN0R2FwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhIHNpYmxpbmcgaXRlbSB0aGF0IG5lZWRzIHRvIG1ha2Ugc3BhY2UuXG4gICAgICAgIC8vIEl0IG1vdmVzIGJ5IHRoZSBzaXplIG9mIHRoZSBkcmFnZ2VkIGl0ZW0sIHBsdXMgT05FIGdhcCB0byBmaWxsIHRoZSB2b2lkLlxuICAgICAgICBjb25zdCBzaGlmdCA9IGRyYWdnZWRJdGVtU2l6ZSArIGxpc3RHYXA7XG4gICAgICAgIGlmIChvcmlnaW5hbEluZGV4IDwgdGFyZ2V0SW5kZXggJiYgaW5kZXggPiBvcmlnaW5hbEluZGV4ICYmIGluZGV4IDwgdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gLXNoaWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsSW5kZXggPiB0YXJnZXRJbmRleCAmJiBpbmRleCA+PSB0YXJnZXRJbmRleCAmJiBpbmRleCA8IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLS0tIEludGVyLWxpc3QgRHJhZyAoZnJvbSBhbm90aGVyIGxpc3QpIC0tLVxuICAgICAgaWYgKGluZGV4ID49IHRhcmdldEluZGV4KSB7XG4gICAgICAgIC8vIEFuIGl0ZW0gZnJvbSBhbm90aGVyIGxpc3QgZW50ZXJzLiBTaWJsaW5ncyBzaGlmdCBieSBpdHMgc2l6ZSBwbHVzIE9ORSBnYXAuXG4gICAgICAgIHJldHVybiBkcmFnZ2VkSXRlbVNpemUgKyBsaXN0R2FwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIHN0YXRlIG9mIHRoaXMgbGlzdCBhbmQgdGhlIHNvdXJjZSBsaXN0IGFmdGVyIGEgZHJvcC4gKi9cbiAgcHJpdmF0ZSByZXNldFNvcnRTdGF0ZUFuZFN0eWxlcyhzb3VyY2VMaXN0OiBBWERyb3BMaXN0RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdHNUb1Jlc2V0ID0gbmV3IFNldChbdGhpcywgc291cmNlTGlzdF0pO1xuICAgIGxpc3RzVG9SZXNldC5mb3JFYWNoKChsaXN0KSA9PiB7XG4gICAgICBpZiAobGlzdCkge1xuICAgICAgICBsaXN0Ll9yZXNldEFsbFRyYW5zZm9ybXMoKTtcbiAgICAgICAgbGlzdC5yZXNldFNvcnRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlbW92ZXMgYWxsIGB0cmFuc2Zvcm1gIHN0eWxlcyBmcm9tIHRoZSBpdGVtcyBpbiB0aGlzIGxpc3QuICovXG4gIHByaXZhdGUgX3Jlc2V0QWxsVHJhbnNmb3JtcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRJdGVtcygpLmZvckVhY2goKGRhdGEpID0+IHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGRhdGEuZWxlbWVudCwgJ3RyYW5zZm9ybScsICcnKSk7XG4gICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7IC8vIENsZWFuIHVwIGludGVyLWxpc3QgcGxhY2Vob2xkZXJcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBkaXJlY3RpdmUgdG8gaXRzIGluaXRpYWwgdmFsdWVzLiAqL1xuICByZXNldFNvcnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZHJvcC1saXN0LXNvcnRpbmctYWN0aXZlJyk7XG4gICAgdGhpcy5fYWN0aXZlRHJhZ0l0ZW0uc2V0KG51bGwpO1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zLnNldChbXSk7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQoLTEpO1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQobnVsbCk7XG4gICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gIH1cbn1cbiJdfQ==","import { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, DOCUMENT, Directive, ElementRef, NgZone, PLATFORM_ID, Renderer2, RendererStyleFlags2, ViewContainerRef, computed, contentChild, effect, inject, input, linkedSignal, output, signal, } from '@angular/core';\nimport { clamp } from 'lodash-es';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDropListDirective } from './drop-list.directive';\nimport * as i0 from \"@angular/core\";\n// Zone detection constants for nested drop lists (tree nodes)\nconst ZONE_TOP_THRESHOLD = 0.3; // Top 30% triggers reorder BEFORE\nconst ZONE_BOTTOM_THRESHOLD = 0.7; // Bottom 30% triggers reorder AFTER\n// Middle 40% (between thresholds) triggers drop INTO\nexport class AXDragDirective {\n constructor() {\n this.zone = inject(NgZone);\n this.document = inject(DOCUMENT);\n this.renderer = inject(Renderer2);\n this.cdr = inject(ChangeDetectorRef);\n this.platformId = inject(PLATFORM_ID);\n this.viewContainerRef = inject(ViewContainerRef);\n this.el = inject(ElementRef);\n this.handleDirective = contentChild(AXDragHandleDirective, ...(ngDevMode ? [{ debugName: \"handleDirective\" }] : []));\n this.axDrag = input(true, ...(ngDevMode ? [{ debugName: \"axDrag\", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));\n this.dragData = input(...(ngDevMode ? [undefined, { debugName: \"dragData\" }] : []));\n this.dragDisabled = input(false, ...(ngDevMode ? [{ debugName: \"dragDisabled\" }] : []));\n this.dragTransition = input(true, ...(ngDevMode ? [{ debugName: \"dragTransition\" }] : []));\n this.dragElementClone = input(false, ...(ngDevMode ? [{ debugName: \"dragElementClone\" }] : []));\n this.dropZoneGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropZoneGroup\" }] : []));\n this.dragStartDelay = input(...(ngDevMode ? [undefined, { debugName: \"dragStartDelay\" }] : []));\n this.dragResetOnDblClick = input(true, ...(ngDevMode ? [{ debugName: \"dragResetOnDblClick\" }] : []));\n this.dragLockAxis = input(null, ...(ngDevMode ? [{ debugName: \"dragLockAxis\" }] : []));\n this.dragClonedTemplate = input(...(ngDevMode ? [undefined, { debugName: \"dragClonedTemplate\" }] : []));\n this.dragCursor = input('move', ...(ngDevMode ? [{ debugName: \"dragCursor\" }] : []));\n this.dragBoundary = input(...(ngDevMode ? [undefined, { debugName: \"dragBoundary\" }] : []));\n this.dragTransitionDuration = input(150, ...(ngDevMode ? [{ debugName: \"dragTransitionDuration\" }] : []));\n this.dragPositionChanged = output();\n this.isMoving = signal(false, ...(ngDevMode ? [{ debugName: \"isMoving\" }] : []));\n this.clonedElement = signal(null, ...(ngDevMode ? [{ debugName: \"clonedElement\" }] : []));\n this.currentAxis = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"currentAxis\" }] : []));\n this.currentCloneAxis = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"currentCloneAxis\" }] : []));\n this.transitionDuration = linkedSignal(() => this.dragTransitionDuration(), ...(ngDevMode ? [{ debugName: \"transitionDuration\" }] : []));\n this.element = signal(this.el.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n this.dragStartTime = signal(0, ...(ngDevMode ? [{ debugName: \"dragStartTime\" }] : []));\n this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: \"isDragging\" }] : []));\n this.elementOpacity = signal('1', ...(ngDevMode ? [{ debugName: \"elementOpacity\" }] : []));\n this.movedAfterDelay = signal(false, ...(ngDevMode ? [{ debugName: \"movedAfterDelay\" }] : []));\n this.activePointerId = signal(null, ...(ngDevMode ? [{ debugName: \"activePointerId\" }] : []));\n this.prevDropZone = signal(null, ...(ngDevMode ? [{ debugName: \"prevDropZone\" }] : []));\n this.dragStartOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"dragStartOffset\" }] : []));\n this.clonePointerOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"clonePointerOffset\" }] : []));\n this.clonedElementViewRef = signal(null, ...(ngDevMode ? [{ debugName: \"clonedElementViewRef\" }] : []));\n this.rafId = null;\n this.pendingPointerEvent = null;\n this._parentDropList = inject(AXDropListDirective, { optional: true, skipSelf: true, host: false });\n this._currentDropList = signal(null, ...(ngDevMode ? [{ debugName: \"_currentDropList\" }] : []));\n this.createCloneElement = computed(() => this.dragElementClone() || !!this._parentDropList, ...(ngDevMode ? [{ debugName: \"createCloneElement\" }] : []));\n this.boundaryElement = computed(() => {\n const boundary = this.dragBoundary();\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return this.document.querySelector(boundary);\n }\n return boundary instanceof ElementRef ? boundary.nativeElement : boundary;\n }, ...(ngDevMode ? [{ debugName: \"boundaryElement\" }] : []));\n this.elementRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.element().getBoundingClientRect();\n }, ...(ngDevMode ? [{ debugName: \"elementRect\" }] : []));\n this.boundaryRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.boundaryElement()?.getBoundingClientRect();\n }, ...(ngDevMode ? [{ debugName: \"boundaryRect\" }] : []));\n this.handle = computed(() => this.handleDirective()?.element() ?? this.element(), ...(ngDevMode ? [{ debugName: \"handle\" }] : []));\n this.boundHandleDblClick = this.handleDblClick.bind(this);\n this.boundHandlePointerUp = this.handlePointerUp.bind(this);\n this.boundHandlePointerDown = this.handlePointerDown.bind(this);\n this.boundHandlePointerMove = this.handlePointerMove.bind(this);\n this.listenersAttached = signal(null, ...(ngDevMode ? [{ debugName: \"listenersAttached\" }] : []));\n this.#dragDisabledEffect = effect(() => {\n if (this.dragCursor() === 'none') {\n return;\n }\n if (!this.dragDisabled()) {\n this.renderer.setStyle(this.handle(), 'cursor', this.dragCursor());\n this.renderer.setStyle(this.handle(), 'touch-action', 'none');\n }\n else {\n this.renderer.removeStyle(this.handle(), 'cursor');\n this.renderer.removeStyle(this.handle(), 'touch-action');\n }\n }, ...(ngDevMode ? [{ debugName: \"#dragDisabledEffect\" }] : []));\n this.#handleChangeEffect = effect(() => {\n if (!isPlatformBrowser(this.platformId))\n return;\n const currentHandle = this.handle();\n const previousHandle = this.listenersAttached();\n // Remove listeners from previous handle if it changed\n if (previousHandle && previousHandle !== currentHandle) {\n previousHandle.removeEventListener('dblclick', this.boundHandleDblClick);\n previousHandle.removeEventListener('pointerdown', this.boundHandlePointerDown);\n }\n // Attach listeners to new handle\n if (currentHandle && currentHandle !== previousHandle) {\n this.zone.runOutsideAngular(() => {\n currentHandle.addEventListener('dblclick', this.boundHandleDblClick);\n currentHandle.addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });\n });\n this.listenersAttached.set(currentHandle);\n }\n }, ...(ngDevMode ? [{ debugName: \"#handleChangeEffect\" }] : []));\n }\n #dragDisabledEffect;\n #handleChangeEffect;\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n if (this._parentDropList) {\n this.setElementTransition(this.element());\n }\n this.renderer.setStyle(this.element(), 'z-index', '1');\n this.elementOpacity.set(getComputedStyle(this.element()).opacity);\n }\n }\n ngOnDestroy() {\n if (isPlatformBrowser(this.platformId)) {\n const handle = this.listenersAttached();\n if (handle) {\n handle.removeEventListener('dblclick', this.boundHandleDblClick);\n handle.removeEventListener('pointerdown', this.boundHandlePointerDown);\n }\n this.removeDocumentListeners();\n if (this.createCloneElement()) {\n this.removeCloneElement();\n }\n if (this._parentDropList && this.isDragging()) {\n this._parentDropList.cancelSort();\n }\n }\n }\n setElementTransition(element) {\n this.renderer.setStyle(element, 'transition-property', 'transform, opacity, translate');\n this.renderer.setStyle(element, 'transition-duration', `var(--ax-sys-transition-duration,${this.transitionDuration()}ms)`);\n this.renderer.setStyle(element, 'transition-timing-function', 'var(--ax-sys-transition-timing-function)');\n }\n removeElementTransition(element) {\n this.renderer.setStyle(element, 'transition-property', 'opacity');\n }\n handlePointerDown(e) {\n if (!isPlatformBrowser(this.platformId))\n return;\n if (!this.axDrag() || this.dragDisabled() || e.button !== 0 || this._parentDropList?.sortingDisabled())\n return;\n this.isDragging.set(true);\n this.movedAfterDelay.set(false);\n if (this.dragCursor() === 'move') {\n this.renderer.setStyle(this.handle(), 'cursor', 'move');\n }\n else if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.handle(), 'cursor', 'grabbing');\n }\n this.dragStartOffset.set({ x: e.clientX - this.currentAxis().x, y: e.clientY - this.currentAxis().y });\n this.renderer.setStyle(this.handle(), 'userSelect', 'none');\n this.activePointerId.set(e.pointerId);\n this.addDocumentListeners();\n this.dragStartTime.set(Date.now());\n }\n handleDblClick() {\n if (!this.dragResetOnDblClick() || this.dragDisabled())\n return;\n this.setPosition(0, 0);\n }\n handlePointerMove(e) {\n if (!this.isDragging() ||\n !isPlatformBrowser(this.platformId) ||\n e.pointerId !== this.activePointerId()) {\n return;\n }\n e.preventDefault();\n if (!this.isMoving()) {\n const delay = this.dragStartDelay() ?? 0;\n // FIX: Delay logic was inverted\n if (Date.now() - this.dragStartTime() < delay) {\n return; // Still waiting for delay\n }\n this.isMoving.set(true);\n this.handle().setPointerCapture(e.pointerId);\n this.startDrag(e);\n }\n // Run position updates outside Angular zone for better performance\n this.zone.runOutsideAngular(() => {\n if (this.createCloneElement()) {\n const newCloneX = e.clientX - this.clonePointerOffset().x;\n const newCloneY = e.clientY - this.clonePointerOffset().y;\n this.setClonePosition(newCloneX, newCloneY);\n }\n else {\n const newX = e.clientX - this.dragStartOffset().x;\n const newY = e.clientY - this.dragStartOffset().y;\n this.setPosition(newX, newY);\n }\n });\n // Throttle drop list interactions using requestAnimationFrame\n if (this._parentDropList) {\n this.pendingPointerEvent = e;\n if (this.rafId === null) {\n this.rafId = requestAnimationFrame(() => {\n if (this.pendingPointerEvent) {\n this.handleDropListInteractions(this.pendingPointerEvent);\n this.pendingPointerEvent = null;\n }\n this.rafId = null;\n });\n }\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n }\n startDrag(e) {\n // Add CDK-style classes\n this.renderer.addClass(this.element(), 'ax-dragging');\n this.renderer.addClass(this.element(), 'ax-drag-placeholder');\n if (this._parentDropList) {\n this._currentDropList.set(this._parentDropList);\n this._parentDropList.prepareSort(this);\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n if (this.createCloneElement()) {\n const elementRect = this.element().getBoundingClientRect();\n this.clonePointerOffset.set({\n x: e.clientX - elementRect.left,\n y: e.clientY - elementRect.top,\n });\n const clone = this.createCloneElementHandler(this.element());\n if (clone) {\n this.renderer.addClass(clone, 'ax-drag-preview');\n this.renderer.addClass(clone, 'ax-dragging');\n }\n }\n }\n handlePointerUp(e) {\n if (e.pointerId !== this.activePointerId() || !isPlatformBrowser(this.platformId) || !this.isDragging()) {\n return;\n }\n if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.handle(), 'cursor', 'grab');\n }\n const wasMoving = this.isMoving();\n this.isMoving.set(false);\n this.isDragging.set(false);\n // Remove CDK-style classes\n this.renderer.removeClass(this.element(), 'ax-dragging');\n this.renderer.removeClass(this.element(), 'ax-drag-placeholder');\n if (!wasMoving) {\n this.activePointerId.set(null);\n this.removeDocumentListeners();\n this._currentDropList.set(null);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n return;\n }\n this.preventClicking();\n const transform = this.element().style.transform;\n let x = 0;\n let y = 0;\n if (transform) {\n x = Number(transform.split('translateX(')[1]?.split('px)')[0]);\n y = Number(transform.split('translateY(')[1]?.split('px)')[0]);\n }\n const droppedIntoList = this._currentDropList();\n if (droppedIntoList && this._parentDropList) {\n droppedIntoList.finalizeSort(e, this, this._parentDropList);\n }\n else if (this._parentDropList) {\n this._parentDropList.cancelSort(this);\n }\n else {\n this.dropZoneDropHandler(e);\n }\n // Cancel any pending RAF callbacks\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.pendingPointerEvent = null;\n this.activePointerId.set(null);\n this.removeDocumentListeners();\n this._currentDropList.set(null);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n if (this.createCloneElement()) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n this.removeCloneElementWithAnimation(x || 0, y || 0, listUnderPointer);\n }\n else {\n this.renderer.setStyle(this.element(), 'opacity', this.elementOpacity());\n }\n }\n preventClicking() {\n const blockClick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n this.document.addEventListener('click', blockClick, { capture: true, once: true });\n }\n handleDropListInteractions(e) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n const previousList = this._currentDropList();\n let targetList = null;\n const canDrop = listUnderPointer && this.canDropInList(listUnderPointer);\n if (canDrop) {\n targetList = listUnderPointer;\n }\n // Update cursor based on whether drop is allowed\n if (listUnderPointer) {\n const cloneEl = this.clonedElement();\n const cursor = canDrop ? 'move' : 'not-allowed';\n if (cloneEl) {\n this.renderer.setStyle(cloneEl, 'cursor', cursor);\n }\n else {\n this.renderer.setStyle(this.element(), 'cursor', cursor);\n }\n }\n if (targetList !== previousList) {\n if (previousList) {\n previousList.cancelSortPreview();\n if (previousList !== this._parentDropList) {\n previousList.resetSortState();\n }\n }\n if (targetList) {\n targetList.enter(this);\n }\n this._currentDropList.set(targetList);\n }\n this._currentDropList()?.sort(e, this);\n }\n canDropInList(list) {\n if (!list || list.sortingDisabled() || !this._parentDropList) {\n return false;\n }\n if (list === this._parentDropList) {\n return true;\n }\n const dragGroup = this._parentDropList.dropListGroup();\n const targetGroup = list.dropListGroup();\n if (!dragGroup || dragGroup !== targetGroup) {\n return false;\n }\n // Check for circular reference (tree-specific validation)\n const draggedNode = this.dragData();\n const targetNodeId = list.element.getAttribute('data-node-id');\n if (draggedNode && this.isCircularReference(targetNodeId, draggedNode)) {\n return false;\n }\n return true;\n }\n isCircularReference(targetNodeId, draggedNode) {\n if (!draggedNode || typeof draggedNode !== 'object') {\n return false;\n }\n const node = draggedNode;\n // Check if dropping into itself\n if (targetNodeId === node.id) {\n return true;\n }\n // Check if targetNodeId is in draggedNode's descendants\n if (!node.children || !Array.isArray(node.children)) {\n return false;\n }\n for (const child of node.children) {\n const childNode = child;\n if (childNode.id === targetNodeId) {\n return true;\n }\n if (this.isCircularReference(targetNodeId, child)) {\n return true;\n }\n }\n return false;\n }\n dropZoneHoverHandler(e) {\n const dropZones = this.getDropZonesFromPoint(e.clientX, e.clientY);\n const dropZone = dropZones[0];\n if (!dropZone) {\n if (this.prevDropZone()) {\n this.leavePrevDropZone(e);\n }\n return;\n }\n if (this.prevDropZone() && this.prevDropZone() !== dropZone) {\n this.leavePrevDropZone(e);\n }\n if (this.dropZoneValidation(dropZone) && !dropZone.isHovered()) {\n this.prevDropZone.set(dropZone);\n dropZone.onElementHover.emit({ sender: dropZone, dropped: this, nativeEvent: e, state: 'enter' });\n dropZone.isHovered.set(true);\n }\n }\n dropZoneDropHandler(e) {\n const dropZones = this.getDropZonesFromPoint(e.clientX, e.clientY);\n const dropZone = dropZones[0];\n if (!this.dropZoneValidation(dropZone)) {\n return;\n }\n dropZone.isHovered.set(false);\n dropZone.onElementDrop.emit({ sender: dropZone, dropped: this, nativeEvent: e });\n }\n getDropZonesFromPoint(x, y) {\n const elements = this.document.elementsFromPoint(x, y);\n return elements\n .filter((el) => el instanceof HTMLElement && el.dataset['axDropZone'] === 'true')\n .map((el) => el['__axContext__']);\n }\n getDropListFromPoint(x, y) {\n const dropListElements = this.document\n .elementsFromPoint(x, y)\n .filter((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');\n if (dropListElements.length === 0) {\n return null;\n }\n // If only one drop list, use it\n if (dropListElements.length === 1) {\n return dropListElements[0]['__axContext__'];\n }\n // Multiple drop lists detected (nested scenario like tree2)\n // Prioritize based on pointer position and drop type\n const ontoNodeList = dropListElements.find((el) => el.dataset['dropType'] === 'onto-node');\n const reorderList = dropListElements.find((el) => el.dataset['dropType'] !== 'onto-node');\n // If no special handling needed, return first\n if (!ontoNodeList || !reorderList) {\n return dropListElements[0]['__axContext__'];\n }\n // Calculate pointer position relative to the \"onto-node\" element\n const ontoNodeRect = ontoNodeList.getBoundingClientRect();\n const relativeY = y - ontoNodeRect.top;\n const heightRatio = relativeY / ontoNodeRect.height;\n // Smart zone detection based on pointer position\n if (heightRatio < ZONE_TOP_THRESHOLD || heightRatio > ZONE_BOTTOM_THRESHOLD) {\n // Top or bottom zone: reorder (drop BEFORE/AFTER node)\n return reorderList['__axContext__'];\n }\n else {\n // Center zone: onto-node (drop INTO node as child)\n return ontoNodeList['__axContext__'];\n }\n }\n dropZoneValidation(dropZone) {\n if (!dropZone)\n return false;\n const dragGroup = this.dropZoneGroup();\n const dropGroup = dropZone.dropZoneGroup();\n if (dropGroup && dragGroup !== dropGroup) {\n return false;\n }\n return true;\n }\n leavePrevDropZone(e) {\n if (this.prevDropZone()) {\n this.prevDropZone().onElementHover.emit({\n dropped: this,\n state: 'leave',\n nativeEvent: e,\n sender: this.prevDropZone(),\n });\n this.prevDropZone().isHovered.set(false);\n this.prevDropZone.set(null);\n }\n }\n setPosition(x, y) {\n let constrainedX = x;\n let constrainedY = y;\n const elementRect = this.elementRect();\n const boundaryRect = this.boundaryRect();\n if (boundaryRect && elementRect) {\n const minX = boundaryRect.left - elementRect.left;\n const minY = boundaryRect.top - elementRect.top;\n const maxX = minX + boundaryRect.width - elementRect.width;\n const maxY = minY + boundaryRect.height - elementRect.height;\n constrainedX = clamp(x, minX, maxX);\n constrainedY = clamp(y, minY, maxY);\n }\n if (this.dragLockAxis() === 'x')\n constrainedY = this.currentAxis().y;\n if (this.dragLockAxis() === 'y')\n constrainedX = this.currentAxis().x;\n // Direct DOM manipulation without triggering change detection\n this.renderer.setStyle(this.element(), 'translate', `${constrainedX}px ${constrainedY}px`);\n // Only update signal and emit if position actually changed significantly (throttle)\n const current = this.currentAxis();\n if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {\n this.currentAxis.set({ x: constrainedX, y: constrainedY });\n this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });\n }\n }\n setClonePosition(x, y) {\n let constrainedX = x;\n let constrainedY = y;\n const cloneEl = this.clonedElement();\n const boundaryRect = this.boundaryRect();\n if (boundaryRect && cloneEl) {\n const cloneWidth = cloneEl.offsetWidth;\n const cloneHeight = cloneEl.offsetHeight;\n constrainedX = clamp(x, boundaryRect.left, boundaryRect.right - cloneWidth);\n constrainedY = clamp(y, boundaryRect.top, boundaryRect.bottom - cloneHeight);\n }\n if (this.dragLockAxis() === 'x')\n constrainedY = this.currentCloneAxis().y;\n if (this.dragLockAxis() === 'y')\n constrainedX = this.currentCloneAxis().x;\n // Direct DOM manipulation without triggering change detection\n this.renderer.setStyle(cloneEl, 'translate', `${constrainedX}px ${constrainedY}px`);\n // Only update signal and emit if position actually changed significantly (throttle)\n const current = this.currentCloneAxis();\n if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {\n this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });\n this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });\n }\n }\n createCloneElementHandler(originalElement) {\n if (!isPlatformBrowser(this.platformId)) {\n this.clonedElement.set(null);\n return null;\n }\n let clonedElement;\n const customTemplate = this.dragClonedTemplate();\n const applyComputedStylesRecursive = (source, target) => {\n if (!isPlatformBrowser(this.platformId))\n return;\n const computedStyles = window.getComputedStyle(source);\n if (computedStyles.cssText && target.style.cssText !== undefined) {\n let tempCssText = computedStyles.cssText;\n if (target === clonedElement) {\n tempCssText = tempCssText\n .replace(/position:[^;]+;/gi, '')\n .replace(/top:[^;]+;/gi, '')\n .replace(/left:[^;]+;/gi, '')\n .replace(/right:[^;]+;/gi, '')\n .replace(/bottom:[^;]+;/gi, '')\n .replace(/width:[^;]+;/gi, '')\n .replace(/height:[^;]+;/gi, '')\n .replace(/margin[^;]*:[^;]+;/gi, '')\n .replace(/transition[^;]*:[^;]+;/gi, '')\n .replace(/transform:[^;]+;/gi, '')\n .replace(/translate:[^;]+;/gi, '')\n .replace(/z-index:[^;]+;/gi, '')\n .replace(/opacity:[^;]+;/gi, '');\n }\n tempCssText = tempCssText.replace(/pointer-events:[^;]+;/gi, '');\n target.style.cssText = tempCssText;\n }\n else {\n for (let i = 0; i < computedStyles.length; i++) {\n const propName = computedStyles[i];\n if (propName === 'pointer-events') {\n continue;\n }\n if (target === clonedElement &&\n (propName === 'position' ||\n propName === 'top' ||\n propName === 'left' ||\n propName === 'right' ||\n propName === 'bottom' ||\n propName === 'width' ||\n propName === 'height' ||\n propName.startsWith('margin') ||\n propName.startsWith('transition') ||\n propName === 'transform' ||\n propName === 'translate' ||\n propName === 'z-index' ||\n propName === 'opacity')) {\n continue;\n }\n try {\n target.style.setProperty(propName, computedStyles.getPropertyValue(propName), computedStyles.getPropertyPriority(propName));\n }\n catch {\n // Some CSS properties cannot be set directly, skip silently\n }\n }\n }\n const sourceChildren = Array.from(source.children);\n const targetChildren = Array.from(target.children);\n for (let i = 0; i < sourceChildren.length; i++) {\n if (sourceChildren[i] instanceof HTMLElement && targetChildren[i] instanceof HTMLElement) {\n applyComputedStylesRecursive(sourceChildren[i], targetChildren[i]);\n }\n }\n };\n if (customTemplate) {\n const viewRef = this.viewContainerRef.createEmbeddedView(customTemplate);\n this.clonedElementViewRef.set(viewRef);\n if (viewRef.rootNodes.length > 0 && viewRef.rootNodes[0] instanceof HTMLElement) {\n clonedElement = viewRef.rootNodes[0];\n const viewIndex = this.viewContainerRef.indexOf(viewRef);\n if (viewIndex !== -1) {\n this.viewContainerRef.detach(viewIndex);\n }\n }\n else {\n if (this.clonedElementViewRef()) {\n this.clonedElementViewRef().destroy();\n this.clonedElementViewRef.set(null);\n }\n console.warn('AXDragDirective: dragClonedTemplate did not produce a valid HTMLElement root node. Falling back to default cloning.');\n clonedElement = originalElement.cloneNode(true);\n applyComputedStylesRecursive(originalElement, clonedElement);\n }\n }\n else {\n clonedElement = originalElement.cloneNode(true);\n applyComputedStylesRecursive(originalElement, clonedElement);\n }\n if (clonedElement.id) {\n this.renderer.removeAttribute(clonedElement, 'id');\n }\n this.renderer.setStyle(originalElement, 'opacity', '0.5');\n const originalRect = originalElement.getBoundingClientRect();\n this.renderer.setStyle(clonedElement, 'position', 'fixed', RendererStyleFlags2.Important);\n this.renderer.setStyle(clonedElement, 'left', '0px');\n this.renderer.setStyle(clonedElement, 'top', '0px');\n if (!customTemplate) {\n this.renderer.setStyle(clonedElement, 'width', `${originalRect.width}px`);\n this.renderer.setStyle(clonedElement, 'height', `${originalRect.height}px`);\n }\n this.renderer.setStyle(clonedElement, 'margin', '0');\n this.renderer.setStyle(clonedElement, 'box-sizing', 'border-box');\n this.renderer.setStyle(clonedElement, 'opacity', '0.75');\n this.renderer.setStyle(clonedElement, 'z-index', '10000');\n this.renderer.setStyle(clonedElement, 'pointer-events', 'none', RendererStyleFlags2.Important);\n this.renderer.setStyle(clonedElement, 'user-select', 'none');\n this.renderer.setStyle(clonedElement, 'touch-action', 'none');\n this.renderer.setStyle(clonedElement, 'translate', `${originalRect.left}px ${originalRect.top}px`);\n this.renderer.removeStyle(clonedElement, 'transition');\n this.renderer.removeStyle(clonedElement, 'transition-property');\n this.copyPseudoElementStyles(originalElement, clonedElement, '::before');\n this.copyPseudoElementStyles(originalElement, clonedElement, '::after');\n this.renderer.appendChild(this.document.body, clonedElement);\n this.clonedElement.set(clonedElement);\n this.setClonePosition(originalRect.left, originalRect.top);\n return clonedElement;\n }\n copyPseudoElementStyles(source, target, pseudo) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const pseudoStyles = window.getComputedStyle(source, pseudo);\n const content = pseudoStyles.getPropertyValue('content');\n const display = pseudoStyles.getPropertyValue('display');\n if (!content || content === 'none' || display === 'none') {\n return;\n }\n const pseudoElement = this.renderer.createElement('span');\n for (let i = 0; i < pseudoStyles.length; i++) {\n const propName = pseudoStyles[i];\n try {\n pseudoElement.style.setProperty(propName, pseudoStyles.getPropertyValue(propName), pseudoStyles.getPropertyPriority(propName));\n }\n catch (e) {\n // Some properties might fail to set, which is usually fine.\n }\n }\n if (content.startsWith('\"') && content.endsWith('\"')) {\n this.renderer.setProperty(pseudoElement, 'textContent', content.slice(1, -1));\n }\n else {\n this.renderer.setProperty(pseudoElement, 'textContent', content);\n }\n this.renderer.setStyle(pseudoElement, 'pointer-events', 'none');\n if (pseudo === '::before') {\n this.renderer.insertBefore(target, pseudoElement, target.firstChild);\n }\n else {\n this.renderer.appendChild(target, pseudoElement);\n }\n }\n removeCloneElementWithAnimation(x, y, dropList) {\n dropList?._draggableItems().forEach((item) => {\n this.removeElementTransition(item.element());\n });\n const clone = this.clonedElement();\n if (!clone)\n return;\n this.renderer.setStyle(this.element(), 'opacity', this.elementOpacity());\n const elementRect = this.element().getBoundingClientRect();\n if (elementRect) {\n this.setElementTransition(clone);\n this.renderer.setStyle(clone, 'opacity', '0');\n this.setClonePosition(elementRect.left + x, elementRect.top + y);\n }\n if (!this.dragTransition()) {\n this.removeCloneElement();\n }\n else {\n setTimeout(() => {\n this.removeCloneElement();\n dropList?._draggableItems().forEach((item) => {\n this.setElementTransition(item.element());\n });\n }, this.transitionDuration());\n }\n }\n removeCloneElement() {\n if (!isPlatformBrowser(this.platformId))\n return;\n const clone = this.clonedElement();\n if (clone?.parentNode) {\n // Remove classes before removing element\n this.renderer.removeClass(clone, 'ax-drag-preview');\n this.renderer.removeClass(clone, 'ax-dragging');\n this.renderer.removeChild(clone.parentNode, clone);\n }\n this.clonedElement.set(null);\n if (this.clonedElementViewRef()) {\n this.clonedElementViewRef().destroy();\n this.clonedElementViewRef.set(null);\n }\n this.cdr.markForCheck();\n }\n addDocumentListeners() {\n if (!isPlatformBrowser(this.platformId))\n return;\n this.zone.runOutsideAngular(() => {\n this.document.addEventListener('pointermove', this.boundHandlePointerMove, { passive: false });\n this.document.addEventListener('pointerup', this.boundHandlePointerUp);\n this.document.addEventListener('pointercancel', this.boundHandlePointerUp);\n });\n }\n removeDocumentListeners() {\n if (!isPlatformBrowser(this.platformId))\n return;\n this.zone.runOutsideAngular(() => {\n this.document.removeEventListener('pointermove', this.boundHandlePointerMove);\n this.document.removeEventListener('pointerup', this.boundHandlePointerUp);\n this.document.removeEventListener('pointercancel', this.boundHandlePointerUp);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.15\", type: AXDragDirective, isStandalone: true, selector: \"[axDrag]\", inputs: { axDrag: { classPropertyName: \"axDrag\", publicName: \"axDrag\", isSignal: true, isRequired: false, transformFunction: null }, dragData: { classPropertyName: \"dragData\", publicName: \"dragData\", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: \"dragDisabled\", publicName: \"dragDisabled\", isSignal: true, isRequired: false, transformFunction: null }, dragTransition: { classPropertyName: \"dragTransition\", publicName: \"dragTransition\", isSignal: true, isRequired: false, transformFunction: null }, dragElementClone: { classPropertyName: \"dragElementClone\", publicName: \"dragElementClone\", isSignal: true, isRequired: false, transformFunction: null }, dropZoneGroup: { classPropertyName: \"dropZoneGroup\", publicName: \"dropZoneGroup\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, dragResetOnDblClick: { classPropertyName: \"dragResetOnDblClick\", publicName: \"dragResetOnDblClick\", isSignal: true, isRequired: false, transformFunction: null }, dragLockAxis: { classPropertyName: \"dragLockAxis\", publicName: \"dragLockAxis\", isSignal: true, isRequired: false, transformFunction: null }, dragClonedTemplate: { classPropertyName: \"dragClonedTemplate\", publicName: \"dragClonedTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dragCursor: { classPropertyName: \"dragCursor\", publicName: \"dragCursor\", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: \"dragBoundary\", publicName: \"dragBoundary\", isSignal: true, isRequired: false, transformFunction: null }, dragTransitionDuration: { classPropertyName: \"dragTransitionDuration\", publicName: \"dragTransitionDuration\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragPositionChanged: \"dragPositionChanged\" }, queries: [{ propertyName: \"handleDirective\", first: true, predicate: AXDragHandleDirective, descendants: true, isSignal: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDrag]',\n }]\n }], propDecorators: { handleDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXDragHandleDirective), { isSignal: true }] }], axDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: \"axDrag\", required: false }] }], dragData: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragData\", required: false }] }], dragDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragDisabled\", required: false }] }], dragTransition: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragTransition\", required: false }] }], dragElementClone: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragElementClone\", required: false }] }], dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropZoneGroup\", required: false }] }], dragStartDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragStartDelay\", required: false }] }], dragResetOnDblClick: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragResetOnDblClick\", required: false }] }], dragLockAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragLockAxis\", required: false }] }], dragClonedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragClonedTemplate\", required: false }] }], dragCursor: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragCursor\", required: false }] }], dragBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragBoundary\", required: false }] }], dragTransitionDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragTransitionDuration\", required: false }] }], dragPositionChanged: [{ type: i0.Output, args: [\"dragPositionChanged\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9saWIvZHJhZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFFVixNQUFNLEVBR04sV0FBVyxFQUNYLFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLNUQsOERBQThEO0FBQzlELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUMsa0NBQWtDO0FBQ2xFLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUMsb0NBQW9DO0FBQ3ZFLHFEQUFxRDtBQUtyRCxNQUFNLE9BQU8sZUFBZTtJQUg1QjtRQUlVLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pD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O29HQVN3QyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRE9DVU1FTlQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBsaW5rZWRTaWduYWwsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy1oYW5kbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcExpc3REaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3AtbGlzdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcC16b25lLmRpcmVjdGl2ZSc7XG5cbnR5cGUgQVhQb3NpdGlvblR5cGUgPSB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG5cbi8vIFpvbmUgZGV0ZWN0aW9uIGNvbnN0YW50cyBmb3IgbmVzdGVkIGRyb3AgbGlzdHMgKHRyZWUgbm9kZXMpXG5jb25zdCBaT05FX1RPUF9USFJFU0hPTEQgPSAwLjM7IC8vIFRvcCAzMCUgdHJpZ2dlcnMgcmVvcmRlciBCRUZPUkVcbmNvbnN0IFpPTkVfQk9UVE9NX1RIUkVTSE9MRCA9IDAuNzsgLy8gQm90dG9tIDMwJSB0cmlnZ2VycyByZW9yZGVyIEFGVEVSXG4vLyBNaWRkbGUgNDAlIChiZXR3ZWVuIHRocmVzaG9sZHMpIHRyaWdnZXJzIGRyb3AgSU5UT1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcmFnXScsXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGVsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBoYW5kbGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoQVhEcmFnSGFuZGxlRGlyZWN0aXZlKTtcblxuICBheERyYWcgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSA9PiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHRydWUgfSk7XG4gIGRyYWdEYXRhID0gaW5wdXQoKTtcbiAgZHJhZ0Rpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnVHJhbnNpdGlvbiA9IGlucHV0KHRydWUpO1xuICBkcmFnRWxlbWVudENsb25lID0gaW5wdXQoZmFsc2UpO1xuICBkcm9wWm9uZUdyb3VwID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0PG51bWJlcj4oKTtcbiAgZHJhZ1Jlc2V0T25EYmxDbGljayA9IGlucHV0KHRydWUpO1xuICBkcmFnTG9ja0F4aXMgPSBpbnB1dDwneCcgfCAneScgfCBudWxsPihudWxsKTtcbiAgZHJhZ0Nsb25lZFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIGRyYWdDdXJzb3IgPSBpbnB1dDwnbW92ZScgfCAnZ3JhYicgfCAnbm9uZSc+KCdtb3ZlJyk7XG4gIGRyYWdCb3VuZGFyeSA9IGlucHV0PHN0cmluZyB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+KCk7XG4gIGRyYWdUcmFuc2l0aW9uRHVyYXRpb24gPSBpbnB1dDxudW1iZXI+KDE1MCk7XG5cbiAgZHJhZ1Bvc2l0aW9uQ2hhbmdlZCA9IG91dHB1dDxBWFBvc2l0aW9uVHlwZT4oKTtcblxuICBpc01vdmluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGNsb25lZEVsZW1lbnQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY3VycmVudEF4aXMgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgY3VycmVudENsb25lQXhpcyA9IHNpZ25hbDxBWFBvc2l0aW9uVHlwZT4oeyB4OiAwLCB5OiAwIH0pO1xuICB0cmFuc2l0aW9uRHVyYXRpb24gPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5kcmFnVHJhbnNpdGlvbkR1cmF0aW9uKCkpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsPEhUTUxFbGVtZW50Pih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICBwcml2YXRlIGRyYWdTdGFydFRpbWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBlbGVtZW50T3BhY2l0eSA9IHNpZ25hbDxzdHJpbmc+KCcxJyk7XG4gIHByaXZhdGUgbW92ZWRBZnRlckRlbGF5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBhY3RpdmVQb2ludGVySWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcHJldkRyb3Bab25lID0gc2lnbmFsPEFYRHJvcFpvbmVEaXJlY3RpdmUgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBkcmFnU3RhcnRPZmZzZXQgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBjbG9uZVBvaW50ZXJPZmZzZXQgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBjbG9uZWRFbGVtZW50Vmlld1JlZiA9IHNpZ25hbDxFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1BvaW50ZXJFdmVudDogUG9pbnRlckV2ZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfcGFyZW50RHJvcExpc3QgPSBpbmplY3QoQVhEcm9wTGlzdERpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUsIGhvc3Q6IGZhbHNlIH0pO1xuICBwcml2YXRlIF9jdXJyZW50RHJvcExpc3QgPSBzaWduYWw8QVhEcm9wTGlzdERpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjcmVhdGVDbG9uZUVsZW1lbnQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLmRyYWdFbGVtZW50Q2xvbmUoKSB8fCAhIXRoaXMuX3BhcmVudERyb3BMaXN0KTtcblxuICBwcml2YXRlIGJvdW5kYXJ5RWxlbWVudCA9IGNvbXB1dGVkPEhUTUxFbGVtZW50IHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gdGhpcy5kcmFnQm91bmRhcnkoKTtcbiAgICBpZiAoIWJvdW5kYXJ5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib3VuZGFyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGJvdW5kYXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGJvdW5kYXJ5IGluc3RhbmNlb2YgRWxlbWVudFJlZiA/IGJvdW5kYXJ5Lm5hdGl2ZUVsZW1lbnQgOiBib3VuZGFyeTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudFJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9KTtcblxuICBwcml2YXRlIGJvdW5kYXJ5UmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ib3VuZGFyeUVsZW1lbnQoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgaGFuZGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oYW5kbGVEaXJlY3RpdmUoKT8uZWxlbWVudCgpID8/IHRoaXMuZWxlbWVudCgpKTtcblxuICBwcml2YXRlIGJvdW5kSGFuZGxlRGJsQ2xpY2sgPSB0aGlzLmhhbmRsZURibENsaWNrLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRIYW5kbGVQb2ludGVyVXAgPSB0aGlzLmhhbmRsZVBvaW50ZXJVcC5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGJvdW5kSGFuZGxlUG9pbnRlckRvd24gPSB0aGlzLmhhbmRsZVBvaW50ZXJEb3duLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRIYW5kbGVQb2ludGVyTW92ZSA9IHRoaXMuaGFuZGxlUG9pbnRlck1vdmUuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnNBdHRhY2hlZCA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gICNkcmFnRGlzYWJsZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRyYWdDdXJzb3IoKSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kcmFnRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgdGhpcy5kcmFnQ3Vyc29yKCkpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAndG91Y2gtYWN0aW9uJywgJ25vbmUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuaGFuZGxlKCksICd0b3VjaC1hY3Rpb24nKTtcbiAgICB9XG4gIH0pO1xuXG4gICNoYW5kbGVDaGFuZ2VFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudEhhbmRsZSA9IHRoaXMuaGFuZGxlKCk7XG4gICAgY29uc3QgcHJldmlvdXNIYW5kbGUgPSB0aGlzLmxpc3RlbmVyc0F0dGFjaGVkKCk7XG5cbiAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIGZyb20gcHJldmlvdXMgaGFuZGxlIGlmIGl0IGNoYW5nZWRcbiAgICBpZiAocHJldmlvdXNIYW5kbGUgJiYgcHJldmlvdXNIYW5kbGUgIT09IGN1cnJlbnRIYW5kbGUpIHtcbiAgICAgIHByZXZpb3VzSGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5ib3VuZEhhbmRsZURibENsaWNrKTtcbiAgICAgIHByZXZpb3VzSGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggbGlzdGVuZXJzIHRvIG5ldyBoYW5kbGVcbiAgICBpZiAoY3VycmVudEhhbmRsZSAmJiBjdXJyZW50SGFuZGxlICE9PSBwcmV2aW91c0hhbmRsZSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgY3VycmVudEhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMuYm91bmRIYW5kbGVEYmxDbGljayk7XG4gICAgICAgIGN1cnJlbnRIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlckRvd24sIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdGVuZXJzQXR0YWNoZWQuc2V0KGN1cnJlbnRIYW5kbGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRUcmFuc2l0aW9uKHRoaXMuZWxlbWVudCgpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50KCksICd6LWluZGV4JywgJzEnKTtcbiAgICAgIHRoaXMuZWxlbWVudE9wYWNpdHkuc2V0KGdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KCkpLm9wYWNpdHkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBjb25zdCBoYW5kbGUgPSB0aGlzLmxpc3RlbmVyc0F0dGFjaGVkKCk7XG4gICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMuYm91bmRIYW5kbGVEYmxDbGljayk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyRG93bik7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZURvY3VtZW50TGlzdGVuZXJzKCk7XG4gICAgICBpZiAodGhpcy5jcmVhdGVDbG9uZUVsZW1lbnQoKSkge1xuICAgICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0ICYmIHRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LmNhbmNlbFNvcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVsZW1lbnRUcmFuc2l0aW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAndHJhbnNpdGlvbi1wcm9wZXJ0eScsICd0cmFuc2Zvcm0sIG9wYWNpdHksIHRyYW5zbGF0ZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAgICAgYHZhcigtLWF4LXN5cy10cmFuc2l0aW9uLWR1cmF0aW9uLCR7dGhpcy50cmFuc2l0aW9uRHVyYXRpb24oKX1tcylgLFxuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCAndmFyKC0tYXgtc3lzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKScpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVFbGVtZW50VHJhbnNpdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tcHJvcGVydHknLCAnb3BhY2l0eScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludGVyRG93bihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuYXhEcmFnKCkgfHwgdGhpcy5kcmFnRGlzYWJsZWQoKSB8fCBlLmJ1dHRvbiAhPT0gMCB8fCB0aGlzLl9wYXJlbnREcm9wTGlzdD8uc29ydGluZ0Rpc2FibGVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tb3ZlZEFmdGVyRGVsYXkuc2V0KGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmRyYWdDdXJzb3IoKSA9PT0gJ21vdmUnKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGFuZGxlKCksICdjdXJzb3InLCAnbW92ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdncmFiJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgJ2dyYWJiaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnU3RhcnRPZmZzZXQuc2V0KHsgeDogZS5jbGllbnRYIC0gdGhpcy5jdXJyZW50QXhpcygpLngsIHk6IGUuY2xpZW50WSAtIHRoaXMuY3VycmVudEF4aXMoKS55IH0pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ3VzZXJTZWxlY3QnLCAnbm9uZScpO1xuICAgIHRoaXMuYWN0aXZlUG9pbnRlcklkLnNldChlLnBvaW50ZXJJZCk7XG4gICAgdGhpcy5hZGREb2N1bWVudExpc3RlbmVycygpO1xuXG4gICAgdGhpcy5kcmFnU3RhcnRUaW1lLnNldChEYXRlLm5vdygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGJsQ2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLmRyYWdSZXNldE9uRGJsQ2xpY2soKSB8fCB0aGlzLmRyYWdEaXNhYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQb3NpdGlvbigwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlck1vdmUoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNEcmFnZ2luZygpIHx8XG4gICAgICAhaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fFxuICAgICAgZS5wb2ludGVySWQgIT09IHRoaXMuYWN0aXZlUG9pbnRlcklkKClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuaXNNb3ZpbmcoKSkge1xuICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmRyYWdTdGFydERlbGF5KCkgPz8gMDtcbiAgICAgIC8vIEZJWDogRGVsYXkgbG9naWMgd2FzIGludmVydGVkXG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZSgpIDwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBTdGlsbCB3YWl0aW5nIGZvciBkZWxheVxuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTW92aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuaGFuZGxlKCkuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgfVxuXG4gICAgLy8gUnVuIHBvc2l0aW9uIHVwZGF0ZXMgb3V0c2lkZSBBbmd1bGFyIHpvbmUgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jcmVhdGVDbG9uZUVsZW1lbnQoKSkge1xuICAgICAgICBjb25zdCBuZXdDbG9uZVggPSBlLmNsaWVudFggLSB0aGlzLmNsb25lUG9pbnRlck9mZnNldCgpLng7XG4gICAgICAgIGNvbnN0IG5ld0Nsb25lWSA9IGUuY2xpZW50WSAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueTtcbiAgICAgICAgdGhpcy5zZXRDbG9uZVBvc2l0aW9uKG5ld0Nsb25lWCwgbmV3Q2xvbmVZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1ggPSBlLmNsaWVudFggLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLng7XG4gICAgICAgIGNvbnN0IG5ld1kgPSBlLmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLnk7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24obmV3WCwgbmV3WSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUaHJvdHRsZSBkcm9wIGxpc3QgaW50ZXJhY3Rpb25zIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgdGhpcy5wZW5kaW5nUG9pbnRlckV2ZW50ID0gZTtcbiAgICAgIGlmICh0aGlzLnJhZklkID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcExpc3RJbnRlcmFjdGlvbnModGhpcy5wZW5kaW5nUG9pbnRlckV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1BvaW50ZXJFdmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFmSWQgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wWm9uZUhvdmVySGFuZGxlcihlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHJhZyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICAvLyBBZGQgQ0RLLXN0eWxlIGNsYXNzZXNcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudCgpLCAnYXgtZHJhZ2dpbmcnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudCgpLCAnYXgtZHJhZy1wbGFjZWhvbGRlcicpO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICB0aGlzLl9jdXJyZW50RHJvcExpc3Quc2V0KHRoaXMuX3BhcmVudERyb3BMaXN0KTtcbiAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LnByZXBhcmVTb3J0KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3Bab25lSG92ZXJIYW5kbGVyKGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZUNsb25lRWxlbWVudCgpKSB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5jbG9uZVBvaW50ZXJPZmZzZXQuc2V0KHtcbiAgICAgICAgeDogZS5jbGllbnRYIC0gZWxlbWVudFJlY3QubGVmdCxcbiAgICAgICAgeTogZS5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbG9uZSA9IHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50SGFuZGxlcih0aGlzLmVsZW1lbnQoKSk7XG4gICAgICBpZiAoY2xvbmUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjbG9uZSwgJ2F4LWRyYWctcHJldmlldycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNsb25lLCAnYXgtZHJhZ2dpbmcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBvaW50ZXJVcChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoZS5wb2ludGVySWQgIT09IHRoaXMuYWN0aXZlUG9pbnRlcklkKCkgfHwgIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ0N1cnNvcigpID09PSAnZ3JhYicpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicsICdncmFiJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FzTW92aW5nID0gdGhpcy5pc01vdmluZygpO1xuICAgIHRoaXMuaXNNb3Zpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcuc2V0KGZhbHNlKTtcblxuICAgIC8vIFJlbW92ZSBDREstc3R5bGUgY2xhc3Nlc1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50KCksICdheC1kcmFnZ2luZycpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50KCksICdheC1kcmFnLXBsYWNlaG9sZGVyJyk7XG5cbiAgICBpZiAoIXdhc01vdmluZykge1xuICAgICAgdGhpcy5hY3RpdmVQb2ludGVySWQuc2V0KG51bGwpO1xuICAgICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgICAgdGhpcy5fY3VycmVudERyb3BMaXN0LnNldChudWxsKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5oYW5kbGUoKSwgJ3VzZXJTZWxlY3QnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2ZW50Q2xpY2tpbmcoKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuZWxlbWVudCgpLnN0eWxlLnRyYW5zZm9ybTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHggPSBOdW1iZXIodHJhbnNmb3JtLnNwbGl0KCd0cmFuc2xhdGVYKCcpWzFdPy5zcGxpdCgncHgpJylbMF0pO1xuICAgICAgeSA9IE51bWJlcih0cmFuc2Zvcm0uc3BsaXQoJ3RyYW5zbGF0ZVkoJylbMV0/LnNwbGl0KCdweCknKVswXSk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcHBlZEludG9MaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgaWYgKGRyb3BwZWRJbnRvTGlzdCAmJiB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgZHJvcHBlZEludG9MaXN0LmZpbmFsaXplU29ydChlLCB0aGlzLCB0aGlzLl9wYXJlbnREcm9wTGlzdCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgdGhpcy5fcGFyZW50RHJvcExpc3QuY2FuY2VsU29ydCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wWm9uZURyb3BIYW5kbGVyKGUpO1xuICAgIH1cblxuICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyBSQUYgY2FsbGJhY2tzXG4gICAgaWYgKHRoaXMucmFmSWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmSWQpO1xuICAgICAgdGhpcy5yYWZJZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1BvaW50ZXJFdmVudCA9IG51bGw7XG5cbiAgICB0aGlzLmFjdGl2ZVBvaW50ZXJJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wTGlzdC5zZXQobnVsbCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAndXNlclNlbGVjdCcpO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgIGNvbnN0IGxpc3RVbmRlclBvaW50ZXIgPSB0aGlzLmdldERyb3BMaXN0RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgIHRoaXMucmVtb3ZlQ2xvbmVFbGVtZW50V2l0aEFuaW1hdGlvbih4IHx8IDAsIHkgfHwgMCwgbGlzdFVuZGVyUG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50KCksICdvcGFjaXR5JywgdGhpcy5lbGVtZW50T3BhY2l0eSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnRDbGlja2luZygpIHtcbiAgICBjb25zdCBibG9ja0NsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmxvY2tDbGljaywgeyBjYXB0dXJlOiB0cnVlLCBvbmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wTGlzdEludGVyYWN0aW9ucyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgcHJldmlvdXNMaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgbGV0IHRhcmdldExpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBjYW5Ecm9wID0gbGlzdFVuZGVyUG9pbnRlciAmJiB0aGlzLmNhbkRyb3BJbkxpc3QobGlzdFVuZGVyUG9pbnRlcik7XG5cbiAgICBpZiAoY2FuRHJvcCkge1xuICAgICAgdGFyZ2V0TGlzdCA9IGxpc3RVbmRlclBvaW50ZXI7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnNvciBiYXNlZCBvbiB3aGV0aGVyIGRyb3AgaXMgYWxsb3dlZFxuICAgIGlmIChsaXN0VW5kZXJQb2ludGVyKSB7XG4gICAgICBjb25zdCBjbG9uZUVsID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgICBjb25zdCBjdXJzb3IgPSBjYW5Ecm9wID8gJ21vdmUnIDogJ25vdC1hbGxvd2VkJztcbiAgICAgIGlmIChjbG9uZUVsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVFbCwgJ2N1cnNvcicsIGN1cnNvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnY3Vyc29yJywgY3Vyc29yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0TGlzdCAhPT0gcHJldmlvdXNMaXN0KSB7XG4gICAgICBpZiAocHJldmlvdXNMaXN0KSB7XG4gICAgICAgIHByZXZpb3VzTGlzdC5jYW5jZWxTb3J0UHJldmlldygpO1xuICAgICAgICBpZiAocHJldmlvdXNMaXN0ICE9PSB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgICAgIHByZXZpb3VzTGlzdC5yZXNldFNvcnRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0TGlzdCkge1xuICAgICAgICB0YXJnZXRMaXN0LmVudGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudERyb3BMaXN0LnNldCh0YXJnZXRMaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RHJvcExpc3QoKT8uc29ydChlLCB0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuRHJvcEluTGlzdChsaXN0OiBBWERyb3BMaXN0RGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaXN0IHx8IGxpc3Quc29ydGluZ0Rpc2FibGVkKCkgfHwgIXRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChsaXN0ID09PSB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRyYWdHcm91cCA9IHRoaXMuX3BhcmVudERyb3BMaXN0LmRyb3BMaXN0R3JvdXAoKTtcbiAgICBjb25zdCB0YXJnZXRHcm91cCA9IGxpc3QuZHJvcExpc3RHcm91cCgpO1xuXG4gICAgaWYgKCFkcmFnR3JvdXAgfHwgZHJhZ0dyb3VwICE9PSB0YXJnZXRHcm91cCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2UgKHRyZWUtc3BlY2lmaWMgdmFsaWRhdGlvbilcbiAgICBjb25zdCBkcmFnZ2VkTm9kZSA9IHRoaXMuZHJhZ0RhdGEoKTtcbiAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBsaXN0LmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW5vZGUtaWQnKTtcblxuICAgIGlmIChkcmFnZ2VkTm9kZSAmJiB0aGlzLmlzQ2lyY3VsYXJSZWZlcmVuY2UodGFyZ2V0Tm9kZUlkLCBkcmFnZ2VkTm9kZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDaXJjdWxhclJlZmVyZW5jZSh0YXJnZXROb2RlSWQ6IHN0cmluZyB8IG51bGwsIGRyYWdnZWROb2RlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcmFnZ2VkTm9kZSB8fCB0eXBlb2YgZHJhZ2dlZE5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGRyYWdnZWROb2RlIGFzIHsgaWQ/OiBzdHJpbmc7IGNoaWxkcmVuPzogdW5rbm93bltdIH07XG5cbiAgICAvLyBDaGVjayBpZiBkcm9wcGluZyBpbnRvIGl0c2VsZlxuICAgIGlmICh0YXJnZXROb2RlSWQgPT09IG5vZGUuaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRhcmdldE5vZGVJZCBpcyBpbiBkcmFnZ2VkTm9kZSdzIGRlc2NlbmRhbnRzXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuIHx8ICFBcnJheS5pc0FycmF5KG5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZCBhcyB7IGlkPzogc3RyaW5nIH07XG4gICAgICBpZiAoY2hpbGROb2RlLmlkID09PSB0YXJnZXROb2RlSWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0NpcmN1bGFyUmVmZXJlbmNlKHRhcmdldE5vZGVJZCwgY2hpbGQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVIb3ZlckhhbmRsZXIoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcFpvbmVzID0gdGhpcy5nZXREcm9wWm9uZXNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGNvbnN0IGRyb3Bab25lID0gZHJvcFpvbmVzWzBdO1xuXG4gICAgaWYgKCFkcm9wWm9uZSkge1xuICAgICAgaWYgKHRoaXMucHJldkRyb3Bab25lKCkpIHtcbiAgICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSAmJiB0aGlzLnByZXZEcm9wWm9uZSgpICE9PSBkcm9wWm9uZSkge1xuICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmUpICYmICFkcm9wWm9uZS5pc0hvdmVyZWQoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUuc2V0KGRyb3Bab25lKTtcbiAgICAgIGRyb3Bab25lLm9uRWxlbWVudEhvdmVyLmVtaXQoeyBzZW5kZXI6IGRyb3Bab25lLCBkcm9wcGVkOiB0aGlzLCBuYXRpdmVFdmVudDogZSwgc3RhdGU6ICdlbnRlcicgfSk7XG4gICAgICBkcm9wWm9uZS5pc0hvdmVyZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVEcm9wSGFuZGxlcihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wWm9uZXMgPSB0aGlzLmdldERyb3Bab25lc0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgZHJvcFpvbmUgPSBkcm9wWm9uZXNbMF07XG4gICAgaWYgKCF0aGlzLmRyb3Bab25lVmFsaWRhdGlvbihkcm9wWm9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJvcFpvbmUuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgZHJvcFpvbmUub25FbGVtZW50RHJvcC5lbWl0KHsgc2VuZGVyOiBkcm9wWm9uZSwgZHJvcHBlZDogdGhpcywgbmF0aXZlRXZlbnQ6IGUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERyb3Bab25lc0Zyb21Qb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEFYRHJvcFpvbmVEaXJlY3RpdmVbXSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAuZmlsdGVyKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnYXhEcm9wWm9uZSddID09PSAndHJ1ZScpXG4gICAgICAubWFwKChlbCkgPT4gZWxbJ19fYXhDb250ZXh0X18nXSBhcyBBWERyb3Bab25lRGlyZWN0aXZlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcExpc3RGcm9tUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBWERyb3BMaXN0RGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50cyA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludCh4LCB5KVxuICAgICAgLmZpbHRlcigoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ2F4RHJvcExpc3QnXSA9PT0gJ3RydWUnKTtcblxuICAgIGlmIChkcm9wTGlzdEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgZHJvcCBsaXN0LCB1c2UgaXRcbiAgICBpZiAoZHJvcExpc3RFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBkcm9wTGlzdEVsZW1lbnRzWzBdWydfX2F4Q29udGV4dF9fJ10gYXMgQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBNdWx0aXBsZSBkcm9wIGxpc3RzIGRldGVjdGVkIChuZXN0ZWQgc2NlbmFyaW8gbGlrZSB0cmVlMilcbiAgICAvLyBQcmlvcml0aXplIGJhc2VkIG9uIHBvaW50ZXIgcG9zaXRpb24gYW5kIGRyb3AgdHlwZVxuICAgIGNvbnN0IG9udG9Ob2RlTGlzdCA9IGRyb3BMaXN0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmRhdGFzZXRbJ2Ryb3BUeXBlJ10gPT09ICdvbnRvLW5vZGUnKTtcbiAgICBjb25zdCByZW9yZGVyTGlzdCA9IGRyb3BMaXN0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmRhdGFzZXRbJ2Ryb3BUeXBlJ10gIT09ICdvbnRvLW5vZGUnKTtcblxuICAgIC8vIElmIG5vIHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkLCByZXR1cm4gZmlyc3RcbiAgICBpZiAoIW9udG9Ob2RlTGlzdCB8fCAhcmVvcmRlckxpc3QpIHtcbiAgICAgIHJldHVybiBkcm9wTGlzdEVsZW1lbnRzWzBdWydfX2F4Q29udGV4dF9fJ10gYXMgQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgcG9pbnRlciBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgXCJvbnRvLW5vZGVcIiBlbGVtZW50XG4gICAgY29uc3Qgb250b05vZGVSZWN0ID0gb250b05vZGVMaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJlbGF0aXZlWSA9IHkgLSBvbnRvTm9kZVJlY3QudG9wO1xuICAgIGNvbnN0IGhlaWdodFJhdGlvID0gcmVsYXRpdmVZIC8gb250b05vZGVSZWN0LmhlaWdodDtcblxuICAgIC8vIFNtYXJ0IHpvbmUgZGV0ZWN0aW9uIGJhc2VkIG9uIHBvaW50ZXIgcG9zaXRpb25cbiAgICBpZiAoaGVpZ2h0UmF0aW8gPCBaT05FX1RPUF9USFJFU0hPTEQgfHwgaGVpZ2h0UmF0aW8gPiBaT05FX0JPVFRPTV9USFJFU0hPTEQpIHtcbiAgICAgIC8vIFRvcCBvciBib3R0b20gem9uZTogcmVvcmRlciAoZHJvcCBCRUZPUkUvQUZURVIgbm9kZSlcbiAgICAgIHJldHVybiByZW9yZGVyTGlzdFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENlbnRlciB6b25lOiBvbnRvLW5vZGUgKGRyb3AgSU5UTyBub2RlIGFzIGNoaWxkKVxuICAgICAgcmV0dXJuIG9udG9Ob2RlTGlzdFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmU6IEFYRHJvcFpvbmVEaXJlY3RpdmUpOiBib29sZWFuIHtcbiAgICBpZiAoIWRyb3Bab25lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZHJhZ0dyb3VwID0gdGhpcy5kcm9wWm9uZUdyb3VwKCk7XG4gICAgY29uc3QgZHJvcEdyb3VwID0gZHJvcFpvbmUuZHJvcFpvbmVHcm91cCgpO1xuICAgIGlmIChkcm9wR3JvdXAgJiYgZHJhZ0dyb3VwICE9PSBkcm9wR3JvdXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGxlYXZlUHJldkRyb3Bab25lKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLnByZXZEcm9wWm9uZSgpKSB7XG4gICAgICB0aGlzLnByZXZEcm9wWm9uZSgpLm9uRWxlbWVudEhvdmVyLmVtaXQoe1xuICAgICAgICBkcm9wcGVkOiB0aGlzLFxuICAgICAgICBzdGF0ZTogJ2xlYXZlJyxcbiAgICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICAgIHNlbmRlcjogdGhpcy5wcmV2RHJvcFpvbmUoKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUoKS5pc0hvdmVyZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucHJldkRyb3Bab25lLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGxldCBjb25zdHJhaW5lZFggPSB4O1xuICAgIGxldCBjb25zdHJhaW5lZFkgPSB5O1xuXG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSB0aGlzLmVsZW1lbnRSZWN0KCk7XG4gICAgY29uc3QgYm91bmRhcnlSZWN0ID0gdGhpcy5ib3VuZGFyeVJlY3QoKTtcblxuICAgIGlmIChib3VuZGFyeVJlY3QgJiYgZWxlbWVudFJlY3QpIHtcbiAgICAgIGNvbnN0IG1pblggPSBib3VuZGFyeVJlY3QubGVmdCAtIGVsZW1lbnRSZWN0LmxlZnQ7XG4gICAgICBjb25zdCBtaW5ZID0gYm91bmRhcnlSZWN0LnRvcCAtIGVsZW1lbnRSZWN0LnRvcDtcbiAgICAgIGNvbnN0IG1heFggPSBtaW5YICsgYm91bmRhcnlSZWN0LndpZHRoIC0gZWxlbWVudFJlY3Qud2lkdGg7XG4gICAgICBjb25zdCBtYXhZID0gbWluWSArIGJvdW5kYXJ5UmVjdC5oZWlnaHQgLSBlbGVtZW50UmVjdC5oZWlnaHQ7XG4gICAgICBjb25zdHJhaW5lZFggPSBjbGFtcCh4LCBtaW5YLCBtYXhYKTtcbiAgICAgIGNvbnN0cmFpbmVkWSA9IGNsYW1wKHksIG1pblksIG1heFkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneCcpIGNvbnN0cmFpbmVkWSA9IHRoaXMuY3VycmVudEF4aXMoKS55O1xuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneScpIGNvbnN0cmFpbmVkWCA9IHRoaXMuY3VycmVudEF4aXMoKS54O1xuXG4gICAgLy8gRGlyZWN0IERPTSBtYW5pcHVsYXRpb24gd2l0aG91dCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAndHJhbnNsYXRlJywgYCR7Y29uc3RyYWluZWRYfXB4ICR7Y29uc3RyYWluZWRZfXB4YCk7XG5cbiAgICAvLyBPbmx5IHVwZGF0ZSBzaWduYWwgYW5kIGVtaXQgaWYgcG9zaXRpb24gYWN0dWFsbHkgY2hhbmdlZCBzaWduaWZpY2FudGx5ICh0aHJvdHRsZSlcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50QXhpcygpO1xuICAgIGlmIChNYXRoLmFicyhjdXJyZW50LnggLSBjb25zdHJhaW5lZFgpID4gMC41IHx8IE1hdGguYWJzKGN1cnJlbnQueSAtIGNvbnN0cmFpbmVkWSkgPiAwLjUpIHtcbiAgICAgIHRoaXMuY3VycmVudEF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh7IHg6IGNvbnN0cmFpbmVkWCwgeTogY29uc3RyYWluZWRZIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldENsb25lUG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBsZXQgY29uc3RyYWluZWRYID0geDtcbiAgICBsZXQgY29uc3RyYWluZWRZID0geTtcblxuICAgIGNvbnN0IGNsb25lRWwgPSB0aGlzLmNsb25lZEVsZW1lbnQoKTtcbiAgICBjb25zdCBib3VuZGFyeVJlY3QgPSB0aGlzLmJvdW5kYXJ5UmVjdCgpO1xuXG4gICAgaWYgKGJvdW5kYXJ5UmVjdCAmJiBjbG9uZUVsKSB7XG4gICAgICBjb25zdCBjbG9uZVdpZHRoID0gY2xvbmVFbC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNsb25lSGVpZ2h0ID0gY2xvbmVFbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIGNvbnN0cmFpbmVkWCA9IGNsYW1wKHgsIGJvdW5kYXJ5UmVjdC5sZWZ0LCBib3VuZGFyeVJlY3QucmlnaHQgLSBjbG9uZVdpZHRoKTtcbiAgICAgIGNvbnN0cmFpbmVkWSA9IGNsYW1wKHksIGJvdW5kYXJ5UmVjdC50b3AsIGJvdW5kYXJ5UmVjdC5ib3R0b20gLSBjbG9uZUhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ0xvY2tBeGlzKCkgPT09ICd4JykgY29uc3RyYWluZWRZID0gdGhpcy5jdXJyZW50Q2xvbmVBeGlzKCkueTtcbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3knKSBjb25zdHJhaW5lZFggPSB0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKS54O1xuXG4gICAgLy8gRGlyZWN0IERPTSBtYW5pcHVsYXRpb24gd2l0aG91dCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lRWwsICd0cmFuc2xhdGUnLCBgJHtjb25zdHJhaW5lZFh9cHggJHtjb25zdHJhaW5lZFl9cHhgKTtcblxuICAgIC8vIE9ubHkgdXBkYXRlIHNpZ25hbCBhbmQgZW1pdCBpZiBwb3NpdGlvbiBhY3R1YWxseSBjaGFuZ2VkIHNpZ25pZmljYW50bHkgKHRocm90dGxlKVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKTtcbiAgICBpZiAoTWF0aC5hYnMoY3VycmVudC54IC0gY29uc3RyYWluZWRYKSA+IDAuNSB8fCBNYXRoLmFicyhjdXJyZW50LnkgLSBjb25zdHJhaW5lZFkpID4gMC41KSB7XG4gICAgICB0aGlzLmN1cnJlbnRDbG9uZUF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh7IHg6IGNvbnN0cmFpbmVkWCwgeTogY29uc3RyYWluZWRZIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2xvbmVFbGVtZW50SGFuZGxlcihvcmlnaW5hbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudC5zZXQobnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgY2xvbmVkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmRyYWdDbG9uZWRUZW1wbGF0ZSgpO1xuXG4gICAgY29uc3QgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZSA9IChzb3VyY2U6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc291cmNlKTtcblxuICAgICAgaWYgKGNvbXB1dGVkU3R5bGVzLmNzc1RleHQgJiYgdGFyZ2V0LnN0eWxlLmNzc1RleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGVtcENzc1RleHQgPSBjb21wdXRlZFN0eWxlcy5jc3NUZXh0O1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBjbG9uZWRFbGVtZW50KSB7XG4gICAgICAgICAgdGVtcENzc1RleHQgPSB0ZW1wQ3NzVGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoL3Bvc2l0aW9uOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvdG9wOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvbGVmdDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JpZ2h0OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvYm90dG9tOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvd2lkdGg6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9oZWlnaHQ6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9tYXJnaW5bXjtdKjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zaXRpb25bXjtdKjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zZm9ybTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zbGF0ZTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3otaW5kZXg6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9vcGFjaXR5OlteO10rOy9naSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBDc3NUZXh0ID0gdGVtcENzc1RleHQucmVwbGFjZSgvcG9pbnRlci1ldmVudHM6W147XSs7L2dpLCAnJyk7XG4gICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gdGVtcENzc1RleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXB1dGVkU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBjb21wdXRlZFN0eWxlc1tpXTtcbiAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdwb2ludGVyLWV2ZW50cycpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQgPT09IGNsb25lZEVsZW1lbnQgJiZcbiAgICAgICAgICAgIChwcm9wTmFtZSA9PT0gJ3Bvc2l0aW9uJyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3RvcCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdsZWZ0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3JpZ2h0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ2JvdHRvbScgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd3aWR0aCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdoZWlnaHQnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lLnN0YXJ0c1dpdGgoJ21hcmdpbicpIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lLnN0YXJ0c1dpdGgoJ3RyYW5zaXRpb24nKSB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3RyYW5zZm9ybScgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0cmFuc2xhdGUnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnei1pbmRleCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdvcGFjaXR5JylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wTmFtZSksXG4gICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcE5hbWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2Fubm90IGJlIHNldCBkaXJlY3RseSwgc2tpcCBzaWxlbnRseVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHNvdXJjZS5jaGlsZHJlbik7XG4gICAgICBjb25zdCB0YXJnZXRDaGlsZHJlbiA9IEFycmF5LmZyb20odGFyZ2V0LmNoaWxkcmVuKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNvdXJjZUNoaWxkcmVuW2ldIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0Q2hpbGRyZW5baV0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgIGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUoc291cmNlQ2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQsIHRhcmdldENoaWxkcmVuW2ldIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGN1c3RvbVRlbXBsYXRlKTtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYuc2V0KHZpZXdSZWYpO1xuXG4gICAgICBpZiAodmlld1JlZi5yb290Tm9kZXMubGVuZ3RoID4gMCAmJiB2aWV3UmVmLnJvb3ROb2Rlc1swXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNsb25lZEVsZW1lbnQgPSB2aWV3UmVmLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBjb25zdCB2aWV3SW5kZXggPSB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5kZXhPZih2aWV3UmVmKTtcbiAgICAgICAgaWYgKHZpZXdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuZGV0YWNoKHZpZXdJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkpIHtcbiAgICAgICAgICB0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYuc2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnQVhEcmFnRGlyZWN0aXZlOiBkcmFnQ2xvbmVkVGVtcGxhdGUgZGlkIG5vdCBwcm9kdWNlIGEgdmFsaWQgSFRNTEVsZW1lbnQgcm9vdCBub2RlLiBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBjbG9uaW5nLicsXG4gICAgICAgICk7XG4gICAgICAgIGNsb25lZEVsZW1lbnQgPSBvcmlnaW5hbEVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBhcHBseUNvbXB1dGVkU3R5bGVzUmVjdXJzaXZlKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb25lZEVsZW1lbnQgPSBvcmlnaW5hbEVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZShvcmlnaW5hbEVsZW1lbnQsIGNsb25lZEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChjbG9uZWRFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShjbG9uZWRFbGVtZW50LCAnaWQnKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcmlnaW5hbEVsZW1lbnQsICdvcGFjaXR5JywgJzAuNScpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxSZWN0ID0gb3JpZ2luYWxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ2xlZnQnLCAnMHB4Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndG9wJywgJzBweCcpO1xuICAgIGlmICghY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3dpZHRoJywgYCR7b3JpZ2luYWxSZWN0LndpZHRofXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdoZWlnaHQnLCBgJHtvcmlnaW5hbFJlY3QuaGVpZ2h0fXB4YCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ21hcmdpbicsICcwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnYm94LXNpemluZycsICdib3JkZXItYm94Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnb3BhY2l0eScsICcwLjc1Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnei1pbmRleCcsICcxMDAwMCcpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndXNlci1zZWxlY3QnLCAnbm9uZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RvdWNoLWFjdGlvbicsICdub25lJyk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd0cmFuc2xhdGUnLCBgJHtvcmlnaW5hbFJlY3QubGVmdH1weCAke29yaWdpbmFsUmVjdC50b3B9cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNsb25lZEVsZW1lbnQsICd0cmFuc2l0aW9uJyk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjbG9uZWRFbGVtZW50LCAndHJhbnNpdGlvbi1wcm9wZXJ0eScpO1xuXG4gICAgdGhpcy5jb3B5UHNldWRvRWxlbWVudFN0eWxlcyhvcmlnaW5hbEVsZW1lbnQsIGNsb25lZEVsZW1lbnQsICc6OmJlZm9yZScpO1xuICAgIHRoaXMuY29weVBzZXVkb0VsZW1lbnRTdHlsZXMob3JpZ2luYWxFbGVtZW50LCBjbG9uZWRFbGVtZW50LCAnOjphZnRlcicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIGNsb25lZEVsZW1lbnQpO1xuICAgIHRoaXMuY2xvbmVkRWxlbWVudC5zZXQoY2xvbmVkRWxlbWVudCk7XG4gICAgdGhpcy5zZXRDbG9uZVBvc2l0aW9uKG9yaWdpbmFsUmVjdC5sZWZ0LCBvcmlnaW5hbFJlY3QudG9wKTtcblxuICAgIHJldHVybiBjbG9uZWRFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHNldWRvRWxlbWVudFN0eWxlcyhzb3VyY2U6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBwc2V1ZG86ICc6OmJlZm9yZScgfCAnOjphZnRlcicpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHNldWRvU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc291cmNlLCBwc2V1ZG8pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBwc2V1ZG9TdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgIGNvbnN0IGRpc3BsYXkgPSBwc2V1ZG9TdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnZGlzcGxheScpO1xuICAgIGlmICghY29udGVudCB8fCBjb250ZW50ID09PSAnbm9uZScgfHwgZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBzZXVkb0VsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBzZXVkb1N0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBwc2V1ZG9TdHlsZXNbaV07XG4gICAgICB0cnkge1xuICAgICAgICBwc2V1ZG9FbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgIHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKSxcbiAgICAgICAgICBwc2V1ZG9TdHlsZXMuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wTmFtZSksXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFNvbWUgcHJvcGVydGllcyBtaWdodCBmYWlsIHRvIHNldCwgd2hpY2ggaXMgdXN1YWxseSBmaW5lLlxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCdcIicpICYmIGNvbnRlbnQuZW5kc1dpdGgoJ1wiJykpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkocHNldWRvRWxlbWVudCwgJ3RleHRDb250ZW50JywgY29udGVudC5zbGljZSgxLCAtMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHBzZXVkb0VsZW1lbnQsICd0ZXh0Q29udGVudCcsIGNvbnRlbnQpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBzZXVkb0VsZW1lbnQsICdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgaWYgKHBzZXVkbyA9PT0gJzo6YmVmb3JlJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGFyZ2V0LCBwc2V1ZG9FbGVtZW50LCB0YXJnZXQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGFyZ2V0LCBwc2V1ZG9FbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNsb25lRWxlbWVudFdpdGhBbmltYXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIsIGRyb3BMaXN0PzogQVhEcm9wTGlzdERpcmVjdGl2ZSkge1xuICAgIGRyb3BMaXN0Py5fZHJhZ2dhYmxlSXRlbXMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUVsZW1lbnRUcmFuc2l0aW9uKGl0ZW0uZWxlbWVudCgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVkRWxlbWVudCgpO1xuICAgIGlmICghY2xvbmUpIHJldHVybjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50KCksICdvcGFjaXR5JywgdGhpcy5lbGVtZW50T3BhY2l0eSgpKTtcblxuICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGVsZW1lbnRSZWN0KSB7XG4gICAgICB0aGlzLnNldEVsZW1lbnRUcmFuc2l0aW9uKGNsb25lKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmUsICdvcGFjaXR5JywgJzAnKTtcbiAgICAgIHRoaXMuc2V0Q2xvbmVQb3NpdGlvbihlbGVtZW50UmVjdC5sZWZ0ICsgeCwgZWxlbWVudFJlY3QudG9wICsgeSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRyYWdUcmFuc2l0aW9uKCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xvbmVFbGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudCgpO1xuICAgICAgICBkcm9wTGlzdD8uX2RyYWdnYWJsZUl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0RWxlbWVudFRyYW5zaXRpb24oaXRlbS5lbGVtZW50KCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2xvbmVFbGVtZW50KCkge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lZEVsZW1lbnQoKTtcbiAgICBpZiAoY2xvbmU/LnBhcmVudE5vZGUpIHtcbiAgICAgIC8vIFJlbW92ZSBjbGFzc2VzIGJlZm9yZSByZW1vdmluZyBlbGVtZW50XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGNsb25lLCAnYXgtZHJhZy1wcmV2aWV3Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGNsb25lLCAnYXgtZHJhZ2dpbmcnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoY2xvbmUucGFyZW50Tm9kZSwgY2xvbmUpO1xuICAgIH1cbiAgICB0aGlzLmNsb25lZEVsZW1lbnQuc2V0KG51bGwpO1xuXG4gICAgaWYgKHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKSkge1xuICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZigpLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYuc2V0KG51bGwpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRG9jdW1lbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlck1vdmUsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyVXApO1xuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJVcCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURvY3VtZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJNb3ZlKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICB9KTtcbiAgfVxufVxuIl19","import { NXComponent } from '@acorex/cdk/common';\nimport { Directive, input, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXDropZoneDirective extends NXComponent {\n constructor() {\n super(...arguments);\n this.dropZoneGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropZoneGroup\" }] : []));\n this.isHovered = signal(false, ...(ngDevMode ? [{ debugName: \"isHovered\" }] : []));\n this.element = signal(this.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n this.onElementDrop = output();\n this.onElementHover = output();\n }\n ngOnInit() {\n this.element().dataset['axDropZone'] = 'true';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.15\", type: AXDropZoneDirective, isStandalone: true, selector: \"[axDropZone]\", inputs: { dropZoneGroup: { classPropertyName: \"dropZoneGroup\", publicName: \"dropZoneGroup\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onElementDrop: \"onElementDrop\", onElementHover: \"onElementHover\" }, exportAs: [\"axDropZone\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropZoneDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropZone]',\n exportAs: 'axDropZone',\n }]\n }], propDecorators: { dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropZoneGroup\", required: false }] }], onElementDrop: [{ type: i0.Output, args: [\"onElementDrop\"] }], onElementHover: [{ type: i0.Output, args: [\"onElementHover\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZekUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS0Usa0JBQWEsR0FBRyxLQUFLLG1FQUFVLENBQUM7UUFFaEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLHFEQUFDLENBQUM7UUFDakIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxtREFBQyxDQUFDO1FBRTlDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxFQUF3QixDQUFDO0tBS2pEO0lBSEMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7K0dBWFUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRHJvcFpvbmVEcm9wRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYRHJvcFpvbmVEaXJlY3RpdmUsIE1vdXNlRXZlbnQ+IHtcbiAgZHJvcHBlZDogQVhEcmFnRGlyZWN0aXZlO1xufVxuZXhwb3J0IHR5cGUgQVhEcm9wWm9uZUhvdmVyRXZlbnQgPSBBWERyb3Bab25lRHJvcEV2ZW50ICYgeyBzdGF0ZTogJ2VudGVyJyB8ICdsZWF2ZScgfTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcFpvbmVdJyxcbiAgZXhwb3J0QXM6ICdheERyb3Bab25lJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wWm9uZURpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcblxuICBpc0hvdmVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgb25FbGVtZW50RHJvcCA9IG91dHB1dDxBWERyb3Bab25lRHJvcEV2ZW50PigpO1xuICBvbkVsZW1lbnRIb3ZlciA9IG91dHB1dDxBWERyb3Bab25lSG92ZXJFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQoKS5kYXRhc2V0WydheERyb3Bab25lJ10gPSAndHJ1ZSc7XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDragDirective } from './drag.directive';\nimport { AXDropListDirective } from './drop-list.directive';\nimport { AXDropZoneDirective } from './drop-zone.directive';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective];\nexport class AXDragDropModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcmFnLWRyb3AubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCxNQUFNLFNBQVMsR0FBRyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBT3JHLE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjtnSEFBaEIsZ0JBQWdCLFlBUFYsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixhQUFoRixlQUFlLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CO2dIQU90RixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBTDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUN2QixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcExpc3REaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3AtbGlzdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcC16b25lLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtBWERyYWdEaXJlY3RpdmUsIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSwgQVhEcm9wTGlzdERpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZV07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcmFnRHJvcE1vZHVsZSB7fVxuIl19","import { clamp } from 'lodash-es';\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nexport function moveItemInArray(array, fromIndex, toIndex) {\n const from = clamp(fromIndex, array.length - 1);\n const to = clamp(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n const target = array[from];\n const delta = to < from ? -1 : 1;\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nexport function transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const from = clamp(currentIndex, currentArray.length - 1);\n const to = clamp(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctZHJvcC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBVSxLQUFVLEVBQUUsU0FBaUIsRUFBRSxPQUFlO0lBQ3JGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFNUMsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDaEIsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixZQUFpQixFQUNqQixXQUFnQixFQUNoQixZQUFvQixFQUNwQixXQUFtQjtJQUVuQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEQsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGFtcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8qKlxuICogTW92ZXMgYW4gaXRlbSBvbmUgaW5kZXggaW4gYW4gYXJyYXkgdG8gYW5vdGhlci5cbiAqIEBwYXJhbSBhcnJheSBBcnJheSBpbiB3aGljaCB0byBtb3ZlIHRoZSBpdGVtLlxuICogQHBhcmFtIGZyb21JbmRleCBTdGFydGluZyBpbmRleCBvZiB0aGUgaXRlbS5cbiAqIEBwYXJhbSB0b0luZGV4IEluZGV4IHRvIHdoaWNoIHRoZSBpdGVtIHNob3VsZCBiZSBtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmVJdGVtSW5BcnJheTxUID0gYW55PihhcnJheTogVFtdLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGZyb20gPSBjbGFtcChmcm9tSW5kZXgsIGFycmF5Lmxlbmd0aCAtIDEpO1xuICBjb25zdCB0byA9IGNsYW1wKHRvSW5kZXgsIGFycmF5Lmxlbmd0aCAtIDEpO1xuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IGFycmF5W2Zyb21dO1xuICBjb25zdCBkZWx0YSA9IHRvIDwgZnJvbSA/IC0xIDogMTtcblxuICBmb3IgKGxldCBpID0gZnJvbTsgaSAhPT0gdG87IGkgKz0gZGVsdGEpIHtcbiAgICBhcnJheVtpXSA9IGFycmF5W2kgKyBkZWx0YV07XG4gIH1cblxuICBhcnJheVt0b10gPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogTW92ZXMgYW4gaXRlbSBmcm9tIG9uZSBhcnJheSB0byBhbm90aGVyLlxuICogQHBhcmFtIGN1cnJlbnRBcnJheSBBcnJheSBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyIHRoZSBpdGVtLlxuICogQHBhcmFtIHRhcmdldEFycmF5IEFycmF5IGludG8gd2hpY2ggdG8gcHV0IHRoZSBpdGVtLlxuICogQHBhcmFtIGN1cnJlbnRJbmRleCBJbmRleCBvZiB0aGUgaXRlbSBpbiBpdHMgY3VycmVudCBhcnJheS5cbiAqIEBwYXJhbSB0YXJnZXRJbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGl0ZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2ZlckFycmF5SXRlbTxUID0gYW55PihcbiAgY3VycmVudEFycmF5OiBUW10sXG4gIHRhcmdldEFycmF5OiBUW10sXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICB0YXJnZXRJbmRleDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGNvbnN0IGZyb20gPSBjbGFtcChjdXJyZW50SW5kZXgsIGN1cnJlbnRBcnJheS5sZW5ndGggLSAxKTtcbiAgY29uc3QgdG8gPSBjbGFtcCh0YXJnZXRJbmRleCwgdGFyZ2V0QXJyYXkubGVuZ3RoKTtcblxuICBpZiAoY3VycmVudEFycmF5Lmxlbmd0aCkge1xuICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1kcmFnLWRyb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9hY29yZXgtY2RrLWRyYWctZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;AAEO,MAAM,qBAAqB,CAAC;AACnC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1L;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC;AAChI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,gBAAgB;AAC9C,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACVb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,SAAS,WAAW,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC1C,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9C,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AACzC;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACxM;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClH;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACnK;AACA;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AACjD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpF;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB;AACpD;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvC,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;AACvD,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,CAAC;AACzE;AACA,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;AAChD,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACjC,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,yBAAyB,EAAE;AACxC,IAAI;AACJ;AACA;AACA,IAAI,uBAAuB,CAAC,QAAQ,EAAE;AACtC,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,QAAQ;AAClD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,QAAQ,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,QAAQ,CAAC,YAAY,EAAE;AAC7G,YAAY;AACZ,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;AACjE,QAAQ,qBAAqB,CAAC,MAAM;AACpC,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM;AACjC,gBAAgB,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAgB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACtG,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;AAC1D,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AAClG,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,yBAAyB,EAAE;AACxC,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;AACjE,QAAQ,qBAAqB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAChF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AACnD,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAY;AACZ,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AAClG,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC;AACpF,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,mBAAmB,EAAE;AAC9D,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC3D,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE;AACjD,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACxG,YAAY,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACjD,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxD,QAAQ,IAAI,CAAC,UAAU,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE;AACnD,YAAY,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/F;AACA,QAAQ,MAAM,YAAY,GAAG,UAAU,KAAK,IAAI,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,eAAe,GAAG;AAC9F,cAAc,eAAe,GAAG;AAChC,cAAc,eAAe;AAC7B,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAClC,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,iBAAiB,EAAE,UAAU;AACzC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;AAChD,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AAC/D,YAAY;AACZ,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACnC,YAAY;AACZ,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;AACrG,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;AAC3E,IAAI;AACJ;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AACvE,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,KAAK;AACpE,YAAY,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE;AAC9C,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;AACrD,YAAY,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACnD,YAAY,OAAO;AACnB,gBAAgB,IAAI,EAAE,aAAa;AACnC,gBAAgB,OAAO,EAAE,EAAE;AAC3B,gBAAgB,WAAW,EAAE,IAAI;AACjC,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjC,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnC,gBAAgB,OAAO,EAAE;AACzB,oBAAoB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACpD,oBAAoB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1D,oBAAoB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;AACtD,oBAAoB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;AACxD,iBAAiB;AACjB,aAAa;AACb,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC1D,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAC/C,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,YAAY,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClD,YAAY,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpE,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AACtF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,eAAe,EAAE;AAChD,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACjD,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAChD,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;AACpC,YAAY,OAAO,CAAC,CAAC;AACrB,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/C,QAAQ,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACjF,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACzE,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK;AACpD,cAAc,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC;AAClE,cAAc,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AACvE,QAAQ,IAAI,kBAAkB,GAAG,CAAC,CAAC;AACnC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,YAAY,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvC,YAAY,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI;AACzH,gBAAgB,WAAW;AAC3B,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC;AACzF,YAAY,IAAI,eAAe,GAAG,YAAY,EAAE;AAChD,gBAAgB,kBAAkB,GAAG,CAAC;AACtC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;AACvC,YAAY,kBAAkB,GAAG,QAAQ,CAAC,MAAM;AAChD,QAAQ;AACR;AACA,QAAQ,MAAM,yBAAyB,GAAG,aAAa,GAAG,CAAC,CAAC,IAAI,kBAAkB,IAAI,aAAa,GAAG,kBAAkB,GAAG,CAAC,GAAG,kBAAkB;AACjJ;AACA,QAAQ,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AAClC,YAAY,OAAO,yBAAyB;AAC5C,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,yBAAyB,CAAC;AACxE,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,yBAAyB,CAAC;AACtE,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAY,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3C,YAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AAC9E;AACA,gBAAgB,IAAI,yBAAyB,GAAG,aAAa,EAAE;AAC/D,oBAAoB,OAAO,CAAC,CAAC;AAC7B,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC;AACjC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,yBAAyB;AACxC,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACjD,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACzF,QAAQ,MAAM,eAAe,GAAG,aAAa,GAAG,CAAC,CAAC;AAClD,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzD;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,WAAW;AAC/E,QAAQ,IAAI,CAAC,eAAe,IAAI,UAAU,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACjG;AACA,YAAY,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,CAAC;AACxE,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,CAAC,yBAAyB,EAAE;AAC5C,YAAY,MAAM,YAAY,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,KAAK;AACvE,kBAAkB,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC5E,kBAAkB,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK;AACjF,YAAY,MAAM,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC;AAC1G,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;AACzD,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AAC9C,oBAAoB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AACzE,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,CAAC;AAC/G,gBAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC1K,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,yBAAyB,CAAC,UAAU,EAAE,WAAW,EAAE;AACvD,QAAQ,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE;AAC7C,QAAQ,IAAI,CAAC,IAAI;AACjB,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACvC;AACA,YAAY,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE;AACtD,YAAY,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;AACpE;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;AACpF,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;AACpF;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,eAAe,EAAE,MAAM,CAAC;AACtF;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC;AAC/E,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,CAAC;AAC7F,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACzC,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE;AAC5D,YAAY,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;AACjD,YAAY,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE;AAClD,gBAAgB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,OAAO,CAAC;AACvG,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAClF,YAAY;AACZ,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAC9E,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAC9E,YAAY,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC3C,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE;AAC7E,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACpD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvC,QAAQ,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;AAChC;AACA,YAAY,IAAI,KAAK,KAAK,aAAa,EAAE;AACzC;AACA,gBAAgB,IAAI,MAAM,GAAG,CAAC;AAC9B,gBAAgB,IAAI,WAAW,GAAG,aAAa,EAAE;AACjD;AACA,oBAAoB,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAC1E,wBAAwB,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AAChF,oBAAoB;AACpB,gBAAgB;AAChB,qBAAqB;AACrB;AACA,oBAAoB,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AACtE,wBAAwB,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AAChF,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,OAAO,MAAM;AAC7B,YAAY;AACZ,iBAAiB;AACjB;AACA;AACA,gBAAgB,MAAM,KAAK,GAAG,eAAe,GAAG,OAAO;AACvD,gBAAgB,IAAI,aAAa,GAAG,WAAW,IAAI,KAAK,GAAG,aAAa,IAAI,KAAK,GAAG,WAAW,EAAE;AACjG,oBAAoB,OAAO,CAAC,KAAK;AACjC,gBAAgB;AAChB,qBAAqB,IAAI,aAAa,GAAG,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,GAAG,aAAa,EAAE;AACvG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,KAAK,IAAI,WAAW,EAAE;AACtC;AACA,gBAAgB,OAAO,eAAe,GAAG,OAAO;AAChD,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA,IAAI,uBAAuB,CAAC,UAAU,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACxD,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACvC,YAAY,IAAI,IAAI,EAAE;AACtB,gBAAgB,IAAI,CAAC,mBAAmB,EAAE;AAC1C,gBAAgB,IAAI,CAAC,cAAc,EAAE;AACrC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACzC,IAAI;AACJ;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACpE,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/8B;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,cAAc;AAC5C,oBAAoB,QAAQ,EAAE,YAAY;AAC1C,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AC7ZpqB;AACA,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC;AACO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AACzC,QAAQ,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC5C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxD,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAQ,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,qBAAqB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5H,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAChM,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5G,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjH,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjH,QAAQ,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChJ,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrH,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvC,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3G,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChK,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM;AAC9C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AAChD,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,YAAY,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9C,gBAAgB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5D,YAAY;AACZ,YAAY,OAAO,QAAQ,YAAY,UAAU,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ;AACrF,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM;AAC1C,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,YAAY,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,EAAE;AACzD,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM;AAC3C,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,YAAY,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,qBAAqB,EAAE;AAClE,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1I,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM;AAChD,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAC9C,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAClF,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC;AAC7E,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC;AAClE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC;AACxE,YAAY;AACZ,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM;AAChD,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,gBAAgB;AAChB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AAC/C,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC3D;AACA,YAAY,IAAI,cAAc,IAAI,cAAc,KAAK,aAAa,EAAE;AACpE,gBAAgB,cAAc,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACxF,gBAAgB,cAAc,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC;AAC9F,YAAY;AACZ;AACA,YAAY,IAAI,aAAa,IAAI,aAAa,KAAK,cAAc,EAAE;AACnE,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAClD,oBAAoB,aAAa,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACxF,oBAAoB,aAAa,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClH,gBAAgB,CAAC,CAAC;AAClB,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;AACzD,YAAY;AACZ,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE,IAAI;AACJ,IAAI,mBAAmB;AACvB,IAAI,mBAAmB;AACvB,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACzD,YAAY;AACZ,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC;AAClE,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAC7E,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACnD,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAChF,gBAAgB,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACtF,YAAY;AACZ,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC3C,gBAAgB,IAAI,CAAC,kBAAkB,EAAE;AACzC,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3D,gBAAgB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACjD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,oBAAoB,CAAC,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,iCAAiC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC;AAClI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,EAAE,0CAA0C,CAAC;AACjH,IAAI;AACJ,IAAI,uBAAuB,CAAC,OAAO,EAAE;AACrC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,CAAC;AACzE,IAAI;AACJ,IAAI,iBAAiB,CAAC,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,eAAe,EAAE;AAC9G,YAAY;AACZ,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAC1C,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC;AACnE,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAC/C,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC;AACvE,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;AAC9G,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC;AACnE,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,QAAQ,IAAI,CAAC,oBAAoB,EAAE;AACnC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAC9D,YAAY;AACZ,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAI;AACJ,IAAI,iBAAiB,CAAC,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,CAAC,CAAC,cAAc,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC9B,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;AACpD;AACA,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,EAAE;AAC3D,gBAAgB,OAAO;AACvB,YAAY;AACZ,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7B,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC1C,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC3C,gBAAgB,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzE,gBAAgB,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzE,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AAC3D,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACjE,gBAAgB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACjE,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5C,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC;AACxC,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,gBAAgB,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM;AACzD,oBAAoB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAClD,wBAAwB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACjF,wBAAwB,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvD,oBAAoB;AACpB,oBAAoB,IAAI,CAAC,KAAK,GAAG,IAAI;AACrC,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACxC,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC;AAC7D,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;AACrE,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3D,YAAY,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;AAClD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACxC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACvC,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,EAAE;AACtE,YAAY,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACxC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI;AAC/C,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG;AAC9C,aAAa,CAAC;AACd,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACxE,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAChE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;AAC5D,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,eAAe,CAAC,CAAC,EAAE;AACvB,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACjH,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAC1C,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC;AACnE,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC;AAChE,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC;AACxE,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3C,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC;AAClE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,SAAS;AACxD,QAAQ,IAAI,CAAC,GAAG,CAAC;AACjB,QAAQ,IAAI,CAAC,GAAG,CAAC;AACjB,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,YAAY,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvD,QAAQ,IAAI,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE;AACrD,YAAY,eAAe,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC;AACvE,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE;AACvC,YAAY,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC;AACjD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACvC,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACjC,YAAY,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI;AAC7B,QAAQ;AACR,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvC,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,QAAQ,IAAI,CAAC,uBAAuB,EAAE;AACtC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC;AAC9D,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACvC,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AACpF,YAAY,IAAI,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;AAClF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AACpF,QAAQ;AACR,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK;AACtC,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,QAAQ,CAAC;AACT,QAAQ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1F,IAAI;AACJ,IAAI,0BAA0B,CAAC,CAAC,EAAE;AAClC,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAChF,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACpD,QAAQ,IAAI,UAAU,GAAG,IAAI;AAC7B,QAAQ,MAAM,OAAO,GAAG,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAChF,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,UAAU,GAAG,gBAAgB;AACzC,QAAQ;AACR;AACA,QAAQ,IAAI,gBAAgB,EAAE;AAC9B,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AAChD,YAAY,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa;AAC3D,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACjE,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC;AACxE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,UAAU,KAAK,YAAY,EAAE;AACzC,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,YAAY,CAAC,iBAAiB,EAAE;AAChD,gBAAgB,IAAI,YAAY,KAAK,IAAI,CAAC,eAAe,EAAE;AAC3D,oBAAoB,YAAY,CAAC,cAAc,EAAE;AACjD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,YAAY;AACZ,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjD,QAAQ;AACR,QAAQ,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAC9C,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACtE,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE;AAC3C,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AAC9D,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AAChD,QAAQ,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,WAAW,EAAE;AACrD,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;AACtE,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;AAChF,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE;AACnD,QAAQ,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AAC7D,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,WAAW;AAChC;AACA,QAAQ,IAAI,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE;AACtC,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC7D,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3C,YAAY,MAAM,SAAS,GAAG,KAAK;AACnC,YAAY,IAAI,SAAS,CAAC,EAAE,KAAK,YAAY,EAAE;AAC/C,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;AAC/D,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,oBAAoB,CAAC,CAAC,EAAE;AAC5B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1E,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACzC,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,EAAE;AACrE,YAAY,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACrC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE;AACxE,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,YAAY,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7G,YAAY,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,QAAQ;AACR,IAAI;AACJ,IAAI,mBAAmB,CAAC,CAAC,EAAE;AAC3B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1E,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAY;AACZ,QAAQ;AACR,QAAQ,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAQ,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACxF,IAAI;AACJ,IAAI,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAQ,OAAO;AACf,aAAa,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,MAAM;AAC5F,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;AAC7C,IAAI;AACJ,IAAI,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE;AAC/B,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACtC,aAAa,iBAAiB,CAAC,CAAC,EAAE,CAAC;AACnC,aAAa,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC;AAC7F,QAAQ,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR;AACA,QAAQ,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,YAAY,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AACvD,QAAQ;AACR;AACA;AACA,QAAQ,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,WAAW,CAAC;AAClG,QAAQ,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,WAAW,CAAC;AACjG;AACA,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE;AAC3C,YAAY,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AACvD,QAAQ;AACR;AACA,QAAQ,MAAM,YAAY,GAAG,YAAY,CAAC,qBAAqB,EAAE;AACjE,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG;AAC9C,QAAQ,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM;AAC3D;AACA,QAAQ,IAAI,WAAW,GAAG,kBAAkB,IAAI,WAAW,GAAG,qBAAqB,EAAE;AACrF;AACA,YAAY,OAAO,WAAW,CAAC,eAAe,CAAC;AAC/C,QAAQ;AACR,aAAa;AACb;AACA,YAAY,OAAO,YAAY,CAAC,eAAe,CAAC;AAChD,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,CAAC,QAAQ,EAAE;AACjC,QAAQ,IAAI,CAAC,QAAQ;AACrB,YAAY,OAAO,KAAK;AACxB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAC9C,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE;AAClD,QAAQ,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;AAClD,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,iBAAiB,CAAC,CAAC,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACjC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;AACpD,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,KAAK,EAAE,OAAO;AAC9B,gBAAgB,WAAW,EAAE,CAAC;AAC9B,gBAAgB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3C,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACpD,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE;AACtB,QAAQ,IAAI,YAAY,GAAG,CAAC;AAC5B,QAAQ,IAAI,YAAY,GAAG,CAAC;AAC5B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9C,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAChD,QAAQ,IAAI,YAAY,IAAI,WAAW,EAAE;AACzC,YAAY,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;AAC7D,YAAY,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG;AAC3D,YAAY,MAAM,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;AACtE,YAAY,MAAM,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;AACxE,YAAY,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/C,YAAY,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/C,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG;AACvC,YAAY,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG;AACvC,YAAY,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAClG;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,EAAE;AAClG,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AACtE,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/E,QAAQ;AACR,IAAI;AACJ,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;AAC3B,QAAQ,IAAI,YAAY,GAAG,CAAC;AAC5B,QAAQ,IAAI,YAAY,GAAG,CAAC;AAC5B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AAC5C,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAChD,QAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AACrC,YAAY,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW;AAClD,YAAY,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY;AACpD,YAAY,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;AACvF,YAAY,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;AACxF,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG;AACvC,YAAY,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACpD,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG;AACvC,YAAY,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACpD;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAC3F;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC/C,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,EAAE;AAClG,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AAC3E,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/E,QAAQ;AACR,IAAI;AACJ,IAAI,yBAAyB,CAAC,eAAe,EAAE;AAC/C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,IAAI,aAAa;AACzB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxD,QAAQ,MAAM,4BAA4B,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;AACjE,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,gBAAgB;AAChB,YAAY,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAClE,YAAY,IAAI,cAAc,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9E,gBAAgB,IAAI,WAAW,GAAG,cAAc,CAAC,OAAO;AACxD,gBAAgB,IAAI,MAAM,KAAK,aAAa,EAAE;AAC9C,oBAAoB,WAAW,GAAG;AAClC,yBAAyB,OAAO,CAAC,mBAAmB,EAAE,EAAE;AACxD,yBAAyB,OAAO,CAAC,cAAc,EAAE,EAAE;AACnD,yBAAyB,OAAO,CAAC,eAAe,EAAE,EAAE;AACpD,yBAAyB,OAAO,CAAC,gBAAgB,EAAE,EAAE;AACrD,yBAAyB,OAAO,CAAC,iBAAiB,EAAE,EAAE;AACtD,yBAAyB,OAAO,CAAC,gBAAgB,EAAE,EAAE;AACrD,yBAAyB,OAAO,CAAC,iBAAiB,EAAE,EAAE;AACtD,yBAAyB,OAAO,CAAC,sBAAsB,EAAE,EAAE;AAC3D,yBAAyB,OAAO,CAAC,0BAA0B,EAAE,EAAE;AAC/D,yBAAyB,OAAO,CAAC,oBAAoB,EAAE,EAAE;AACzD,yBAAyB,OAAO,CAAC,oBAAoB,EAAE,EAAE;AACzD,yBAAyB,OAAO,CAAC,kBAAkB,EAAE,EAAE;AACvD,yBAAyB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AACxD,gBAAgB;AAChB,gBAAgB,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;AAChF,gBAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW;AAClD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChE,oBAAoB,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC;AACtD,oBAAoB,IAAI,QAAQ,KAAK,gBAAgB,EAAE;AACvD,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,IAAI,MAAM,KAAK,aAAa;AAChD,yBAAyB,QAAQ,KAAK,UAAU;AAChD,4BAA4B,QAAQ,KAAK,KAAK;AAC9C,4BAA4B,QAAQ,KAAK,MAAM;AAC/C,4BAA4B,QAAQ,KAAK,OAAO;AAChD,4BAA4B,QAAQ,KAAK,QAAQ;AACjD,4BAA4B,QAAQ,KAAK,OAAO;AAChD,4BAA4B,QAAQ,KAAK,QAAQ;AACjD,4BAA4B,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzD,4BAA4B,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;AAC7D,4BAA4B,QAAQ,KAAK,WAAW;AACpD,4BAA4B,QAAQ,KAAK,WAAW;AACpD,4BAA4B,QAAQ,KAAK,SAAS;AAClD,4BAA4B,QAAQ,KAAK,SAAS,CAAC,EAAE;AACrD,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACnJ,oBAAoB;AACpB,oBAAoB,MAAM;AAC1B;AACA,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ,YAAY,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9D,YAAY,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9D,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5D,gBAAgB,IAAI,cAAc,CAAC,CAAC,CAAC,YAAY,WAAW,IAAI,cAAc,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE;AAC1G,oBAAoB,4BAA4B,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AACtF,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,cAAc,CAAC;AACpF,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;AAClD,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE;AAC7F,gBAAgB,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACpD,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AACxE,gBAAgB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACtC,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC3D,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AACjD,oBAAoB,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE;AACzD,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvD,gBAAgB;AAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,qHAAqH,CAAC;AACnJ,gBAAgB,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/D,gBAAgB,4BAA4B,CAAC,eAAe,EAAE,aAAa,CAAC;AAC5E,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3D,YAAY,4BAA4B,CAAC,eAAe,EAAE,aAAa,CAAC;AACxE,QAAQ;AACR,QAAQ,IAAI,aAAa,CAAC,EAAE,EAAE;AAC9B,YAAY,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC;AAC9D,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,QAAQ,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,EAAE;AACpE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC;AACjG,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC;AAC5D,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC;AAC3D,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrF,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACvF,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC;AAC5D,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;AACzE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC;AAChE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;AACjE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;AACtG,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC;AACpE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,MAAM,CAAC;AACrE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1G,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,CAAC;AAC9D,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,qBAAqB,CAAC;AACvE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC;AAChF,QAAQ,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC;AAC/E,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;AACpE,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC;AAClE,QAAQ,OAAO,aAAa;AAC5B,IAAI;AACJ,IAAI,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACpD,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;AACpE,QAAQ,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChE,QAAQ,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChE,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE;AAClE,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACjE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,YAAY,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;AAC5C,YAAY,IAAI;AAChB,gBAAgB,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC9I,YAAY;AACZ,YAAY,OAAO,CAAC,EAAE;AACtB;AACA,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9D,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;AAC5E,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC;AACvE,QAAQ,IAAI,MAAM,KAAK,UAAU,EAAE;AACnC,YAAY,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC;AAChF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC;AAC5D,QAAQ;AACR,IAAI;AACJ,IAAI,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE;AACpD,QAAQ,QAAQ,EAAE,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACtD,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACxD,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY;AACZ,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AAChF,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,qBAAqB,EAAE;AAClE,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAC5C,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC;AACzD,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5E,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AACpC,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,CAAC,MAAM;AAC7B,gBAAgB,IAAI,CAAC,kBAAkB,EAAE;AACzC,gBAAgB,QAAQ,EAAE,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC9D,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7D,gBAAgB,CAAC,CAAC;AAClB,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACzC,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY;AACZ,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAQ,IAAI,KAAK,EAAE,UAAU,EAAE;AAC/B;AACA,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAC/D,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC;AAC3D,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;AAC9D,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AACzC,YAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE;AACjD,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC/B,IAAI;AACJ,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC1C,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1G,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAClF,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACtF,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC1C,YAAY,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzF,YAAY,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACrF,YAAY,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACzF,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAClL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1tE;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,UAAU;AACxC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AC1uB3kD,MAAM,mBAAmB,SAAS,WAAW,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE;AACtC,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;AACrD,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACld;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,cAAc;AAC5C,oBAAoB,QAAQ,EAAE,YAAY;AAC1C,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AClB3Q,MAAM,SAAS,GAAG,CAAC,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC;AAC7F,MAAM,gBAAgB,CAAC;AAC9B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAC9T,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACpI;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3C,oBAAoB,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3C,oBAAoB,SAAS,EAAE,EAAE;AACjC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AClBb;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;AAC3D,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AAC9B,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE;AAC7C,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AACnC,IAAI;AACJ,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE;AACxF,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;AACrD,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;AAC7B,QAAQ,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAI;AACJ;;ACjCA;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-cdk-drag-drop.mjs","sources":["../tmp-esm2022/drag-drop/lib/drag-handle.directive.js","../tmp-esm2022/drag-drop/lib/drop-list.directive.js","../tmp-esm2022/drag-drop/lib/drag.directive.js","../tmp-esm2022/drag-drop/lib/drop-zone.directive.js","../tmp-esm2022/drag-drop/lib/drag-drop.module.js","../tmp-esm2022/drag-drop/lib/drag-drop.utils.js","../tmp-esm2022/drag-drop/acorex-cdk-drag-drop.js"],"sourcesContent":["import { Directive, ElementRef, inject, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXDragHandleDirective {\n constructor() {\n this.el = inject(ElementRef);\n this.element = signal(this.el.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.15\", type: AXDragHandleDirective, isStandalone: true, selector: \"[axDragHandle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDragHandle]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1oYW5kbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSVUsT0FBRSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDaEQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsbURBQUMsQ0FBQztLQUNsRDsrR0FIWSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJhZ0hhbmRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyYWdIYW5kbGVEaXJlY3RpdmUge1xuICBwcml2YXRlIGVsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcmVhZG9ubHkgZWxlbWVudCA9IHNpZ25hbCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xufVxuIl19","import { NXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, contentChildren, Directive, ElementRef, inject, input, NgZone, output, PLATFORM_ID, Renderer2, signal, } from '@angular/core';\nimport { AXDragDirective } from './drag.directive';\nimport * as i0 from \"@angular/core\";\n/**\n * @Directive axDropList\n *\n * Manages a list of draggable items (`axDrag`), enabling sorting within the list\n * and transferring items between compatible lists. It handles the visual shifting\n * of items during a drag operation to provide a clear preview of the drop location.\n *\n * This directive automatically detects `gap` from flexbox/grid layouts and handles\n * items with variable sizes and margins.\n */\nexport class AXDropListDirective extends NXComponent {\n constructor() {\n super(...arguments);\n this._zone = inject(NgZone);\n this._renderer = inject(Renderer2);\n this._cdr = inject(ChangeDetectorRef);\n this._platformId = inject(PLATFORM_ID);\n this._hostEl = inject(ElementRef);\n // --- Public API: Inputs and Outputs ---\n /** Boolean input matching the directive selector name for conditional application. */\n this.axDropList = input(true, ...(ngDevMode ? [{ debugName: \"axDropList\", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));\n /** Whether sorting within this list is disabled. */\n this.sortingDisabled = input(false, ...(ngDevMode ? [{ debugName: \"sortingDisabled\" }] : []));\n /** The group this drop list belongs to. Dragging is only allowed between lists of the same group. */\n this.dropListGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropListGroup\" }] : []));\n /** The layout orientation of the list. */\n this.dropListOrientation = input('vertical', ...(ngDevMode ? [{ debugName: \"dropListOrientation\" }] : []));\n /** Emits when an item is dropped into the list. */\n this.dropListDropped = output();\n /** The `axDrag` directives that are direct children of this list. */\n this._draggableItems = contentChildren(AXDragDirective, ...(ngDevMode ? [{ debugName: \"_draggableItems\", descendants: false }] : [{ descendants: false }]));\n // --- Internal State Management ---\n /** The native element of the drop list. */\n this.element = this._hostEl.nativeElement;\n /** The draggable item currently being moved over this list. */\n this._activeDragItem = signal(null, ...(ngDevMode ? [{ debugName: \"_activeDragItem\" }] : []));\n /** The calculated index where the placeholder/item should be. */\n this._placeholderIndex = signal(-1, ...(ngDevMode ? [{ debugName: \"_placeholderIndex\" }] : []));\n /** A snapshot of the items' data and geometry at the start of the drag. */\n this._cachedItems = signal([], ...(ngDevMode ? [{ debugName: \"_cachedItems\" }] : []));\n /** The list's initial bounding box, used to calculate scroll delta. */\n this._listInitialRect = signal(null, ...(ngDevMode ? [{ debugName: \"_listInitialRect\" }] : []));\n /** The detected `gap` of the list for the current orientation. */\n this._listGap = signal(0, ...(ngDevMode ? [{ debugName: \"_listGap\" }] : []));\n /** A signal-based alias for the orientation input for internal use. */\n this._orientation = this.dropListOrientation;\n /** DOM placeholder element for inter-list drags */\n this._placeholderElement = null;\n }\n ngOnInit() {\n if (isPlatformBrowser(this._platformId)) {\n this.element.dataset['axDropList'] = 'true';\n this.element.classList.add('ax-drop-list-sorting-transition');\n // Store reference to this directive instance on the element for drag directive access\n this.element['__axContext__'] = this;\n }\n }\n ngAfterContentInit() {\n this._cdr.detectChanges();\n }\n ngOnDestroy() {\n // Clean up placeholder element if directive destroyed during drag\n this._removePlaceholderElement();\n }\n // --- Public Methods (for internal library use) ---\n /** Checks if the given drag item is the one currently active in this list. */\n isDragActiveForThisList(dragItem) {\n return this._activeDragItem() === dragItem;\n }\n /**\n * Prepares the list for sorting when a drag operation starts from within this list.\n * @param dragItem The item that is being dragged.\n */\n prepareSort(dragItem) {\n if (!this.axDropList() || this.sortingDisabled() || this._activeDragItem() || dragItem.dragDisabled())\n return;\n this._activeDragItem.set(dragItem);\n this.element.classList.add('ax-drop-list-sorting-active');\n requestAnimationFrame(() => {\n this._zone.run(() => {\n this._cacheGeometry();\n const placeholderIdx = this._cachedItems().findIndex((data) => data.item === dragItem);\n this._placeholderIndex.set(placeholderIdx);\n });\n });\n }\n /**\n * Prepares the list for receiving an item that started dragging from another list.\n * @param dragItem The item entering this list.\n */\n enter(dragItem) {\n if (!this.axDropList() || this.sortingDisabled() || this.isDragActiveForThisList(dragItem))\n return;\n // Clean up any existing placeholder from previous list\n this._removePlaceholderElement();\n this._activeDragItem.set(dragItem);\n this.element.classList.add('ax-drop-list-sorting-active');\n requestAnimationFrame(() => this._zone.run(() => this._cacheGeometry()));\n }\n /**\n * Calculates the new placeholder index based on the pointer's position and applies visual shifts.\n * @param event The pointer move event.\n * @param dragItem The item being dragged.\n */\n sort(event, dragItem) {\n if (!this.axDropList() ||\n !this.isDragActiveForThisList(dragItem) ||\n this.sortingDisabled() ||\n !this._listInitialRect())\n return;\n const pointerPosition = this._orientation() === 'vertical' ? event.clientY : event.clientX;\n const newPlaceholderIndex = this._calculatePlaceholderIndex(pointerPosition);\n if (this._placeholderIndex() !== newPlaceholderIndex) {\n this._placeholderIndex.set(newPlaceholderIndex);\n this._applyVisualShifts();\n }\n }\n /**\n * Finalizes the drop, emits the drop event, and resets the list's state.\n * @param event The pointer up event.\n * @param droppedItem The item that was dropped.\n * @param sourceList The list where the drag originated.\n */\n finalizeSort(event, droppedItem, sourceList) {\n if (!this.axDropList() || !this.isDragActiveForThisList(droppedItem) || this.sortingDisabled()) {\n this.resetSortStateAndStyles(sourceList);\n return;\n }\n const activeItem = this._activeDragItem();\n const targetSlotIndex = this._placeholderIndex();\n if (!activeItem || targetSlotIndex === -1) {\n this.resetSortStateAndStyles(sourceList);\n return;\n }\n const previousIndex = sourceList._cachedItems().findIndex((d) => d.item === activeItem);\n // Adjust the index for array mutation if moving an item to a later position in the same list.\n const currentIndex = sourceList === this && previousIndex !== -1 && targetSlotIndex > previousIndex\n ? targetSlotIndex - 1\n : targetSlotIndex;\n this.dropListDropped.emit({\n nativeEvent: event,\n sender: this,\n item: activeItem,\n previousIndex,\n currentIndex,\n container: this,\n previousContainer: sourceList,\n });\n this.resetSortStateAndStyles(sourceList);\n }\n /** Resets the transforms on all items and cancels the current sort operation. */\n cancelSort(dragItem) {\n if (dragItem && !this.isDragActiveForThisList(dragItem))\n return;\n this._resetAllTransforms();\n this.resetSortState();\n }\n /** Resets transforms but keeps the active state, used when moving between lists. */\n cancelSortPreview() {\n if (!this._activeDragItem())\n return;\n this._resetAllTransforms();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === this._activeDragItem());\n this._placeholderIndex.set(originalIndex > -1 ? originalIndex : -1);\n }\n // --- Private Helper Methods ---\n /** Caches the geometry of the list and its items at the start of a drag. */\n _cacheGeometry() {\n this._listInitialRect.set(this.element.getBoundingClientRect());\n this._detectAndCacheListGap();\n const items = this._draggableItems().map((itemDraggable) => {\n const el = itemDraggable.element();\n const style = window.getComputedStyle(el);\n const rect = el.getBoundingClientRect();\n return {\n item: itemDraggable,\n element: el,\n initialRect: rect,\n width: rect.width,\n height: rect.height,\n margins: {\n top: parseFloat(style.marginTop),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft),\n right: parseFloat(style.marginRight),\n },\n };\n });\n this._cachedItems.set(items);\n }\n /** Detects and caches the `gap` property from the list's computed styles. */\n _detectAndCacheListGap() {\n const listStyle = window.getComputedStyle(this.element);\n const gapValue = listStyle.getPropertyValue('gap');\n if (gapValue && gapValue !== 'normal') {\n const gapParts = gapValue.split(' ');\n const rowGap = parseFloat(gapParts[0]);\n const columnGap = parseFloat(gapParts[1] || gapParts[0]);\n this._listGap.set(this._orientation() === 'vertical' ? rowGap : columnGap);\n }\n else {\n this._listGap.set(0);\n }\n }\n /**\n * Determines the new placeholder index by comparing the pointer position against the\n * midpoints of the other items in the list.\n * @param pointerPosition The clientX or clientY of the pointer.\n * @returns The calculated placeholder index.\n */\n _calculatePlaceholderIndex(pointerPosition) {\n const activeItem = this._activeDragItem();\n const listRect = this._listInitialRect();\n if (!activeItem || !listRect)\n return -1;\n const cachedItems = this._cachedItems();\n const originalIndex = cachedItems.findIndex((d) => d.item === activeItem);\n const siblings = cachedItems.filter((d) => d.item !== activeItem);\n const scrollDelta = this._orientation() === 'vertical'\n ? this.element.getBoundingClientRect().top - listRect.top\n : this.element.getBoundingClientRect().left - listRect.left;\n let newIndexInSiblings = -1;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n const itemMidPoint = (this._orientation() === 'vertical' ? sibling.initialRect.top : sibling.initialRect.left) +\n scrollDelta +\n (this._orientation() === 'vertical' ? sibling.height : sibling.width) / 2;\n if (pointerPosition < itemMidPoint) {\n newIndexInSiblings = i;\n break;\n }\n }\n if (newIndexInSiblings === -1) {\n newIndexInSiblings = siblings.length;\n }\n // Map the index from the 'siblings' array back to the original `_cachedItems` array.\n const potentialPlaceholderIndex = originalIndex > -1 && newIndexInSiblings >= originalIndex ? newIndexInSiblings + 1 : newIndexInSiblings;\n // A drag starting from outside the list doesn't have an original index.\n if (originalIndex === -1) {\n return potentialPlaceholderIndex;\n }\n // --- New logic: Prevent crossing disabled items ---\n const start = Math.min(originalIndex, potentialPlaceholderIndex);\n const end = Math.max(originalIndex, potentialPlaceholderIndex);\n for (let i = start; i < end; i++) {\n const itemData = cachedItems[i];\n if (itemData.item !== activeItem && itemData.item.dragDisabled()) {\n // We've hit a disabled \"wall\". Stop the placeholder at the boundary.\n if (potentialPlaceholderIndex > originalIndex) {\n return i; // Dragging down/right: stop *before* the wall.\n }\n else {\n return i + 1; // Dragging up/left: stop *after* the wall.\n }\n }\n }\n return potentialPlaceholderIndex;\n }\n /** Applies visual shifts - uses placeholder for inter-list, transforms for intra-list. */\n _applyVisualShifts() {\n const activeItem = this._activeDragItem();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n const isIntraListDrag = originalIndex > -1;\n const placeholderIndex = this._placeholderIndex();\n // Check if this is an \"onto-node\" drop list (no items, just a drop target)\n const isOntoNodeList = this.element.dataset['dropType'] === 'onto-node';\n if (!isIntraListDrag && activeItem && !isOntoNodeList && this._cachedItems().length > 0) {\n // --- INTER-LIST DRAG: Use DOM placeholder for reorder lists with items ---\n this._updatePlaceholderElement(activeItem, placeholderIndex);\n }\n else {\n // --- INTRA-LIST DRAG: Use transforms (works well for same-list reordering) ---\n this._removePlaceholderElement();\n const getItemSpace = (itemData) => this._orientation() === 'vertical'\n ? itemData.height + itemData.margins.top + itemData.margins.bottom\n : itemData.width + itemData.margins.left + itemData.margins.right;\n const draggedItemSize = isIntraListDrag ? getItemSpace(this._cachedItems()[originalIndex]) : 0;\n this._cachedItems().forEach((data, index) => {\n if (data.item.dragDisabled()) {\n this._renderer.removeStyle(data.element, 'transform');\n return;\n }\n const transform = this._calculateTransform(index, originalIndex, draggedItemSize, getItemSpace);\n this._renderer.setStyle(data.element, 'transform', transform ? `${this._orientation() === 'vertical' ? 'translateY' : 'translateX'}(${transform}px)` : '');\n });\n }\n }\n /** Creates or moves the placeholder element for inter-list drags */\n _updatePlaceholderElement(activeItem, targetIndex) {\n const rect = activeItem.elementRect();\n if (!rect)\n return;\n // Create placeholder as a clone of the dragged element\n if (!this._placeholderElement) {\n // Clone the entire dragged element\n const sourceElement = activeItem.element();\n this._placeholderElement = sourceElement.cloneNode(true);\n // Mark it as a placeholder\n this._renderer.addClass(this._placeholderElement, 'ax-drop-placeholder');\n this._renderer.addClass(this._placeholderElement, 'ax-drag-placeholder');\n // Prevent interaction with cloned content\n this._renderer.setStyle(this._placeholderElement, 'pointerEvents', 'none');\n // Add faded styling to indicate it's a placeholder\n this._renderer.setStyle(this._placeholderElement, 'opacity', '0.4');\n this._renderer.setStyle(this._placeholderElement, 'transition', 'all 200ms ease');\n }\n // Insert/move placeholder at target index\n const items = this._cachedItems();\n if (targetIndex >= 0 && targetIndex < items.length) {\n const targetItem = items[targetIndex];\n if (targetItem && targetItem.element) {\n this._renderer.insertBefore(this.element, this._placeholderElement, targetItem.element);\n }\n else {\n // Fallback: append at end if target item invalid\n this._renderer.appendChild(this.element, this._placeholderElement);\n }\n }\n else {\n // Insert at end\n this._renderer.appendChild(this.element, this._placeholderElement);\n }\n }\n /** Removes the placeholder element if it exists */\n _removePlaceholderElement() {\n if (this._placeholderElement) {\n this._renderer.removeChild(this.element, this._placeholderElement);\n this._placeholderElement = null;\n }\n }\n /**\n * Calculates the required transform in pixels for a single item.\n * @param index The index of the item to transform.\n * @param originalIndex The original index of the dragged item (-1 if from another list).\n * @param draggedItemSize The size (including margins) of the item being dragged.\n * @param getItemSpace A helper function to get an item's size including margins.\n * @returns The transform value in pixels.\n */\n _calculateTransform(index, originalIndex, draggedItemSize, getItemSpace) {\n const targetIndex = this._placeholderIndex();\n const listGap = this._listGap();\n if (originalIndex > -1) {\n // --- Intra-list Drag ---\n if (index === originalIndex) {\n // The dragged item moves by the sum of the sizes of the items it passes over, PLUS the gaps between them.\n let offset = 0;\n if (targetIndex > originalIndex) {\n // Dragging down/right\n for (let i = originalIndex + 1; i < targetIndex; i++) {\n offset += getItemSpace(this._cachedItems()[i]) + listGap;\n }\n }\n else {\n // Dragging up/left\n for (let i = targetIndex; i < originalIndex; i++) {\n offset -= getItemSpace(this._cachedItems()[i]) + listGap;\n }\n }\n return offset;\n }\n else {\n // It's a sibling item that needs to make space.\n // It moves by the size of the dragged item, plus ONE gap to fill the void.\n const shift = draggedItemSize + listGap;\n if (originalIndex < targetIndex && index > originalIndex && index < targetIndex) {\n return -shift;\n }\n else if (originalIndex > targetIndex && index >= targetIndex && index < originalIndex) {\n return shift;\n }\n }\n }\n else {\n // --- Inter-list Drag (from another list) ---\n if (index >= targetIndex) {\n // An item from another list enters. Siblings shift by its size plus ONE gap.\n return draggedItemSize + listGap;\n }\n }\n return 0;\n }\n /** Resets the state of this list and the source list after a drop. */\n resetSortStateAndStyles(sourceList) {\n const listsToReset = new Set([this, sourceList]);\n listsToReset.forEach((list) => {\n if (list) {\n list._resetAllTransforms();\n list.resetSortState();\n }\n });\n }\n /** Removes all `transform` styles from the items in this list. */\n _resetAllTransforms() {\n this._cachedItems().forEach((data) => this._renderer.setStyle(data.element, 'transform', ''));\n this._removePlaceholderElement(); // Clean up inter-list placeholder\n }\n /** Resets the internal state of the directive to its initial values. */\n resetSortState() {\n this.element.classList.remove('ax-drop-list-sorting-active');\n this._activeDragItem.set(null);\n this._cachedItems.set([]);\n this._placeholderIndex.set(-1);\n this._listInitialRect.set(null);\n this._listGap.set(0);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.15\", type: AXDropListDirective, isStandalone: true, selector: \"[axDropList]\", inputs: { axDropList: { classPropertyName: \"axDropList\", publicName: \"axDropList\", isSignal: true, isRequired: false, transformFunction: null }, sortingDisabled: { classPropertyName: \"sortingDisabled\", publicName: \"sortingDisabled\", isSignal: true, isRequired: false, transformFunction: null }, dropListGroup: { classPropertyName: \"dropListGroup\", publicName: \"dropListGroup\", isSignal: true, isRequired: false, transformFunction: null }, dropListOrientation: { classPropertyName: \"dropListOrientation\", publicName: \"dropListOrientation\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropListDropped: \"dropListDropped\" }, queries: [{ propertyName: \"_draggableItems\", predicate: AXDragDirective, isSignal: true }], exportAs: [\"axDropList\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropList]',\n exportAs: 'axDropList',\n }]\n }], propDecorators: { axDropList: [{ type: i0.Input, args: [{ isSignal: true, alias: \"axDropList\", required: false }] }], sortingDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: \"sortingDisabled\", required: false }] }], dropListGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropListGroup\", required: false }] }], dropListOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropListOrientation\", required: false }] }], dropListDropped: [{ type: i0.Output, args: [\"dropListDropped\"] }], _draggableItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXDragDirective), { ...{ descendants: false }, isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1saXN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLWxpc3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQXFCbkQ7Ozs7Ozs7OztHQVNHO0FBS0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS21CLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixTQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFdkUseUNBQXlDO1FBRXpDLHNGQUFzRjtRQUN0RixlQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksOENBQUksU0FBUyxFQUFFLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxPQUF4RSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLEtBQUss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SSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztJQUN0RSxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDOytHQXBjVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixvdkJBcUJhLGVBQWU7OzRGQXJCL0MsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsWUFBWTtpQkFDdkI7NGxCQXNCNEMsZUFBZSxRQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnLmRpcmVjdGl2ZSc7XG5cbi8qKiBEZXNjcmliZXMgdGhlIGNhY2hlZCBnZW9tZXRyaWMgZGF0YSBvZiBhIGRyYWdnYWJsZSBpdGVtIHdpdGhpbiB0aGUgbGlzdC4gKi9cbmludGVyZmFjZSBEcm9wTGlzdEl0ZW1EYXRhIHtcbiAgaXRlbTogQVhEcmFnRGlyZWN0aXZlO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgaW5pdGlhbFJlY3Q6IERPTVJlY3Q7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtYXJnaW5zOiB7IHRvcDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyByaWdodDogbnVtYmVyIH07XG59XG5cbi8qKiBFdmVudCBvYmplY3QgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbnRvIGEgZHJvcCBsaXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWERyb3BMaXN0RHJvcHBlZEV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWERyb3BMaXN0RGlyZWN0aXZlLCBNb3VzZUV2ZW50PiB7XG4gIGl0ZW06IEFYRHJhZ0RpcmVjdGl2ZTtcbiAgY3VycmVudEluZGV4OiBudW1iZXI7XG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgY29udGFpbmVyOiBBWERyb3BMaXN0RGlyZWN0aXZlO1xuICBwcmV2aW91c0NvbnRhaW5lcjogQVhEcm9wTGlzdERpcmVjdGl2ZTtcbn1cblxuLyoqXG4gKiBARGlyZWN0aXZlIGF4RHJvcExpc3RcbiAqXG4gKiBNYW5hZ2VzIGEgbGlzdCBvZiBkcmFnZ2FibGUgaXRlbXMgKGBheERyYWdgKSwgZW5hYmxpbmcgc29ydGluZyB3aXRoaW4gdGhlIGxpc3RcbiAqIGFuZCB0cmFuc2ZlcnJpbmcgaXRlbXMgYmV0d2VlbiBjb21wYXRpYmxlIGxpc3RzLiBJdCBoYW5kbGVzIHRoZSB2aXN1YWwgc2hpZnRpbmdcbiAqIG9mIGl0ZW1zIGR1cmluZyBhIGRyYWcgb3BlcmF0aW9uIHRvIHByb3ZpZGUgYSBjbGVhciBwcmV2aWV3IG9mIHRoZSBkcm9wIGxvY2F0aW9uLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBgZ2FwYCBmcm9tIGZsZXhib3gvZ3JpZCBsYXlvdXRzIGFuZCBoYW5kbGVzXG4gKiBpdGVtcyB3aXRoIHZhcmlhYmxlIHNpemVzIGFuZCBtYXJnaW5zLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcm9wTGlzdF0nLFxuICBleHBvcnRBczogJ2F4RHJvcExpc3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyb3BMaXN0RGlyZWN0aXZlIGV4dGVuZHMgTlhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RFbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLy8gLS0tIFB1YmxpYyBBUEk6IElucHV0cyBhbmQgT3V0cHV0cyAtLS1cblxuICAvKiogQm9vbGVhbiBpbnB1dCBtYXRjaGluZyB0aGUgZGlyZWN0aXZlIHNlbGVjdG9yIG5hbWUgZm9yIGNvbmRpdGlvbmFsIGFwcGxpY2F0aW9uLiAqL1xuICBheERyb3BMaXN0ID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIH0pO1xuICAvKiogV2hldGhlciBzb3J0aW5nIHdpdGhpbiB0aGlzIGxpc3QgaXMgZGlzYWJsZWQuICovXG4gIHNvcnRpbmdEaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgLyoqIFRoZSBncm91cCB0aGlzIGRyb3AgbGlzdCBiZWxvbmdzIHRvLiBEcmFnZ2luZyBpcyBvbmx5IGFsbG93ZWQgYmV0d2VlbiBsaXN0cyBvZiB0aGUgc2FtZSBncm91cC4gKi9cbiAgZHJvcExpc3RHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcbiAgLyoqIFRoZSBsYXlvdXQgb3JpZW50YXRpb24gb2YgdGhlIGxpc3QuICovXG4gIGRyb3BMaXN0T3JpZW50YXRpb24gPSBpbnB1dDwnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnPigndmVydGljYWwnKTtcbiAgLyoqIEVtaXRzIHdoZW4gYW4gaXRlbSBpcyBkcm9wcGVkIGludG8gdGhlIGxpc3QuICovXG4gIGRyb3BMaXN0RHJvcHBlZCA9IG91dHB1dDxBWERyb3BMaXN0RHJvcHBlZEV2ZW50PigpO1xuXG4gIC8qKiBUaGUgYGF4RHJhZ2AgZGlyZWN0aXZlcyB0aGF0IGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhpcyBsaXN0LiAqL1xuICByZWFkb25seSBfZHJhZ2dhYmxlSXRlbXMgPSBjb250ZW50Q2hpbGRyZW4oQVhEcmFnRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KTtcblxuICAvLyAtLS0gSW50ZXJuYWwgU3RhdGUgTWFuYWdlbWVudCAtLS1cblxuICAvKiogVGhlIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBkcm9wIGxpc3QuICovXG4gIHJlYWRvbmx5IGVsZW1lbnQgPSB0aGlzLl9ob3N0RWwubmF0aXZlRWxlbWVudDtcblxuICAvKiogVGhlIGRyYWdnYWJsZSBpdGVtIGN1cnJlbnRseSBiZWluZyBtb3ZlZCBvdmVyIHRoaXMgbGlzdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlRHJhZ0l0ZW0gPSBzaWduYWw8QVhEcmFnRGlyZWN0aXZlIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbmRleCB3aGVyZSB0aGUgcGxhY2Vob2xkZXIvaXRlbSBzaG91bGQgYmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYWNlaG9sZGVySW5kZXggPSBzaWduYWwoLTEpO1xuICAvKiogQSBzbmFwc2hvdCBvZiB0aGUgaXRlbXMnIGRhdGEgYW5kIGdlb21ldHJ5IGF0IHRoZSBzdGFydCBvZiB0aGUgZHJhZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVkSXRlbXMgPSBzaWduYWw8cmVhZG9ubHkgRHJvcExpc3RJdGVtRGF0YVtdPihbXSk7XG4gIC8qKiBUaGUgbGlzdCdzIGluaXRpYWwgYm91bmRpbmcgYm94LCB1c2VkIHRvIGNhbGN1bGF0ZSBzY3JvbGwgZGVsdGEuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RJbml0aWFsUmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgZGV0ZWN0ZWQgYGdhcGAgb2YgdGhlIGxpc3QgZm9yIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0R2FwID0gc2lnbmFsKDApO1xuXG4gIC8qKiBBIHNpZ25hbC1iYXNlZCBhbGlhcyBmb3IgdGhlIG9yaWVudGF0aW9uIGlucHV0IGZvciBpbnRlcm5hbCB1c2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX29yaWVudGF0aW9uID0gdGhpcy5kcm9wTGlzdE9yaWVudGF0aW9uO1xuXG4gIC8qKiBET00gcGxhY2Vob2xkZXIgZWxlbWVudCBmb3IgaW50ZXItbGlzdCBkcmFncyAqL1xuICBwcml2YXRlIF9wbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuZGF0YXNldFsnYXhEcm9wTGlzdCddID0gJ3RydWUnO1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWRyb3AtbGlzdC1zb3J0aW5nLXRyYW5zaXRpb24nKTtcbiAgICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byB0aGlzIGRpcmVjdGl2ZSBpbnN0YW5jZSBvbiB0aGUgZWxlbWVudCBmb3IgZHJhZyBkaXJlY3RpdmUgYWNjZXNzXG4gICAgICAodGhpcy5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2F4Q29udGV4dF9fPzogQVhEcm9wTGlzdERpcmVjdGl2ZSB9KVsnX19heENvbnRleHRfXyddID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIHBsYWNlaG9sZGVyIGVsZW1lbnQgaWYgZGlyZWN0aXZlIGRlc3Ryb3llZCBkdXJpbmcgZHJhZ1xuICAgIHRoaXMuX3JlbW92ZVBsYWNlaG9sZGVyRWxlbWVudCgpO1xuICB9XG5cbiAgLy8gLS0tIFB1YmxpYyBNZXRob2RzIChmb3IgaW50ZXJuYWwgbGlicmFyeSB1c2UpIC0tLVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIGRyYWcgaXRlbSBpcyB0aGUgb25lIGN1cnJlbnRseSBhY3RpdmUgaW4gdGhpcyBsaXN0LiAqL1xuICBpc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJdGVtKCkgPT09IGRyYWdJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciBzb3J0aW5nIHdoZW4gYSBkcmFnIG9wZXJhdGlvbiBzdGFydHMgZnJvbSB3aXRoaW4gdGhpcyBsaXN0LlxuICAgKiBAcGFyYW0gZHJhZ0l0ZW0gVGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBkcmFnZ2VkLlxuICAgKi9cbiAgcHJlcGFyZVNvcnQoZHJhZ0l0ZW06IEFYRHJhZ0RpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5heERyb3BMaXN0KCkgfHwgdGhpcy5zb3J0aW5nRGlzYWJsZWQoKSB8fCB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpIHx8IGRyYWdJdGVtLmRyYWdEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlR2VvbWV0cnkoKTtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZHggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZGF0YSkgPT4gZGF0YS5pdGVtID09PSBkcmFnSXRlbSk7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KHBsYWNlaG9sZGVySWR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciByZWNlaXZpbmcgYW4gaXRlbSB0aGF0IHN0YXJ0ZWQgZHJhZ2dpbmcgZnJvbSBhbm90aGVyIGxpc3QuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBlbnRlcmluZyB0aGlzIGxpc3QuXG4gICAqL1xuICBlbnRlcihkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF4RHJvcExpc3QoKSB8fCB0aGlzLnNvcnRpbmdEaXNhYmxlZCgpIHx8IHRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG5cbiAgICAvLyBDbGVhbiB1cCBhbnkgZXhpc3RpbmcgcGxhY2Vob2xkZXIgZnJvbSBwcmV2aW91cyBsaXN0XG4gICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5fY2FjaGVHZW9tZXRyeSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbmV3IHBsYWNlaG9sZGVyIGluZGV4IGJhc2VkIG9uIHRoZSBwb2ludGVyJ3MgcG9zaXRpb24gYW5kIGFwcGxpZXMgdmlzdWFsIHNoaWZ0cy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBwb2ludGVyIG1vdmUgZXZlbnQuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxuICAgKi9cbiAgc29ydChldmVudDogUG9pbnRlckV2ZW50LCBkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuYXhEcm9wTGlzdCgpIHx8XG4gICAgICAhdGhpcy5pc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbSkgfHxcbiAgICAgIHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHxcbiAgICAgICF0aGlzLl9saXN0SW5pdGlhbFJlY3QoKVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHBvaW50ZXJQb3NpdGlvbiA9IHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBldmVudC5jbGllbnRZIDogZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBuZXdQbGFjZWhvbGRlckluZGV4ID0gdGhpcy5fY2FsY3VsYXRlUGxhY2Vob2xkZXJJbmRleChwb2ludGVyUG9zaXRpb24pO1xuXG4gICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVySW5kZXgoKSAhPT0gbmV3UGxhY2Vob2xkZXJJbmRleCkge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQobmV3UGxhY2Vob2xkZXJJbmRleCk7XG4gICAgICB0aGlzLl9hcHBseVZpc3VhbFNoaWZ0cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5hbGl6ZXMgdGhlIGRyb3AsIGVtaXRzIHRoZSBkcm9wIGV2ZW50LCBhbmQgcmVzZXRzIHRoZSBsaXN0J3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgcG9pbnRlciB1cCBldmVudC5cbiAgICogQHBhcmFtIGRyb3BwZWRJdGVtIFRoZSBpdGVtIHRoYXQgd2FzIGRyb3BwZWQuXG4gICAqIEBwYXJhbSBzb3VyY2VMaXN0IFRoZSBsaXN0IHdoZXJlIHRoZSBkcmFnIG9yaWdpbmF0ZWQuXG4gICAqL1xuICBmaW5hbGl6ZVNvcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJvcHBlZEl0ZW06IEFYRHJhZ0RpcmVjdGl2ZSwgc291cmNlTGlzdDogQVhEcm9wTGlzdERpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5heERyb3BMaXN0KCkgfHwgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJvcHBlZEl0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVzZXRTb3J0U3RhdGVBbmRTdHlsZXMoc291cmNlTGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGlmICghYWN0aXZlSXRlbSB8fCB0YXJnZXRTbG90SW5kZXggPT09IC0xKSB7XG4gICAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBzb3VyY2VMaXN0Ll9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBBZGp1c3QgdGhlIGluZGV4IGZvciBhcnJheSBtdXRhdGlvbiBpZiBtb3ZpbmcgYW4gaXRlbSB0byBhIGxhdGVyIHBvc2l0aW9uIGluIHRoZSBzYW1lIGxpc3QuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID1cbiAgICAgIHNvdXJjZUxpc3QgPT09IHRoaXMgJiYgcHJldmlvdXNJbmRleCAhPT0gLTEgJiYgdGFyZ2V0U2xvdEluZGV4ID4gcHJldmlvdXNJbmRleFxuICAgICAgICA/IHRhcmdldFNsb3RJbmRleCAtIDFcbiAgICAgICAgOiB0YXJnZXRTbG90SW5kZXg7XG5cbiAgICB0aGlzLmRyb3BMaXN0RHJvcHBlZC5lbWl0KHtcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIGl0ZW06IGFjdGl2ZUl0ZW0sXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY29udGFpbmVyOiB0aGlzLFxuICAgICAgcHJldmlvdXNDb250YWluZXI6IHNvdXJjZUxpc3QsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgdHJhbnNmb3JtcyBvbiBhbGwgaXRlbXMgYW5kIGNhbmNlbHMgdGhlIGN1cnJlbnQgc29ydCBvcGVyYXRpb24uICovXG4gIGNhbmNlbFNvcnQoZHJhZ0l0ZW0/OiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoZHJhZ0l0ZW0gJiYgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG4gICAgdGhpcy5fcmVzZXRBbGxUcmFuc2Zvcm1zKCk7XG4gICAgdGhpcy5yZXNldFNvcnRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0cmFuc2Zvcm1zIGJ1dCBrZWVwcyB0aGUgYWN0aXZlIHN0YXRlLCB1c2VkIHdoZW4gbW92aW5nIGJldHdlZW4gbGlzdHMuICovXG4gIGNhbmNlbFNvcnRQcmV2aWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKSkgcmV0dXJuO1xuICAgIHRoaXMuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKTtcbiAgICB0aGlzLl9wbGFjZWhvbGRlckluZGV4LnNldChvcmlnaW5hbEluZGV4ID4gLTEgPyBvcmlnaW5hbEluZGV4IDogLTEpO1xuICB9XG5cbiAgLy8gLS0tIFByaXZhdGUgSGVscGVyIE1ldGhvZHMgLS0tXG5cbiAgLyoqIENhY2hlcyB0aGUgZ2VvbWV0cnkgb2YgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBkcmFnLiAqL1xuICBwcml2YXRlIF9jYWNoZUdlb21ldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQodGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLl9kZXRlY3RBbmRDYWNoZUxpc3RHYXAoKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZHJhZ2dhYmxlSXRlbXMoKS5tYXAoKGl0ZW1EcmFnZ2FibGUpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbURyYWdnYWJsZS5lbGVtZW50KCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW06IGl0ZW1EcmFnZ2FibGUsXG4gICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICBpbml0aWFsUmVjdDogcmVjdCxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIG1hcmdpbnM6IHtcbiAgICAgICAgICB0b3A6IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wKSxcbiAgICAgICAgICBib3R0b206IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKSxcbiAgICAgICAgICBsZWZ0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpLFxuICAgICAgICAgIHJpZ2h0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblJpZ2h0KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMuc2V0KGl0ZW1zKTtcbiAgfVxuXG4gIC8qKiBEZXRlY3RzIGFuZCBjYWNoZXMgdGhlIGBnYXBgIHByb3BlcnR5IGZyb20gdGhlIGxpc3QncyBjb21wdXRlZCBzdHlsZXMuICovXG4gIHByaXZhdGUgX2RldGVjdEFuZENhY2hlTGlzdEdhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpO1xuICAgIGNvbnN0IGdhcFZhbHVlID0gbGlzdFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2dhcCcpO1xuICAgIGlmIChnYXBWYWx1ZSAmJiBnYXBWYWx1ZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgIGNvbnN0IGdhcFBhcnRzID0gZ2FwVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IHJvd0dhcCA9IHBhcnNlRmxvYXQoZ2FwUGFydHNbMF0pO1xuICAgICAgY29uc3QgY29sdW1uR2FwID0gcGFyc2VGbG9hdChnYXBQYXJ0c1sxXSB8fCBnYXBQYXJ0c1swXSk7XG4gICAgICB0aGlzLl9saXN0R2FwLnNldCh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gcm93R2FwIDogY29sdW1uR2FwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5ldyBwbGFjZWhvbGRlciBpbmRleCBieSBjb21wYXJpbmcgdGhlIHBvaW50ZXIgcG9zaXRpb24gYWdhaW5zdCB0aGVcbiAgICogbWlkcG9pbnRzIG9mIHRoZSBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHBvaW50ZXJQb3NpdGlvbiBUaGUgY2xpZW50WCBvciBjbGllbnRZIG9mIHRoZSBwb2ludGVyLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBwbGFjZWhvbGRlciBpbmRleC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpO1xuICAgIGNvbnN0IGxpc3RSZWN0ID0gdGhpcy5fbGlzdEluaXRpYWxSZWN0KCk7XG4gICAgaWYgKCFhY3RpdmVJdGVtIHx8ICFsaXN0UmVjdCkgcmV0dXJuIC0xO1xuXG4gICAgY29uc3QgY2FjaGVkSXRlbXMgPSB0aGlzLl9jYWNoZWRJdGVtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBjYWNoZWRJdGVtcy5maW5kSW5kZXgoKGQpID0+IGQuaXRlbSA9PT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3Qgc2libGluZ3MgPSBjYWNoZWRJdGVtcy5maWx0ZXIoKGQpID0+IGQuaXRlbSAhPT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3Qgc2Nyb2xsRGVsdGEgPVxuICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBsaXN0UmVjdC50b3BcbiAgICAgICAgOiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGxpc3RSZWN0LmxlZnQ7XG5cbiAgICBsZXQgbmV3SW5kZXhJblNpYmxpbmdzID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgICAgY29uc3QgaXRlbU1pZFBvaW50ID1cbiAgICAgICAgKHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBzaWJsaW5nLmluaXRpYWxSZWN0LnRvcCA6IHNpYmxpbmcuaW5pdGlhbFJlY3QubGVmdCkgK1xuICAgICAgICBzY3JvbGxEZWx0YSArXG4gICAgICAgICh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gc2libGluZy5oZWlnaHQgOiBzaWJsaW5nLndpZHRoKSAvIDI7XG5cbiAgICAgIGlmIChwb2ludGVyUG9zaXRpb24gPCBpdGVtTWlkUG9pbnQpIHtcbiAgICAgICAgbmV3SW5kZXhJblNpYmxpbmdzID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0luZGV4SW5TaWJsaW5ncyA9PT0gLTEpIHtcbiAgICAgIG5ld0luZGV4SW5TaWJsaW5ncyA9IHNpYmxpbmdzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBNYXAgdGhlIGluZGV4IGZyb20gdGhlICdzaWJsaW5ncycgYXJyYXkgYmFjayB0byB0aGUgb3JpZ2luYWwgYF9jYWNoZWRJdGVtc2AgYXJyYXkuXG4gICAgY29uc3QgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCA9XG4gICAgICBvcmlnaW5hbEluZGV4ID4gLTEgJiYgbmV3SW5kZXhJblNpYmxpbmdzID49IG9yaWdpbmFsSW5kZXggPyBuZXdJbmRleEluU2libGluZ3MgKyAxIDogbmV3SW5kZXhJblNpYmxpbmdzO1xuXG4gICAgLy8gQSBkcmFnIHN0YXJ0aW5nIGZyb20gb3V0c2lkZSB0aGUgbGlzdCBkb2Vzbid0IGhhdmUgYW4gb3JpZ2luYWwgaW5kZXguXG4gICAgaWYgKG9yaWdpbmFsSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleDtcbiAgICB9XG5cbiAgICAvLyAtLS0gTmV3IGxvZ2ljOiBQcmV2ZW50IGNyb3NzaW5nIGRpc2FibGVkIGl0ZW1zIC0tLVxuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4ob3JpZ2luYWxJbmRleCwgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCk7XG4gICAgY29uc3QgZW5kID0gTWF0aC5tYXgob3JpZ2luYWxJbmRleCwgcG90ZW50aWFsUGxhY2Vob2xkZXJJbmRleCk7XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSBjYWNoZWRJdGVtc1tpXTtcbiAgICAgIGlmIChpdGVtRGF0YS5pdGVtICE9PSBhY3RpdmVJdGVtICYmIGl0ZW1EYXRhLml0ZW0uZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgICAgLy8gV2UndmUgaGl0IGEgZGlzYWJsZWQgXCJ3YWxsXCIuIFN0b3AgdGhlIHBsYWNlaG9sZGVyIGF0IHRoZSBib3VuZGFyeS5cbiAgICAgICAgaWYgKHBvdGVudGlhbFBsYWNlaG9sZGVySW5kZXggPiBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGk7IC8vIERyYWdnaW5nIGRvd24vcmlnaHQ6IHN0b3AgKmJlZm9yZSogdGhlIHdhbGwuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGkgKyAxOyAvLyBEcmFnZ2luZyB1cC9sZWZ0OiBzdG9wICphZnRlciogdGhlIHdhbGwuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvdGVudGlhbFBsYWNlaG9sZGVySW5kZXg7XG4gIH1cblxuICAvKiogQXBwbGllcyB2aXN1YWwgc2hpZnRzIC0gdXNlcyBwbGFjZWhvbGRlciBmb3IgaW50ZXItbGlzdCwgdHJhbnNmb3JtcyBmb3IgaW50cmEtbGlzdC4gKi9cbiAgcHJpdmF0ZSBfYXBwbHlWaXN1YWxTaGlmdHMoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IHRoaXMuX2NhY2hlZEl0ZW1zKCkuZmluZEluZGV4KChkKSA9PiBkLml0ZW0gPT09IGFjdGl2ZUl0ZW0pO1xuICAgIGNvbnN0IGlzSW50cmFMaXN0RHJhZyA9IG9yaWdpbmFsSW5kZXggPiAtMTtcbiAgICBjb25zdCBwbGFjZWhvbGRlckluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBcIm9udG8tbm9kZVwiIGRyb3AgbGlzdCAobm8gaXRlbXMsIGp1c3QgYSBkcm9wIHRhcmdldClcbiAgICBjb25zdCBpc09udG9Ob2RlTGlzdCA9IHRoaXMuZWxlbWVudC5kYXRhc2V0Wydkcm9wVHlwZSddID09PSAnb250by1ub2RlJztcblxuICAgIGlmICghaXNJbnRyYUxpc3REcmFnICYmIGFjdGl2ZUl0ZW0gJiYgIWlzT250b05vZGVMaXN0ICYmIHRoaXMuX2NhY2hlZEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuICAgICAgLy8gLS0tIElOVEVSLUxJU1QgRFJBRzogVXNlIERPTSBwbGFjZWhvbGRlciBmb3IgcmVvcmRlciBsaXN0cyB3aXRoIGl0ZW1zIC0tLVxuICAgICAgdGhpcy5fdXBkYXRlUGxhY2Vob2xkZXJFbGVtZW50KGFjdGl2ZUl0ZW0sIHBsYWNlaG9sZGVySW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLS0gSU5UUkEtTElTVCBEUkFHOiBVc2UgdHJhbnNmb3JtcyAod29ya3Mgd2VsbCBmb3Igc2FtZS1saXN0IHJlb3JkZXJpbmcpIC0tLVxuICAgICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7XG5cbiAgICAgIGNvbnN0IGdldEl0ZW1TcGFjZSA9IChpdGVtRGF0YTogRHJvcExpc3RJdGVtRGF0YSkgPT5cbiAgICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICAgID8gaXRlbURhdGEuaGVpZ2h0ICsgaXRlbURhdGEubWFyZ2lucy50b3AgKyBpdGVtRGF0YS5tYXJnaW5zLmJvdHRvbVxuICAgICAgICAgIDogaXRlbURhdGEud2lkdGggKyBpdGVtRGF0YS5tYXJnaW5zLmxlZnQgKyBpdGVtRGF0YS5tYXJnaW5zLnJpZ2h0O1xuXG4gICAgICBjb25zdCBkcmFnZ2VkSXRlbVNpemUgPSBpc0ludHJhTGlzdERyYWcgPyBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtvcmlnaW5hbEluZGV4XSkgOiAwO1xuXG4gICAgICB0aGlzLl9jYWNoZWRJdGVtcygpLmZvckVhY2goKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChkYXRhLml0ZW0uZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShkYXRhLmVsZW1lbnQsICd0cmFuc2Zvcm0nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGluZGV4LCBvcmlnaW5hbEluZGV4LCBkcmFnZ2VkSXRlbVNpemUsIGdldEl0ZW1TcGFjZSk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIGRhdGEuZWxlbWVudCxcbiAgICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgICB0cmFuc2Zvcm0gPyBgJHt0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gJ3RyYW5zbGF0ZVknIDogJ3RyYW5zbGF0ZVgnfSgke3RyYW5zZm9ybX1weClgIDogJycsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyBvciBtb3ZlcyB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudCBmb3IgaW50ZXItbGlzdCBkcmFncyAqL1xuICBwcml2YXRlIF91cGRhdGVQbGFjZWhvbGRlckVsZW1lbnQoYWN0aXZlSXRlbTogQVhEcmFnRGlyZWN0aXZlLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IGFjdGl2ZUl0ZW0uZWxlbWVudFJlY3QoKTtcbiAgICBpZiAoIXJlY3QpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSBwbGFjZWhvbGRlciBhcyBhIGNsb25lIG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgLy8gQ2xvbmUgdGhlIGVudGlyZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICAgIGNvbnN0IHNvdXJjZUVsZW1lbnQgPSBhY3RpdmVJdGVtLmVsZW1lbnQoKTtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IHNvdXJjZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgXG4gICAgICAvLyBNYXJrIGl0IGFzIGEgcGxhY2Vob2xkZXJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCwgJ2F4LWRyb3AtcGxhY2Vob2xkZXInKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCwgJ2F4LWRyYWctcGxhY2Vob2xkZXInKTtcbiAgICAgIFxuICAgICAgLy8gUHJldmVudCBpbnRlcmFjdGlvbiB3aXRoIGNsb25lZCBjb250ZW50XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGZhZGVkIHN0eWxpbmcgdG8gaW5kaWNhdGUgaXQncyBhIHBsYWNlaG9sZGVyXG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsICdvcGFjaXR5JywgJzAuNCcpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LCAndHJhbnNpdGlvbicsICdhbGwgMjAwbXMgZWFzZScpO1xuICAgIH1cblxuICAgIC8vIEluc2VydC9tb3ZlIHBsYWNlaG9sZGVyIGF0IHRhcmdldCBpbmRleFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fY2FjaGVkSXRlbXMoKTtcbiAgICBpZiAodGFyZ2V0SW5kZXggPj0gMCAmJiB0YXJnZXRJbmRleCA8IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGFyZ2V0SXRlbSA9IGl0ZW1zW3RhcmdldEluZGV4XTtcbiAgICAgIGlmICh0YXJnZXRJdGVtICYmIHRhcmdldEl0ZW0uZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQsIHRhcmdldEl0ZW0uZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjazogYXBwZW5kIGF0IGVuZCBpZiB0YXJnZXQgaXRlbSBpbnZhbGlkXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCwgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5zZXJ0IGF0IGVuZFxuICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBwbGFjZWhvbGRlciBlbGVtZW50IGlmIGl0IGV4aXN0cyAqL1xuICBwcml2YXRlIF9yZW1vdmVQbGFjZWhvbGRlckVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcmVxdWlyZWQgdHJhbnNmb3JtIGluIHBpeGVscyBmb3IgYSBzaW5nbGUgaXRlbS5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byB0cmFuc2Zvcm0uXG4gICAqIEBwYXJhbSBvcmlnaW5hbEluZGV4IFRoZSBvcmlnaW5hbCBpbmRleCBvZiB0aGUgZHJhZ2dlZCBpdGVtICgtMSBpZiBmcm9tIGFub3RoZXIgbGlzdCkuXG4gICAqIEBwYXJhbSBkcmFnZ2VkSXRlbVNpemUgVGhlIHNpemUgKGluY2x1ZGluZyBtYXJnaW5zKSBvZiB0aGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxuICAgKiBAcGFyYW0gZ2V0SXRlbVNwYWNlIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBhbiBpdGVtJ3Mgc2l6ZSBpbmNsdWRpbmcgbWFyZ2lucy5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybSB2YWx1ZSBpbiBwaXhlbHMuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVUcmFuc2Zvcm0oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcmlnaW5hbEluZGV4OiBudW1iZXIsXG4gICAgZHJhZ2dlZEl0ZW1TaXplOiBudW1iZXIsXG4gICAgZ2V0SXRlbVNwYWNlOiAoaXRlbTogRHJvcExpc3RJdGVtRGF0YSkgPT4gbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGNvbnN0IGxpc3RHYXAgPSB0aGlzLl9saXN0R2FwKCk7XG5cbiAgICBpZiAob3JpZ2luYWxJbmRleCA+IC0xKSB7XG4gICAgICAvLyAtLS0gSW50cmEtbGlzdCBEcmFnIC0tLVxuICAgICAgaWYgKGluZGV4ID09PSBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgIC8vIFRoZSBkcmFnZ2VkIGl0ZW0gbW92ZXMgYnkgdGhlIHN1bSBvZiB0aGUgc2l6ZXMgb2YgdGhlIGl0ZW1zIGl0IHBhc3NlcyBvdmVyLCBQTFVTIHRoZSBnYXBzIGJldHdlZW4gdGhlbS5cbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgICAvLyBEcmFnZ2luZyBkb3duL3JpZ2h0XG4gICAgICAgICAgZm9yIChsZXQgaSA9IG9yaWdpbmFsSW5kZXggKyAxOyBpIDwgdGFyZ2V0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1TcGFjZSh0aGlzLl9jYWNoZWRJdGVtcygpW2ldKSArIGxpc3RHYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERyYWdnaW5nIHVwL2xlZnRcbiAgICAgICAgICBmb3IgKGxldCBpID0gdGFyZ2V0SW5kZXg7IGkgPCBvcmlnaW5hbEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIG9mZnNldCAtPSBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtpXSkgKyBsaXN0R2FwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhIHNpYmxpbmcgaXRlbSB0aGF0IG5lZWRzIHRvIG1ha2Ugc3BhY2UuXG4gICAgICAgIC8vIEl0IG1vdmVzIGJ5IHRoZSBzaXplIG9mIHRoZSBkcmFnZ2VkIGl0ZW0sIHBsdXMgT05FIGdhcCB0byBmaWxsIHRoZSB2b2lkLlxuICAgICAgICBjb25zdCBzaGlmdCA9IGRyYWdnZWRJdGVtU2l6ZSArIGxpc3RHYXA7XG4gICAgICAgIGlmIChvcmlnaW5hbEluZGV4IDwgdGFyZ2V0SW5kZXggJiYgaW5kZXggPiBvcmlnaW5hbEluZGV4ICYmIGluZGV4IDwgdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gLXNoaWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsSW5kZXggPiB0YXJnZXRJbmRleCAmJiBpbmRleCA+PSB0YXJnZXRJbmRleCAmJiBpbmRleCA8IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLS0tIEludGVyLWxpc3QgRHJhZyAoZnJvbSBhbm90aGVyIGxpc3QpIC0tLVxuICAgICAgaWYgKGluZGV4ID49IHRhcmdldEluZGV4KSB7XG4gICAgICAgIC8vIEFuIGl0ZW0gZnJvbSBhbm90aGVyIGxpc3QgZW50ZXJzLiBTaWJsaW5ncyBzaGlmdCBieSBpdHMgc2l6ZSBwbHVzIE9ORSBnYXAuXG4gICAgICAgIHJldHVybiBkcmFnZ2VkSXRlbVNpemUgKyBsaXN0R2FwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIHN0YXRlIG9mIHRoaXMgbGlzdCBhbmQgdGhlIHNvdXJjZSBsaXN0IGFmdGVyIGEgZHJvcC4gKi9cbiAgcHJpdmF0ZSByZXNldFNvcnRTdGF0ZUFuZFN0eWxlcyhzb3VyY2VMaXN0OiBBWERyb3BMaXN0RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdHNUb1Jlc2V0ID0gbmV3IFNldChbdGhpcywgc291cmNlTGlzdF0pO1xuICAgIGxpc3RzVG9SZXNldC5mb3JFYWNoKChsaXN0KSA9PiB7XG4gICAgICBpZiAobGlzdCkge1xuICAgICAgICBsaXN0Ll9yZXNldEFsbFRyYW5zZm9ybXMoKTtcbiAgICAgICAgbGlzdC5yZXNldFNvcnRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlbW92ZXMgYWxsIGB0cmFuc2Zvcm1gIHN0eWxlcyBmcm9tIHRoZSBpdGVtcyBpbiB0aGlzIGxpc3QuICovXG4gIHByaXZhdGUgX3Jlc2V0QWxsVHJhbnNmb3JtcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRJdGVtcygpLmZvckVhY2goKGRhdGEpID0+IHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGRhdGEuZWxlbWVudCwgJ3RyYW5zZm9ybScsICcnKSk7XG4gICAgdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXJFbGVtZW50KCk7IC8vIENsZWFuIHVwIGludGVyLWxpc3QgcGxhY2Vob2xkZXJcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBkaXJlY3RpdmUgdG8gaXRzIGluaXRpYWwgdmFsdWVzLiAqL1xuICByZXNldFNvcnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZHJvcC1saXN0LXNvcnRpbmctYWN0aXZlJyk7XG4gICAgdGhpcy5fYWN0aXZlRHJhZ0l0ZW0uc2V0KG51bGwpO1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zLnNldChbXSk7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQoLTEpO1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQobnVsbCk7XG4gICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gIH1cbn1cbiJdfQ==","import { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, DOCUMENT, Directive, ElementRef, NgZone, PLATFORM_ID, Renderer2, RendererStyleFlags2, ViewContainerRef, computed, contentChild, effect, inject, input, linkedSignal, output, signal, } from '@angular/core';\nimport { clamp } from 'lodash-es';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDropListDirective } from './drop-list.directive';\nimport * as i0 from \"@angular/core\";\n// Zone detection constants for nested drop lists (tree nodes)\nconst ZONE_TOP_THRESHOLD = 0.3; // Top 30% triggers reorder BEFORE\nconst ZONE_BOTTOM_THRESHOLD = 0.7; // Bottom 30% triggers reorder AFTER\n// Middle 40% (between thresholds) triggers drop INTO\nexport class AXDragDirective {\n constructor() {\n this.zone = inject(NgZone);\n this.document = inject(DOCUMENT);\n this.renderer = inject(Renderer2);\n this.cdr = inject(ChangeDetectorRef);\n this.platformId = inject(PLATFORM_ID);\n this.viewContainerRef = inject(ViewContainerRef);\n this.el = inject(ElementRef);\n this.handleDirective = contentChild(AXDragHandleDirective, ...(ngDevMode ? [{ debugName: \"handleDirective\" }] : []));\n this.axDrag = input(true, ...(ngDevMode ? [{ debugName: \"axDrag\", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));\n this.dragData = input(...(ngDevMode ? [undefined, { debugName: \"dragData\" }] : []));\n this.dragDisabled = input(false, ...(ngDevMode ? [{ debugName: \"dragDisabled\" }] : []));\n this.dragTransition = input(true, ...(ngDevMode ? [{ debugName: \"dragTransition\" }] : []));\n this.dragElementClone = input(false, ...(ngDevMode ? [{ debugName: \"dragElementClone\" }] : []));\n this.dropZoneGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropZoneGroup\" }] : []));\n this.dragStartDelay = input(...(ngDevMode ? [undefined, { debugName: \"dragStartDelay\" }] : []));\n this.dragResetOnDblClick = input(true, ...(ngDevMode ? [{ debugName: \"dragResetOnDblClick\" }] : []));\n this.dragLockAxis = input(null, ...(ngDevMode ? [{ debugName: \"dragLockAxis\" }] : []));\n this.dragClonedTemplate = input(...(ngDevMode ? [undefined, { debugName: \"dragClonedTemplate\" }] : []));\n this.dragCursor = input('move', ...(ngDevMode ? [{ debugName: \"dragCursor\" }] : []));\n this.dragBoundary = input(...(ngDevMode ? [undefined, { debugName: \"dragBoundary\" }] : []));\n this.dragTransitionDuration = input(150, ...(ngDevMode ? [{ debugName: \"dragTransitionDuration\" }] : []));\n this.dragPositionChanged = output();\n this.isMoving = signal(false, ...(ngDevMode ? [{ debugName: \"isMoving\" }] : []));\n this.clonedElement = signal(null, ...(ngDevMode ? [{ debugName: \"clonedElement\" }] : []));\n this.currentAxis = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"currentAxis\" }] : []));\n this.currentCloneAxis = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"currentCloneAxis\" }] : []));\n this.transitionDuration = linkedSignal(() => this.dragTransitionDuration(), ...(ngDevMode ? [{ debugName: \"transitionDuration\" }] : []));\n this.element = signal(this.el.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n this.dragStartTime = signal(0, ...(ngDevMode ? [{ debugName: \"dragStartTime\" }] : []));\n this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: \"isDragging\" }] : []));\n this.elementOpacity = signal('1', ...(ngDevMode ? [{ debugName: \"elementOpacity\" }] : []));\n this.movedAfterDelay = signal(false, ...(ngDevMode ? [{ debugName: \"movedAfterDelay\" }] : []));\n this.activePointerId = signal(null, ...(ngDevMode ? [{ debugName: \"activePointerId\" }] : []));\n this.prevDropZone = signal(null, ...(ngDevMode ? [{ debugName: \"prevDropZone\" }] : []));\n this.dragStartOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"dragStartOffset\" }] : []));\n this.clonePointerOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"clonePointerOffset\" }] : []));\n this.clonedElementViewRef = signal(null, ...(ngDevMode ? [{ debugName: \"clonedElementViewRef\" }] : []));\n this.rafId = null;\n this.pendingPointerEvent = null;\n this._parentDropList = inject(AXDropListDirective, { optional: true, skipSelf: true, host: false });\n this._currentDropList = signal(null, ...(ngDevMode ? [{ debugName: \"_currentDropList\" }] : []));\n this.createCloneElement = computed(() => this.dragElementClone() || !!this._parentDropList, ...(ngDevMode ? [{ debugName: \"createCloneElement\" }] : []));\n this.boundaryElement = computed(() => {\n const boundary = this.dragBoundary();\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return this.document.querySelector(boundary);\n }\n return boundary instanceof ElementRef ? boundary.nativeElement : boundary;\n }, ...(ngDevMode ? [{ debugName: \"boundaryElement\" }] : []));\n this.elementRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.element().getBoundingClientRect();\n }, ...(ngDevMode ? [{ debugName: \"elementRect\" }] : []));\n this.boundaryRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.boundaryElement()?.getBoundingClientRect();\n }, ...(ngDevMode ? [{ debugName: \"boundaryRect\" }] : []));\n this.handle = computed(() => this.handleDirective()?.element() ?? this.element(), ...(ngDevMode ? [{ debugName: \"handle\" }] : []));\n this.boundHandleDblClick = this.handleDblClick.bind(this);\n this.boundHandlePointerUp = this.handlePointerUp.bind(this);\n this.boundHandlePointerDown = this.handlePointerDown.bind(this);\n this.boundHandlePointerMove = this.handlePointerMove.bind(this);\n this.listenersAttached = signal(null, ...(ngDevMode ? [{ debugName: \"listenersAttached\" }] : []));\n this.#dragDisabledEffect = effect(() => {\n if (this.dragCursor() === 'none') {\n return;\n }\n if (!this.dragDisabled()) {\n this.renderer.setStyle(this.handle(), 'cursor', this.dragCursor());\n this.renderer.setStyle(this.handle(), 'touch-action', 'none');\n }\n else {\n this.renderer.removeStyle(this.handle(), 'cursor');\n this.renderer.removeStyle(this.handle(), 'touch-action');\n }\n }, ...(ngDevMode ? [{ debugName: \"#dragDisabledEffect\" }] : []));\n this.#handleChangeEffect = effect(() => {\n if (!isPlatformBrowser(this.platformId))\n return;\n const currentHandle = this.handle();\n const previousHandle = this.listenersAttached();\n // Remove listeners from previous handle if it changed\n if (previousHandle && previousHandle !== currentHandle) {\n previousHandle.removeEventListener('dblclick', this.boundHandleDblClick);\n previousHandle.removeEventListener('pointerdown', this.boundHandlePointerDown);\n }\n // Attach listeners to new handle\n if (currentHandle && currentHandle !== previousHandle) {\n this.zone.runOutsideAngular(() => {\n currentHandle.addEventListener('dblclick', this.boundHandleDblClick);\n currentHandle.addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });\n });\n this.listenersAttached.set(currentHandle);\n }\n }, ...(ngDevMode ? [{ debugName: \"#handleChangeEffect\" }] : []));\n }\n #dragDisabledEffect;\n #handleChangeEffect;\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n if (this._parentDropList) {\n this.setElementTransition(this.element());\n }\n this.renderer.setStyle(this.element(), 'z-index', '1');\n this.elementOpacity.set(getComputedStyle(this.element()).opacity);\n }\n }\n ngOnDestroy() {\n if (isPlatformBrowser(this.platformId)) {\n const handle = this.listenersAttached();\n if (handle) {\n handle.removeEventListener('dblclick', this.boundHandleDblClick);\n handle.removeEventListener('pointerdown', this.boundHandlePointerDown);\n }\n this.removeDocumentListeners();\n if (this.createCloneElement()) {\n this.removeCloneElement();\n }\n if (this._parentDropList && this.isDragging()) {\n this._parentDropList.cancelSort();\n }\n }\n }\n setElementTransition(element) {\n this.renderer.setStyle(element, 'transition-property', 'transform, opacity, translate');\n this.renderer.setStyle(element, 'transition-duration', `var(--ax-sys-transition-duration,${this.transitionDuration()}ms)`);\n this.renderer.setStyle(element, 'transition-timing-function', 'var(--ax-sys-transition-timing-function)');\n }\n removeElementTransition(element) {\n this.renderer.setStyle(element, 'transition-property', 'opacity');\n }\n handlePointerDown(e) {\n if (!isPlatformBrowser(this.platformId))\n return;\n if (!this.axDrag() || this.dragDisabled() || e.button !== 0 || this._parentDropList?.sortingDisabled())\n return;\n this.isDragging.set(true);\n this.movedAfterDelay.set(false);\n if (this.dragCursor() === 'move') {\n this.renderer.setStyle(this.handle(), 'cursor', 'move');\n }\n else if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.handle(), 'cursor', 'grabbing');\n }\n this.dragStartOffset.set({ x: e.clientX - this.currentAxis().x, y: e.clientY - this.currentAxis().y });\n this.renderer.setStyle(this.handle(), 'userSelect', 'none');\n this.activePointerId.set(e.pointerId);\n this.addDocumentListeners();\n this.dragStartTime.set(Date.now());\n }\n handleDblClick() {\n if (!this.dragResetOnDblClick() || this.dragDisabled())\n return;\n this.setPosition(0, 0);\n }\n handlePointerMove(e) {\n if (!this.isDragging() || !isPlatformBrowser(this.platformId) || e.pointerId !== this.activePointerId()) {\n return;\n }\n e.preventDefault();\n if (!this.isMoving()) {\n const delay = this.dragStartDelay() ?? 0;\n // FIX: Delay logic was inverted\n if (Date.now() - this.dragStartTime() < delay) {\n return; // Still waiting for delay\n }\n this.isMoving.set(true);\n this.handle().setPointerCapture(e.pointerId);\n this.startDrag(e);\n }\n // Run position updates outside Angular zone for better performance\n this.zone.runOutsideAngular(() => {\n if (this.createCloneElement()) {\n const newCloneX = e.clientX - this.clonePointerOffset().x;\n const newCloneY = e.clientY - this.clonePointerOffset().y;\n this.setClonePosition(newCloneX, newCloneY);\n }\n else {\n const newX = e.clientX - this.dragStartOffset().x;\n const newY = e.clientY - this.dragStartOffset().y;\n this.setPosition(newX, newY);\n }\n });\n // Throttle drop list interactions using requestAnimationFrame\n if (this._parentDropList) {\n this.pendingPointerEvent = e;\n if (this.rafId === null) {\n this.rafId = requestAnimationFrame(() => {\n if (this.pendingPointerEvent) {\n this.handleDropListInteractions(this.pendingPointerEvent);\n this.pendingPointerEvent = null;\n }\n this.rafId = null;\n });\n }\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n }\n startDrag(e) {\n // Add CDK-style classes\n this.renderer.addClass(this.element(), 'ax-dragging');\n this.renderer.addClass(this.element(), 'ax-drag-placeholder');\n if (this._parentDropList) {\n this._currentDropList.set(this._parentDropList);\n this._parentDropList.prepareSort(this);\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n if (this.createCloneElement()) {\n const elementRect = this.element().getBoundingClientRect();\n this.clonePointerOffset.set({\n x: e.clientX - elementRect.left,\n y: e.clientY - elementRect.top,\n });\n const clone = this.createCloneElementHandler(this.element());\n if (clone) {\n this.renderer.addClass(clone, 'ax-drag-preview');\n this.renderer.addClass(clone, 'ax-dragging');\n }\n }\n }\n handlePointerUp(e) {\n if (e.pointerId !== this.activePointerId() || !isPlatformBrowser(this.platformId) || !this.isDragging()) {\n return;\n }\n if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.handle(), 'cursor', 'grab');\n }\n const wasMoving = this.isMoving();\n this.isMoving.set(false);\n this.isDragging.set(false);\n // Remove CDK-style classes\n this.renderer.removeClass(this.element(), 'ax-dragging');\n this.renderer.removeClass(this.element(), 'ax-drag-placeholder');\n if (!wasMoving) {\n this.activePointerId.set(null);\n this.removeDocumentListeners();\n this._currentDropList.set(null);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n return;\n }\n this.preventClicking();\n const transform = this.element().style.transform;\n let x = 0;\n let y = 0;\n if (transform) {\n x = Number(transform.split('translateX(')[1]?.split('px)')[0]);\n y = Number(transform.split('translateY(')[1]?.split('px)')[0]);\n }\n const droppedIntoList = this._currentDropList();\n if (droppedIntoList && this._parentDropList) {\n droppedIntoList.finalizeSort(e, this, this._parentDropList);\n }\n else if (this._parentDropList) {\n this._parentDropList.cancelSort(this);\n }\n else {\n this.dropZoneDropHandler(e);\n }\n // Cancel any pending RAF callbacks\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.pendingPointerEvent = null;\n this.activePointerId.set(null);\n this.removeDocumentListeners();\n this._currentDropList.set(null);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n if (this.createCloneElement()) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n this.removeCloneElementWithAnimation(x || 0, y || 0, listUnderPointer);\n }\n else {\n this.renderer.setStyle(this.element(), 'opacity', this.elementOpacity());\n }\n }\n preventClicking() {\n const blockClick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n this.document.addEventListener('click', blockClick, { capture: true, once: true });\n }\n handleDropListInteractions(e) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n const previousList = this._currentDropList();\n let targetList = null;\n const canDrop = listUnderPointer && this.canDropInList(listUnderPointer);\n if (canDrop) {\n targetList = listUnderPointer;\n }\n // Update cursor based on whether drop is allowed\n if (listUnderPointer) {\n const cloneEl = this.clonedElement();\n const cursor = canDrop ? 'move' : 'not-allowed';\n if (cloneEl) {\n this.renderer.setStyle(cloneEl, 'cursor', cursor);\n }\n else {\n this.renderer.setStyle(this.element(), 'cursor', cursor);\n }\n }\n if (targetList !== previousList) {\n if (previousList) {\n previousList.cancelSortPreview();\n if (previousList !== this._parentDropList) {\n previousList.resetSortState();\n }\n }\n if (targetList) {\n targetList.enter(this);\n }\n this._currentDropList.set(targetList);\n }\n this._currentDropList()?.sort(e, this);\n }\n canDropInList(list) {\n if (!list || list.sortingDisabled() || !this._parentDropList) {\n return false;\n }\n if (list === this._parentDropList) {\n return true;\n }\n const dragGroup = this._parentDropList.dropListGroup();\n const targetGroup = list.dropListGroup();\n if (!dragGroup || dragGroup !== targetGroup) {\n return false;\n }\n // Check for circular reference (tree-specific validation)\n const draggedNode = this.dragData();\n const targetNodeId = list.element.getAttribute('data-node-id');\n if (draggedNode && this.isCircularReference(targetNodeId, draggedNode)) {\n return false;\n }\n return true;\n }\n isCircularReference(targetNodeId, draggedNode) {\n if (!draggedNode || typeof draggedNode !== 'object') {\n return false;\n }\n const node = draggedNode;\n // Check if dropping into itself\n if (targetNodeId === node.id) {\n return true;\n }\n // Check if targetNodeId is in draggedNode's descendants\n if (!node.children || !Array.isArray(node.children)) {\n return false;\n }\n for (const child of node.children) {\n const childNode = child;\n if (childNode.id === targetNodeId) {\n return true;\n }\n if (this.isCircularReference(targetNodeId, child)) {\n return true;\n }\n }\n return false;\n }\n dropZoneHoverHandler(e) {\n const dropZones = this.getDropZonesFromPoint(e.clientX, e.clientY);\n const dropZone = dropZones[0];\n if (!dropZone) {\n if (this.prevDropZone()) {\n this.leavePrevDropZone(e);\n }\n return;\n }\n if (this.prevDropZone() && this.prevDropZone() !== dropZone) {\n this.leavePrevDropZone(e);\n }\n if (this.dropZoneValidation(dropZone) && !dropZone.isHovered()) {\n this.prevDropZone.set(dropZone);\n dropZone.onElementHover.emit({ sender: dropZone, dropped: this, nativeEvent: e, state: 'enter' });\n dropZone.isHovered.set(true);\n }\n }\n dropZoneDropHandler(e) {\n const dropZones = this.getDropZonesFromPoint(e.clientX, e.clientY);\n const dropZone = dropZones[0];\n if (!this.dropZoneValidation(dropZone)) {\n return;\n }\n dropZone.isHovered.set(false);\n dropZone.onElementDrop.emit({ sender: dropZone, dropped: this, nativeEvent: e });\n }\n getDropZonesFromPoint(x, y) {\n const elements = this.document.elementsFromPoint(x, y);\n return elements\n .filter((el) => el instanceof HTMLElement && el.dataset['axDropZone'] === 'true')\n .map((el) => el['__axContext__']);\n }\n getDropListFromPoint(x, y) {\n const dropListElements = this.document\n .elementsFromPoint(x, y)\n .filter((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');\n if (dropListElements.length === 0) {\n return null;\n }\n // If only one drop list, use it\n if (dropListElements.length === 1) {\n return dropListElements[0]['__axContext__'];\n }\n // Multiple drop lists detected (nested scenario like tree2)\n // Prioritize based on pointer position and drop type\n const ontoNodeList = dropListElements.find((el) => el.dataset['dropType'] === 'onto-node');\n const reorderList = dropListElements.find((el) => el.dataset['dropType'] !== 'onto-node');\n // If no special handling needed, return first\n if (!ontoNodeList || !reorderList) {\n return dropListElements[0]['__axContext__'];\n }\n // Calculate pointer position relative to the \"onto-node\" element\n const ontoNodeRect = ontoNodeList.getBoundingClientRect();\n const relativeY = y - ontoNodeRect.top;\n const heightRatio = relativeY / ontoNodeRect.height;\n // Smart zone detection based on pointer position\n if (heightRatio < ZONE_TOP_THRESHOLD || heightRatio > ZONE_BOTTOM_THRESHOLD) {\n // Top or bottom zone: reorder (drop BEFORE/AFTER node)\n return reorderList['__axContext__'];\n }\n else {\n // Center zone: onto-node (drop INTO node as child)\n return ontoNodeList['__axContext__'];\n }\n }\n dropZoneValidation(dropZone) {\n if (!dropZone)\n return false;\n const dragGroup = this.dropZoneGroup();\n const dropGroup = dropZone.dropZoneGroup();\n if (dropGroup && dragGroup !== dropGroup) {\n return false;\n }\n return true;\n }\n leavePrevDropZone(e) {\n if (this.prevDropZone()) {\n this.prevDropZone().onElementHover.emit({\n dropped: this,\n state: 'leave',\n nativeEvent: e,\n sender: this.prevDropZone(),\n });\n this.prevDropZone().isHovered.set(false);\n this.prevDropZone.set(null);\n }\n }\n setPosition(x, y) {\n let constrainedX = x;\n let constrainedY = y;\n const elementRect = this.elementRect();\n const boundaryRect = this.boundaryRect();\n if (boundaryRect && elementRect) {\n const minX = boundaryRect.left - elementRect.left;\n const minY = boundaryRect.top - elementRect.top;\n const maxX = minX + boundaryRect.width - elementRect.width;\n const maxY = minY + boundaryRect.height - elementRect.height;\n constrainedX = clamp(x, minX, maxX);\n constrainedY = clamp(y, minY, maxY);\n }\n if (this.dragLockAxis() === 'x')\n constrainedY = this.currentAxis().y;\n if (this.dragLockAxis() === 'y')\n constrainedX = this.currentAxis().x;\n // Direct DOM manipulation without triggering change detection\n this.renderer.setStyle(this.element(), 'translate', `${constrainedX}px ${constrainedY}px`);\n // Only update signal and emit if position actually changed significantly (throttle)\n const current = this.currentAxis();\n if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {\n this.currentAxis.set({ x: constrainedX, y: constrainedY });\n this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });\n }\n }\n setClonePosition(x, y) {\n let constrainedX = x;\n let constrainedY = y;\n const cloneEl = this.clonedElement();\n const boundaryRect = this.boundaryRect();\n if (boundaryRect && cloneEl) {\n const cloneWidth = cloneEl.offsetWidth;\n const cloneHeight = cloneEl.offsetHeight;\n constrainedX = clamp(x, boundaryRect.left, boundaryRect.right - cloneWidth);\n constrainedY = clamp(y, boundaryRect.top, boundaryRect.bottom - cloneHeight);\n }\n if (this.dragLockAxis() === 'x')\n constrainedY = this.currentCloneAxis().y;\n if (this.dragLockAxis() === 'y')\n constrainedX = this.currentCloneAxis().x;\n // Direct DOM manipulation without triggering change detection\n this.renderer.setStyle(cloneEl, 'translate', `${constrainedX}px ${constrainedY}px`);\n // Only update signal and emit if position actually changed significantly (throttle)\n const current = this.currentCloneAxis();\n if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {\n this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });\n this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });\n }\n }\n createCloneElementHandler(originalElement) {\n if (!isPlatformBrowser(this.platformId)) {\n this.clonedElement.set(null);\n return null;\n }\n let clonedElement;\n const customTemplate = this.dragClonedTemplate();\n const applyComputedStylesRecursive = (source, target) => {\n if (!isPlatformBrowser(this.platformId))\n return;\n const computedStyles = window.getComputedStyle(source);\n if (computedStyles.cssText && target.style.cssText !== undefined) {\n let tempCssText = computedStyles.cssText;\n if (target === clonedElement) {\n tempCssText = tempCssText\n .replace(/position:[^;]+;/gi, '')\n .replace(/top:[^;]+;/gi, '')\n .replace(/left:[^;]+;/gi, '')\n .replace(/right:[^;]+;/gi, '')\n .replace(/bottom:[^;]+;/gi, '')\n .replace(/width:[^;]+;/gi, '')\n .replace(/height:[^;]+;/gi, '')\n .replace(/margin[^;]*:[^;]+;/gi, '')\n .replace(/transition[^;]*:[^;]+;/gi, '')\n .replace(/transform:[^;]+;/gi, '')\n .replace(/translate:[^;]+;/gi, '')\n .replace(/z-index:[^;]+;/gi, '')\n .replace(/opacity:[^;]+;/gi, '');\n }\n tempCssText = tempCssText.replace(/pointer-events:[^;]+;/gi, '');\n target.style.cssText = tempCssText;\n }\n else {\n for (let i = 0; i < computedStyles.length; i++) {\n const propName = computedStyles[i];\n if (propName === 'pointer-events') {\n continue;\n }\n if (target === clonedElement &&\n (propName === 'position' ||\n propName === 'top' ||\n propName === 'left' ||\n propName === 'right' ||\n propName === 'bottom' ||\n propName === 'width' ||\n propName === 'height' ||\n propName.startsWith('margin') ||\n propName.startsWith('transition') ||\n propName === 'transform' ||\n propName === 'translate' ||\n propName === 'z-index' ||\n propName === 'opacity')) {\n continue;\n }\n try {\n target.style.setProperty(propName, computedStyles.getPropertyValue(propName), computedStyles.getPropertyPriority(propName));\n }\n catch {\n // Some CSS properties cannot be set directly, skip silently\n }\n }\n }\n const sourceChildren = Array.from(source.children);\n const targetChildren = Array.from(target.children);\n for (let i = 0; i < sourceChildren.length; i++) {\n if (sourceChildren[i] instanceof HTMLElement && targetChildren[i] instanceof HTMLElement) {\n applyComputedStylesRecursive(sourceChildren[i], targetChildren[i]);\n }\n }\n };\n if (customTemplate) {\n const viewRef = this.viewContainerRef.createEmbeddedView(customTemplate);\n this.clonedElementViewRef.set(viewRef);\n if (viewRef.rootNodes.length > 0 && viewRef.rootNodes[0] instanceof HTMLElement) {\n clonedElement = viewRef.rootNodes[0];\n const viewIndex = this.viewContainerRef.indexOf(viewRef);\n if (viewIndex !== -1) {\n this.viewContainerRef.detach(viewIndex);\n }\n }\n else {\n if (this.clonedElementViewRef()) {\n this.clonedElementViewRef().destroy();\n this.clonedElementViewRef.set(null);\n }\n console.warn('AXDragDirective: dragClonedTemplate did not produce a valid HTMLElement root node. Falling back to default cloning.');\n clonedElement = originalElement.cloneNode(true);\n applyComputedStylesRecursive(originalElement, clonedElement);\n }\n }\n else {\n clonedElement = originalElement.cloneNode(true);\n applyComputedStylesRecursive(originalElement, clonedElement);\n }\n if (clonedElement.id) {\n this.renderer.removeAttribute(clonedElement, 'id');\n }\n this.renderer.setStyle(originalElement, 'opacity', '0.5');\n const originalRect = originalElement.getBoundingClientRect();\n this.renderer.setStyle(clonedElement, 'position', 'fixed', RendererStyleFlags2.Important);\n this.renderer.setStyle(clonedElement, 'left', '0px');\n this.renderer.setStyle(clonedElement, 'top', '0px');\n if (!customTemplate) {\n this.renderer.setStyle(clonedElement, 'width', `${originalRect.width}px`);\n this.renderer.setStyle(clonedElement, 'height', `${originalRect.height}px`);\n }\n this.renderer.setStyle(clonedElement, 'margin', '0');\n this.renderer.setStyle(clonedElement, 'box-sizing', 'border-box');\n this.renderer.setStyle(clonedElement, 'opacity', '0.75');\n this.renderer.setStyle(clonedElement, 'z-index', '999');\n this.renderer.setStyle(clonedElement, 'pointer-events', 'none', RendererStyleFlags2.Important);\n this.renderer.setStyle(clonedElement, 'user-select', 'none');\n this.renderer.setStyle(clonedElement, 'touch-action', 'none');\n this.renderer.setStyle(clonedElement, 'translate', `${originalRect.left}px ${originalRect.top}px`);\n this.renderer.removeStyle(clonedElement, 'transition');\n this.renderer.removeStyle(clonedElement, 'transition-property');\n this.copyPseudoElementStyles(originalElement, clonedElement, '::before');\n this.copyPseudoElementStyles(originalElement, clonedElement, '::after');\n this.renderer.appendChild(this.document.body, clonedElement);\n this.clonedElement.set(clonedElement);\n this.setClonePosition(originalRect.left, originalRect.top);\n return clonedElement;\n }\n copyPseudoElementStyles(source, target, pseudo) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const pseudoStyles = window.getComputedStyle(source, pseudo);\n const content = pseudoStyles.getPropertyValue('content');\n const display = pseudoStyles.getPropertyValue('display');\n if (!content || content === 'none' || display === 'none') {\n return;\n }\n const pseudoElement = this.renderer.createElement('span');\n for (let i = 0; i < pseudoStyles.length; i++) {\n const propName = pseudoStyles[i];\n try {\n pseudoElement.style.setProperty(propName, pseudoStyles.getPropertyValue(propName), pseudoStyles.getPropertyPriority(propName));\n }\n catch (e) {\n // Some properties might fail to set, which is usually fine.\n }\n }\n if (content.startsWith('\"') && content.endsWith('\"')) {\n this.renderer.setProperty(pseudoElement, 'textContent', content.slice(1, -1));\n }\n else {\n this.renderer.setProperty(pseudoElement, 'textContent', content);\n }\n this.renderer.setStyle(pseudoElement, 'pointer-events', 'none');\n if (pseudo === '::before') {\n this.renderer.insertBefore(target, pseudoElement, target.firstChild);\n }\n else {\n this.renderer.appendChild(target, pseudoElement);\n }\n }\n removeCloneElementWithAnimation(x, y, dropList) {\n dropList?._draggableItems().forEach((item) => {\n this.removeElementTransition(item.element());\n });\n const clone = this.clonedElement();\n if (!clone)\n return;\n this.renderer.setStyle(this.element(), 'opacity', this.elementOpacity());\n const elementRect = this.element().getBoundingClientRect();\n if (elementRect) {\n this.setElementTransition(clone);\n this.renderer.setStyle(clone, 'opacity', '0');\n this.setClonePosition(elementRect.left + x, elementRect.top + y);\n }\n if (!this.dragTransition()) {\n this.removeCloneElement();\n }\n else {\n setTimeout(() => {\n this.removeCloneElement();\n dropList?._draggableItems().forEach((item) => {\n this.setElementTransition(item.element());\n });\n }, this.transitionDuration());\n }\n }\n removeCloneElement() {\n if (!isPlatformBrowser(this.platformId))\n return;\n const clone = this.clonedElement();\n if (clone?.parentNode) {\n // Remove classes before removing element\n this.renderer.removeClass(clone, 'ax-drag-preview');\n this.renderer.removeClass(clone, 'ax-dragging');\n this.renderer.removeChild(clone.parentNode, clone);\n }\n this.clonedElement.set(null);\n if (this.clonedElementViewRef()) {\n this.clonedElementViewRef().destroy();\n this.clonedElementViewRef.set(null);\n }\n this.cdr.markForCheck();\n }\n addDocumentListeners() {\n if (!isPlatformBrowser(this.platformId))\n return;\n this.zone.runOutsideAngular(() => {\n this.document.addEventListener('pointermove', this.boundHandlePointerMove, { passive: false });\n this.document.addEventListener('pointerup', this.boundHandlePointerUp);\n this.document.addEventListener('pointercancel', this.boundHandlePointerUp);\n });\n }\n removeDocumentListeners() {\n if (!isPlatformBrowser(this.platformId))\n return;\n this.zone.runOutsideAngular(() => {\n this.document.removeEventListener('pointermove', this.boundHandlePointerMove);\n this.document.removeEventListener('pointerup', this.boundHandlePointerUp);\n this.document.removeEventListener('pointercancel', this.boundHandlePointerUp);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.15\", type: AXDragDirective, isStandalone: true, selector: \"[axDrag]\", inputs: { axDrag: { classPropertyName: \"axDrag\", publicName: \"axDrag\", isSignal: true, isRequired: false, transformFunction: null }, dragData: { classPropertyName: \"dragData\", publicName: \"dragData\", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: \"dragDisabled\", publicName: \"dragDisabled\", isSignal: true, isRequired: false, transformFunction: null }, dragTransition: { classPropertyName: \"dragTransition\", publicName: \"dragTransition\", isSignal: true, isRequired: false, transformFunction: null }, dragElementClone: { classPropertyName: \"dragElementClone\", publicName: \"dragElementClone\", isSignal: true, isRequired: false, transformFunction: null }, dropZoneGroup: { classPropertyName: \"dropZoneGroup\", publicName: \"dropZoneGroup\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, dragResetOnDblClick: { classPropertyName: \"dragResetOnDblClick\", publicName: \"dragResetOnDblClick\", isSignal: true, isRequired: false, transformFunction: null }, dragLockAxis: { classPropertyName: \"dragLockAxis\", publicName: \"dragLockAxis\", isSignal: true, isRequired: false, transformFunction: null }, dragClonedTemplate: { classPropertyName: \"dragClonedTemplate\", publicName: \"dragClonedTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dragCursor: { classPropertyName: \"dragCursor\", publicName: \"dragCursor\", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: \"dragBoundary\", publicName: \"dragBoundary\", isSignal: true, isRequired: false, transformFunction: null }, dragTransitionDuration: { classPropertyName: \"dragTransitionDuration\", publicName: \"dragTransitionDuration\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragPositionChanged: \"dragPositionChanged\" }, queries: [{ propertyName: \"handleDirective\", first: true, predicate: AXDragHandleDirective, descendants: true, isSignal: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDrag]',\n }]\n }], propDecorators: { handleDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXDragHandleDirective), { isSignal: true }] }], axDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: \"axDrag\", required: false }] }], dragData: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragData\", required: false }] }], dragDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragDisabled\", required: false }] }], dragTransition: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragTransition\", required: false }] }], dragElementClone: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragElementClone\", required: false }] }], dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropZoneGroup\", required: false }] }], dragStartDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragStartDelay\", required: false }] }], dragResetOnDblClick: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragResetOnDblClick\", required: false }] }], dragLockAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragLockAxis\", required: false }] }], dragClonedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragClonedTemplate\", required: false }] }], dragCursor: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragCursor\", required: false }] }], dragBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragBoundary\", required: false }] }], dragTransitionDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragTransitionDuration\", required: false }] }], dragPositionChanged: [{ type: i0.Output, args: [\"dragPositionChanged\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9saWIvZHJhZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFFVixNQUFNLEVBR04sV0FBVyxFQUNYLFNBQVMsRUFDVCxtQkFBbUIsRUFFbkIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLNUQsOERBQThEO0FBQzlELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUMsa0NBQWtDO0FBQ2xFLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUMsb0NBQW9DO0FBQ3ZFLHFEQUFxRDtBQUtyRCxNQUFNLE9BQU8sZUFBZTtJQUg1QjtRQUlVLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pD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R0FTd0MscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERPQ1VNRU5ULFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyb3BMaXN0RGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wLWxpc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Atem9uZS5kaXJlY3RpdmUnO1xuXG50eXBlIEFYUG9zaXRpb25UeXBlID0geyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuXG4vLyBab25lIGRldGVjdGlvbiBjb25zdGFudHMgZm9yIG5lc3RlZCBkcm9wIGxpc3RzICh0cmVlIG5vZGVzKVxuY29uc3QgWk9ORV9UT1BfVEhSRVNIT0xEID0gMC4zOyAvLyBUb3AgMzAlIHRyaWdnZXJzIHJlb3JkZXIgQkVGT1JFXG5jb25zdCBaT05FX0JPVFRPTV9USFJFU0hPTEQgPSAwLjc7IC8vIEJvdHRvbSAzMCUgdHJpZ2dlcnMgcmVvcmRlciBBRlRFUlxuLy8gTWlkZGxlIDQwJSAoYmV0d2VlbiB0aHJlc2hvbGRzKSB0cmlnZ2VycyBkcm9wIElOVE9cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJhZ10nLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyYWdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBlbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgaGFuZGxlRGlyZWN0aXZlID0gY29udGVudENoaWxkKEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSk7XG5cbiAgYXhEcmFnID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIH0pO1xuICBkcmFnRGF0YSA9IGlucHV0KCk7XG4gIGRyYWdEaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1RyYW5zaXRpb24gPSBpbnB1dCh0cnVlKTtcbiAgZHJhZ0VsZW1lbnRDbG9uZSA9IGlucHV0KGZhbHNlKTtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dDxudW1iZXI+KCk7XG4gIGRyYWdSZXNldE9uRGJsQ2xpY2sgPSBpbnB1dCh0cnVlKTtcbiAgZHJhZ0xvY2tBeGlzID0gaW5wdXQ8J3gnIHwgJ3knIHwgbnVsbD4obnVsbCk7XG4gIGRyYWdDbG9uZWRUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBkcmFnQ3Vyc29yID0gaW5wdXQ8J21vdmUnIHwgJ2dyYWInIHwgJ25vbmUnPignbW92ZScpO1xuICBkcmFnQm91bmRhcnkgPSBpbnB1dDxzdHJpbmcgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PigpO1xuICBkcmFnVHJhbnNpdGlvbkR1cmF0aW9uID0gaW5wdXQ8bnVtYmVyPigxNTApO1xuXG4gIGRyYWdQb3NpdGlvbkNoYW5nZWQgPSBvdXRwdXQ8QVhQb3NpdGlvblR5cGU+KCk7XG5cbiAgaXNNb3ZpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBjbG9uZWRFbGVtZW50ID0gc2lnbmFsPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGN1cnJlbnRBeGlzID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIGN1cnJlbnRDbG9uZUF4aXMgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uID0gbGlua2VkU2lnbmFsKCgpID0+IHRoaXMuZHJhZ1RyYW5zaXRpb25EdXJhdGlvbigpKTtcbiAgcmVhZG9ubHkgZWxlbWVudCA9IHNpZ25hbDxIVE1MRWxlbWVudD4odGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgcHJpdmF0ZSBkcmFnU3RhcnRUaW1lID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgZWxlbWVudE9wYWNpdHkgPSBzaWduYWw8c3RyaW5nPignMScpO1xuICBwcml2YXRlIG1vdmVkQWZ0ZXJEZWxheSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgYWN0aXZlUG9pbnRlcklkID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHByZXZEcm9wWm9uZSA9IHNpZ25hbDxBWERyb3Bab25lRGlyZWN0aXZlIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgZHJhZ1N0YXJ0T2Zmc2V0ID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgY2xvbmVQb2ludGVyT2Zmc2V0ID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgY2xvbmVkRWxlbWVudFZpZXdSZWYgPSBzaWduYWw8RW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBlbmRpbmdQb2ludGVyRXZlbnQ6IFBvaW50ZXJFdmVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3BhcmVudERyb3BMaXN0ID0gaW5qZWN0KEFYRHJvcExpc3REaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlLCBob3N0OiBmYWxzZSB9KTtcbiAgcHJpdmF0ZSBfY3VycmVudERyb3BMaXN0ID0gc2lnbmFsPEFYRHJvcExpc3REaXJlY3RpdmUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgY3JlYXRlQ2xvbmVFbGVtZW50ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5kcmFnRWxlbWVudENsb25lKCkgfHwgISF0aGlzLl9wYXJlbnREcm9wTGlzdCk7XG5cbiAgcHJpdmF0ZSBib3VuZGFyeUVsZW1lbnQgPSBjb21wdXRlZDxIVE1MRWxlbWVudCB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBib3VuZGFyeSA9IHRoaXMuZHJhZ0JvdW5kYXJ5KCk7XG4gICAgaWYgKCFib3VuZGFyeSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm91bmRhcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihib3VuZGFyeSk7XG4gICAgfVxuICAgIHJldHVybiBib3VuZGFyeSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyBib3VuZGFyeS5uYXRpdmVFbGVtZW50IDogYm91bmRhcnk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVsZW1lbnRSZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBib3VuZGFyeVJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYm91bmRhcnlFbGVtZW50KCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9KTtcblxuICBwcml2YXRlIGhhbmRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaGFuZGxlRGlyZWN0aXZlKCk/LmVsZW1lbnQoKSA/PyB0aGlzLmVsZW1lbnQoKSk7XG5cbiAgcHJpdmF0ZSBib3VuZEhhbmRsZURibENsaWNrID0gdGhpcy5oYW5kbGVEYmxDbGljay5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGJvdW5kSGFuZGxlUG9pbnRlclVwID0gdGhpcy5oYW5kbGVQb2ludGVyVXAuYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBib3VuZEhhbmRsZVBvaW50ZXJEb3duID0gdGhpcy5oYW5kbGVQb2ludGVyRG93bi5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGJvdW5kSGFuZGxlUG9pbnRlck1vdmUgPSB0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgbGlzdGVuZXJzQXR0YWNoZWQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICAjZHJhZ0Rpc2FibGVkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicsIHRoaXMuZHJhZ0N1cnNvcigpKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ3RvdWNoLWFjdGlvbicsICdub25lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicpO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAndG91Y2gtYWN0aW9uJyk7XG4gICAgfVxuICB9KTtcblxuICAjaGFuZGxlQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRIYW5kbGUgPSB0aGlzLmhhbmRsZSgpO1xuICAgIGNvbnN0IHByZXZpb3VzSGFuZGxlID0gdGhpcy5saXN0ZW5lcnNBdHRhY2hlZCgpO1xuXG4gICAgLy8gUmVtb3ZlIGxpc3RlbmVycyBmcm9tIHByZXZpb3VzIGhhbmRsZSBpZiBpdCBjaGFuZ2VkXG4gICAgaWYgKHByZXZpb3VzSGFuZGxlICYmIHByZXZpb3VzSGFuZGxlICE9PSBjdXJyZW50SGFuZGxlKSB7XG4gICAgICBwcmV2aW91c0hhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMuYm91bmRIYW5kbGVEYmxDbGljayk7XG4gICAgICBwcmV2aW91c0hhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyRG93bik7XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIGxpc3RlbmVycyB0byBuZXcgaGFuZGxlXG4gICAgaWYgKGN1cnJlbnRIYW5kbGUgJiYgY3VycmVudEhhbmRsZSAhPT0gcHJldmlvdXNIYW5kbGUpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGN1cnJlbnRIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLmJvdW5kSGFuZGxlRGJsQ2xpY2spO1xuICAgICAgICBjdXJyZW50SGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJEb3duLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxpc3RlbmVyc0F0dGFjaGVkLnNldChjdXJyZW50SGFuZGxlKTtcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBpZiAodGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50VHJhbnNpdGlvbih0aGlzLmVsZW1lbnQoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnei1pbmRleCcsICcxJyk7XG4gICAgICB0aGlzLmVsZW1lbnRPcGFjaXR5LnNldChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCgpKS5vcGFjaXR5KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgY29uc3QgaGFuZGxlID0gdGhpcy5saXN0ZW5lcnNBdHRhY2hlZCgpO1xuICAgICAgaWYgKGhhbmRsZSkge1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLmJvdW5kSGFuZGxlRGJsQ2xpY2spO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlckRvd24pO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbG9uZUVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCAmJiB0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICB0aGlzLl9wYXJlbnREcm9wTGlzdC5jYW5jZWxTb3J0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbGVtZW50VHJhbnNpdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tcHJvcGVydHknLCAndHJhbnNmb3JtLCBvcGFjaXR5LCB0cmFuc2xhdGUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgZWxlbWVudCxcbiAgICAgICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgICAgIGB2YXIoLS1heC1zeXMtdHJhbnNpdGlvbi1kdXJhdGlvbiwke3RoaXMudHJhbnNpdGlvbkR1cmF0aW9uKCl9bXMpYCxcbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJywgJ3ZhcigtLWF4LXN5cy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiknKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRWxlbWVudFRyYW5zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICd0cmFuc2l0aW9uLXByb3BlcnR5JywgJ29wYWNpdHknKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlckRvd24oZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmF4RHJhZygpIHx8IHRoaXMuZHJhZ0Rpc2FibGVkKCkgfHwgZS5idXR0b24gIT09IDAgfHwgdGhpcy5fcGFyZW50RHJvcExpc3Q/LnNvcnRpbmdEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubW92ZWRBZnRlckRlbGF5LnNldChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdtb3ZlJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgJ21vdmUnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ0N1cnNvcigpID09PSAnZ3JhYicpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicsICdncmFiYmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldCh7IHg6IGUuY2xpZW50WCAtIHRoaXMuY3VycmVudEF4aXMoKS54LCB5OiBlLmNsaWVudFkgLSB0aGlzLmN1cnJlbnRBeGlzKCkueSB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGFuZGxlKCksICd1c2VyU2VsZWN0JywgJ25vbmUnKTtcbiAgICB0aGlzLmFjdGl2ZVBvaW50ZXJJZC5zZXQoZS5wb2ludGVySWQpO1xuICAgIHRoaXMuYWRkRG9jdW1lbnRMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuZHJhZ1N0YXJ0VGltZS5zZXQoRGF0ZS5ub3coKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURibENsaWNrKCkge1xuICAgIGlmICghdGhpcy5kcmFnUmVzZXRPbkRibENsaWNrKCkgfHwgdGhpcy5kcmFnRGlzYWJsZWQoKSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UG9zaXRpb24oMCwgMCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBvaW50ZXJNb3ZlKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkgfHwgIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgZS5wb2ludGVySWQgIT09IHRoaXMuYWN0aXZlUG9pbnRlcklkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuaXNNb3ZpbmcoKSkge1xuICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmRyYWdTdGFydERlbGF5KCkgPz8gMDtcbiAgICAgIC8vIEZJWDogRGVsYXkgbG9naWMgd2FzIGludmVydGVkXG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZSgpIDwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBTdGlsbCB3YWl0aW5nIGZvciBkZWxheVxuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTW92aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuaGFuZGxlKCkuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgfVxuXG4gICAgLy8gUnVuIHBvc2l0aW9uIHVwZGF0ZXMgb3V0c2lkZSBBbmd1bGFyIHpvbmUgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jcmVhdGVDbG9uZUVsZW1lbnQoKSkge1xuICAgICAgICBjb25zdCBuZXdDbG9uZVggPSBlLmNsaWVudFggLSB0aGlzLmNsb25lUG9pbnRlck9mZnNldCgpLng7XG4gICAgICAgIGNvbnN0IG5ld0Nsb25lWSA9IGUuY2xpZW50WSAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueTtcbiAgICAgICAgdGhpcy5zZXRDbG9uZVBvc2l0aW9uKG5ld0Nsb25lWCwgbmV3Q2xvbmVZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1ggPSBlLmNsaWVudFggLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLng7XG4gICAgICAgIGNvbnN0IG5ld1kgPSBlLmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLnk7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24obmV3WCwgbmV3WSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUaHJvdHRsZSBkcm9wIGxpc3QgaW50ZXJhY3Rpb25zIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgdGhpcy5wZW5kaW5nUG9pbnRlckV2ZW50ID0gZTtcbiAgICAgIGlmICh0aGlzLnJhZklkID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcExpc3RJbnRlcmFjdGlvbnModGhpcy5wZW5kaW5nUG9pbnRlckV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1BvaW50ZXJFdmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFmSWQgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wWm9uZUhvdmVySGFuZGxlcihlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHJhZyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICAvLyBBZGQgQ0RLLXN0eWxlIGNsYXNzZXNcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudCgpLCAnYXgtZHJhZ2dpbmcnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudCgpLCAnYXgtZHJhZy1wbGFjZWhvbGRlcicpO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICB0aGlzLl9jdXJyZW50RHJvcExpc3Quc2V0KHRoaXMuX3BhcmVudERyb3BMaXN0KTtcbiAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LnByZXBhcmVTb3J0KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3Bab25lSG92ZXJIYW5kbGVyKGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZUNsb25lRWxlbWVudCgpKSB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5jbG9uZVBvaW50ZXJPZmZzZXQuc2V0KHtcbiAgICAgICAgeDogZS5jbGllbnRYIC0gZWxlbWVudFJlY3QubGVmdCxcbiAgICAgICAgeTogZS5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbG9uZSA9IHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50SGFuZGxlcih0aGlzLmVsZW1lbnQoKSk7XG4gICAgICBpZiAoY2xvbmUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjbG9uZSwgJ2F4LWRyYWctcHJldmlldycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNsb25lLCAnYXgtZHJhZ2dpbmcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBvaW50ZXJVcChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoZS5wb2ludGVySWQgIT09IHRoaXMuYWN0aXZlUG9pbnRlcklkKCkgfHwgIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ0N1cnNvcigpID09PSAnZ3JhYicpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicsICdncmFiJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FzTW92aW5nID0gdGhpcy5pc01vdmluZygpO1xuICAgIHRoaXMuaXNNb3Zpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcuc2V0KGZhbHNlKTtcblxuICAgIC8vIFJlbW92ZSBDREstc3R5bGUgY2xhc3Nlc1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50KCksICdheC1kcmFnZ2luZycpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50KCksICdheC1kcmFnLXBsYWNlaG9sZGVyJyk7XG5cbiAgICBpZiAoIXdhc01vdmluZykge1xuICAgICAgdGhpcy5hY3RpdmVQb2ludGVySWQuc2V0KG51bGwpO1xuICAgICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgICAgdGhpcy5fY3VycmVudERyb3BMaXN0LnNldChudWxsKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5oYW5kbGUoKSwgJ3VzZXJTZWxlY3QnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2ZW50Q2xpY2tpbmcoKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuZWxlbWVudCgpLnN0eWxlLnRyYW5zZm9ybTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHggPSBOdW1iZXIodHJhbnNmb3JtLnNwbGl0KCd0cmFuc2xhdGVYKCcpWzFdPy5zcGxpdCgncHgpJylbMF0pO1xuICAgICAgeSA9IE51bWJlcih0cmFuc2Zvcm0uc3BsaXQoJ3RyYW5zbGF0ZVkoJylbMV0/LnNwbGl0KCdweCknKVswXSk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcHBlZEludG9MaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgaWYgKGRyb3BwZWRJbnRvTGlzdCAmJiB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgZHJvcHBlZEludG9MaXN0LmZpbmFsaXplU29ydChlLCB0aGlzLCB0aGlzLl9wYXJlbnREcm9wTGlzdCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgdGhpcy5fcGFyZW50RHJvcExpc3QuY2FuY2VsU29ydCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wWm9uZURyb3BIYW5kbGVyKGUpO1xuICAgIH1cblxuICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyBSQUYgY2FsbGJhY2tzXG4gICAgaWYgKHRoaXMucmFmSWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmSWQpO1xuICAgICAgdGhpcy5yYWZJZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1BvaW50ZXJFdmVudCA9IG51bGw7XG5cbiAgICB0aGlzLmFjdGl2ZVBvaW50ZXJJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wTGlzdC5zZXQobnVsbCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAndXNlclNlbGVjdCcpO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgIGNvbnN0IGxpc3RVbmRlclBvaW50ZXIgPSB0aGlzLmdldERyb3BMaXN0RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgIHRoaXMucmVtb3ZlQ2xvbmVFbGVtZW50V2l0aEFuaW1hdGlvbih4IHx8IDAsIHkgfHwgMCwgbGlzdFVuZGVyUG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50KCksICdvcGFjaXR5JywgdGhpcy5lbGVtZW50T3BhY2l0eSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnRDbGlja2luZygpIHtcbiAgICBjb25zdCBibG9ja0NsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmxvY2tDbGljaywgeyBjYXB0dXJlOiB0cnVlLCBvbmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wTGlzdEludGVyYWN0aW9ucyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgcHJldmlvdXNMaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgbGV0IHRhcmdldExpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBjYW5Ecm9wID0gbGlzdFVuZGVyUG9pbnRlciAmJiB0aGlzLmNhbkRyb3BJbkxpc3QobGlzdFVuZGVyUG9pbnRlcik7XG5cbiAgICBpZiAoY2FuRHJvcCkge1xuICAgICAgdGFyZ2V0TGlzdCA9IGxpc3RVbmRlclBvaW50ZXI7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnNvciBiYXNlZCBvbiB3aGV0aGVyIGRyb3AgaXMgYWxsb3dlZFxuICAgIGlmIChsaXN0VW5kZXJQb2ludGVyKSB7XG4gICAgICBjb25zdCBjbG9uZUVsID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgICBjb25zdCBjdXJzb3IgPSBjYW5Ecm9wID8gJ21vdmUnIDogJ25vdC1hbGxvd2VkJztcbiAgICAgIGlmIChjbG9uZUVsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVFbCwgJ2N1cnNvcicsIGN1cnNvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnY3Vyc29yJywgY3Vyc29yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0TGlzdCAhPT0gcHJldmlvdXNMaXN0KSB7XG4gICAgICBpZiAocHJldmlvdXNMaXN0KSB7XG4gICAgICAgIHByZXZpb3VzTGlzdC5jYW5jZWxTb3J0UHJldmlldygpO1xuICAgICAgICBpZiAocHJldmlvdXNMaXN0ICE9PSB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgICAgIHByZXZpb3VzTGlzdC5yZXNldFNvcnRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0TGlzdCkge1xuICAgICAgICB0YXJnZXRMaXN0LmVudGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudERyb3BMaXN0LnNldCh0YXJnZXRMaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RHJvcExpc3QoKT8uc29ydChlLCB0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuRHJvcEluTGlzdChsaXN0OiBBWERyb3BMaXN0RGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaXN0IHx8IGxpc3Quc29ydGluZ0Rpc2FibGVkKCkgfHwgIXRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChsaXN0ID09PSB0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRyYWdHcm91cCA9IHRoaXMuX3BhcmVudERyb3BMaXN0LmRyb3BMaXN0R3JvdXAoKTtcbiAgICBjb25zdCB0YXJnZXRHcm91cCA9IGxpc3QuZHJvcExpc3RHcm91cCgpO1xuXG4gICAgaWYgKCFkcmFnR3JvdXAgfHwgZHJhZ0dyb3VwICE9PSB0YXJnZXRHcm91cCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2UgKHRyZWUtc3BlY2lmaWMgdmFsaWRhdGlvbilcbiAgICBjb25zdCBkcmFnZ2VkTm9kZSA9IHRoaXMuZHJhZ0RhdGEoKTtcbiAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBsaXN0LmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW5vZGUtaWQnKTtcblxuICAgIGlmIChkcmFnZ2VkTm9kZSAmJiB0aGlzLmlzQ2lyY3VsYXJSZWZlcmVuY2UodGFyZ2V0Tm9kZUlkLCBkcmFnZ2VkTm9kZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDaXJjdWxhclJlZmVyZW5jZSh0YXJnZXROb2RlSWQ6IHN0cmluZyB8IG51bGwsIGRyYWdnZWROb2RlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcmFnZ2VkTm9kZSB8fCB0eXBlb2YgZHJhZ2dlZE5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGRyYWdnZWROb2RlIGFzIHsgaWQ/OiBzdHJpbmc7IGNoaWxkcmVuPzogdW5rbm93bltdIH07XG5cbiAgICAvLyBDaGVjayBpZiBkcm9wcGluZyBpbnRvIGl0c2VsZlxuICAgIGlmICh0YXJnZXROb2RlSWQgPT09IG5vZGUuaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRhcmdldE5vZGVJZCBpcyBpbiBkcmFnZ2VkTm9kZSdzIGRlc2NlbmRhbnRzXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuIHx8ICFBcnJheS5pc0FycmF5KG5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZCBhcyB7IGlkPzogc3RyaW5nIH07XG4gICAgICBpZiAoY2hpbGROb2RlLmlkID09PSB0YXJnZXROb2RlSWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0NpcmN1bGFyUmVmZXJlbmNlKHRhcmdldE5vZGVJZCwgY2hpbGQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVIb3ZlckhhbmRsZXIoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcFpvbmVzID0gdGhpcy5nZXREcm9wWm9uZXNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGNvbnN0IGRyb3Bab25lID0gZHJvcFpvbmVzWzBdO1xuXG4gICAgaWYgKCFkcm9wWm9uZSkge1xuICAgICAgaWYgKHRoaXMucHJldkRyb3Bab25lKCkpIHtcbiAgICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSAmJiB0aGlzLnByZXZEcm9wWm9uZSgpICE9PSBkcm9wWm9uZSkge1xuICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmUpICYmICFkcm9wWm9uZS5pc0hvdmVyZWQoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUuc2V0KGRyb3Bab25lKTtcbiAgICAgIGRyb3Bab25lLm9uRWxlbWVudEhvdmVyLmVtaXQoeyBzZW5kZXI6IGRyb3Bab25lLCBkcm9wcGVkOiB0aGlzLCBuYXRpdmVFdmVudDogZSwgc3RhdGU6ICdlbnRlcicgfSk7XG4gICAgICBkcm9wWm9uZS5pc0hvdmVyZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVEcm9wSGFuZGxlcihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wWm9uZXMgPSB0aGlzLmdldERyb3Bab25lc0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgZHJvcFpvbmUgPSBkcm9wWm9uZXNbMF07XG4gICAgaWYgKCF0aGlzLmRyb3Bab25lVmFsaWRhdGlvbihkcm9wWm9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJvcFpvbmUuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgZHJvcFpvbmUub25FbGVtZW50RHJvcC5lbWl0KHsgc2VuZGVyOiBkcm9wWm9uZSwgZHJvcHBlZDogdGhpcywgbmF0aXZlRXZlbnQ6IGUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERyb3Bab25lc0Zyb21Qb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEFYRHJvcFpvbmVEaXJlY3RpdmVbXSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAuZmlsdGVyKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnYXhEcm9wWm9uZSddID09PSAndHJ1ZScpXG4gICAgICAubWFwKChlbCkgPT4gZWxbJ19fYXhDb250ZXh0X18nXSBhcyBBWERyb3Bab25lRGlyZWN0aXZlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcExpc3RGcm9tUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBWERyb3BMaXN0RGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50cyA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludCh4LCB5KVxuICAgICAgLmZpbHRlcigoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ2F4RHJvcExpc3QnXSA9PT0gJ3RydWUnKTtcblxuICAgIGlmIChkcm9wTGlzdEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgZHJvcCBsaXN0LCB1c2UgaXRcbiAgICBpZiAoZHJvcExpc3RFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBkcm9wTGlzdEVsZW1lbnRzWzBdWydfX2F4Q29udGV4dF9fJ10gYXMgQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBNdWx0aXBsZSBkcm9wIGxpc3RzIGRldGVjdGVkIChuZXN0ZWQgc2NlbmFyaW8gbGlrZSB0cmVlMilcbiAgICAvLyBQcmlvcml0aXplIGJhc2VkIG9uIHBvaW50ZXIgcG9zaXRpb24gYW5kIGRyb3AgdHlwZVxuICAgIGNvbnN0IG9udG9Ob2RlTGlzdCA9IGRyb3BMaXN0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmRhdGFzZXRbJ2Ryb3BUeXBlJ10gPT09ICdvbnRvLW5vZGUnKTtcbiAgICBjb25zdCByZW9yZGVyTGlzdCA9IGRyb3BMaXN0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmRhdGFzZXRbJ2Ryb3BUeXBlJ10gIT09ICdvbnRvLW5vZGUnKTtcblxuICAgIC8vIElmIG5vIHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkLCByZXR1cm4gZmlyc3RcbiAgICBpZiAoIW9udG9Ob2RlTGlzdCB8fCAhcmVvcmRlckxpc3QpIHtcbiAgICAgIHJldHVybiBkcm9wTGlzdEVsZW1lbnRzWzBdWydfX2F4Q29udGV4dF9fJ10gYXMgQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgcG9pbnRlciBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgXCJvbnRvLW5vZGVcIiBlbGVtZW50XG4gICAgY29uc3Qgb250b05vZGVSZWN0ID0gb250b05vZGVMaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJlbGF0aXZlWSA9IHkgLSBvbnRvTm9kZVJlY3QudG9wO1xuICAgIGNvbnN0IGhlaWdodFJhdGlvID0gcmVsYXRpdmVZIC8gb250b05vZGVSZWN0LmhlaWdodDtcblxuICAgIC8vIFNtYXJ0IHpvbmUgZGV0ZWN0aW9uIGJhc2VkIG9uIHBvaW50ZXIgcG9zaXRpb25cbiAgICBpZiAoaGVpZ2h0UmF0aW8gPCBaT05FX1RPUF9USFJFU0hPTEQgfHwgaGVpZ2h0UmF0aW8gPiBaT05FX0JPVFRPTV9USFJFU0hPTEQpIHtcbiAgICAgIC8vIFRvcCBvciBib3R0b20gem9uZTogcmVvcmRlciAoZHJvcCBCRUZPUkUvQUZURVIgbm9kZSlcbiAgICAgIHJldHVybiByZW9yZGVyTGlzdFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENlbnRlciB6b25lOiBvbnRvLW5vZGUgKGRyb3AgSU5UTyBub2RlIGFzIGNoaWxkKVxuICAgICAgcmV0dXJuIG9udG9Ob2RlTGlzdFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmU6IEFYRHJvcFpvbmVEaXJlY3RpdmUpOiBib29sZWFuIHtcbiAgICBpZiAoIWRyb3Bab25lKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZHJhZ0dyb3VwID0gdGhpcy5kcm9wWm9uZUdyb3VwKCk7XG4gICAgY29uc3QgZHJvcEdyb3VwID0gZHJvcFpvbmUuZHJvcFpvbmVHcm91cCgpO1xuICAgIGlmIChkcm9wR3JvdXAgJiYgZHJhZ0dyb3VwICE9PSBkcm9wR3JvdXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGxlYXZlUHJldkRyb3Bab25lKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLnByZXZEcm9wWm9uZSgpKSB7XG4gICAgICB0aGlzLnByZXZEcm9wWm9uZSgpLm9uRWxlbWVudEhvdmVyLmVtaXQoe1xuICAgICAgICBkcm9wcGVkOiB0aGlzLFxuICAgICAgICBzdGF0ZTogJ2xlYXZlJyxcbiAgICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICAgIHNlbmRlcjogdGhpcy5wcmV2RHJvcFpvbmUoKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUoKS5pc0hvdmVyZWQuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucHJldkRyb3Bab25lLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGxldCBjb25zdHJhaW5lZFggPSB4O1xuICAgIGxldCBjb25zdHJhaW5lZFkgPSB5O1xuXG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSB0aGlzLmVsZW1lbnRSZWN0KCk7XG4gICAgY29uc3QgYm91bmRhcnlSZWN0ID0gdGhpcy5ib3VuZGFyeVJlY3QoKTtcblxuICAgIGlmIChib3VuZGFyeVJlY3QgJiYgZWxlbWVudFJlY3QpIHtcbiAgICAgIGNvbnN0IG1pblggPSBib3VuZGFyeVJlY3QubGVmdCAtIGVsZW1lbnRSZWN0LmxlZnQ7XG4gICAgICBjb25zdCBtaW5ZID0gYm91bmRhcnlSZWN0LnRvcCAtIGVsZW1lbnRSZWN0LnRvcDtcbiAgICAgIGNvbnN0IG1heFggPSBtaW5YICsgYm91bmRhcnlSZWN0LndpZHRoIC0gZWxlbWVudFJlY3Qud2lkdGg7XG4gICAgICBjb25zdCBtYXhZID0gbWluWSArIGJvdW5kYXJ5UmVjdC5oZWlnaHQgLSBlbGVtZW50UmVjdC5oZWlnaHQ7XG4gICAgICBjb25zdHJhaW5lZFggPSBjbGFtcCh4LCBtaW5YLCBtYXhYKTtcbiAgICAgIGNvbnN0cmFpbmVkWSA9IGNsYW1wKHksIG1pblksIG1heFkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneCcpIGNvbnN0cmFpbmVkWSA9IHRoaXMuY3VycmVudEF4aXMoKS55O1xuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneScpIGNvbnN0cmFpbmVkWCA9IHRoaXMuY3VycmVudEF4aXMoKS54O1xuXG4gICAgLy8gRGlyZWN0IERPTSBtYW5pcHVsYXRpb24gd2l0aG91dCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAndHJhbnNsYXRlJywgYCR7Y29uc3RyYWluZWRYfXB4ICR7Y29uc3RyYWluZWRZfXB4YCk7XG5cbiAgICAvLyBPbmx5IHVwZGF0ZSBzaWduYWwgYW5kIGVtaXQgaWYgcG9zaXRpb24gYWN0dWFsbHkgY2hhbmdlZCBzaWduaWZpY2FudGx5ICh0aHJvdHRsZSlcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50QXhpcygpO1xuICAgIGlmIChNYXRoLmFicyhjdXJyZW50LnggLSBjb25zdHJhaW5lZFgpID4gMC41IHx8IE1hdGguYWJzKGN1cnJlbnQueSAtIGNvbnN0cmFpbmVkWSkgPiAwLjUpIHtcbiAgICAgIHRoaXMuY3VycmVudEF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh7IHg6IGNvbnN0cmFpbmVkWCwgeTogY29uc3RyYWluZWRZIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldENsb25lUG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBsZXQgY29uc3RyYWluZWRYID0geDtcbiAgICBsZXQgY29uc3RyYWluZWRZID0geTtcblxuICAgIGNvbnN0IGNsb25lRWwgPSB0aGlzLmNsb25lZEVsZW1lbnQoKTtcbiAgICBjb25zdCBib3VuZGFyeVJlY3QgPSB0aGlzLmJvdW5kYXJ5UmVjdCgpO1xuXG4gICAgaWYgKGJvdW5kYXJ5UmVjdCAmJiBjbG9uZUVsKSB7XG4gICAgICBjb25zdCBjbG9uZVdpZHRoID0gY2xvbmVFbC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNsb25lSGVpZ2h0ID0gY2xvbmVFbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIGNvbnN0cmFpbmVkWCA9IGNsYW1wKHgsIGJvdW5kYXJ5UmVjdC5sZWZ0LCBib3VuZGFyeVJlY3QucmlnaHQgLSBjbG9uZVdpZHRoKTtcbiAgICAgIGNvbnN0cmFpbmVkWSA9IGNsYW1wKHksIGJvdW5kYXJ5UmVjdC50b3AsIGJvdW5kYXJ5UmVjdC5ib3R0b20gLSBjbG9uZUhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ0xvY2tBeGlzKCkgPT09ICd4JykgY29uc3RyYWluZWRZID0gdGhpcy5jdXJyZW50Q2xvbmVBeGlzKCkueTtcbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3knKSBjb25zdHJhaW5lZFggPSB0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKS54O1xuXG4gICAgLy8gRGlyZWN0IERPTSBtYW5pcHVsYXRpb24gd2l0aG91dCB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lRWwsICd0cmFuc2xhdGUnLCBgJHtjb25zdHJhaW5lZFh9cHggJHtjb25zdHJhaW5lZFl9cHhgKTtcblxuICAgIC8vIE9ubHkgdXBkYXRlIHNpZ25hbCBhbmQgZW1pdCBpZiBwb3NpdGlvbiBhY3R1YWxseSBjaGFuZ2VkIHNpZ25pZmljYW50bHkgKHRocm90dGxlKVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKTtcbiAgICBpZiAoTWF0aC5hYnMoY3VycmVudC54IC0gY29uc3RyYWluZWRYKSA+IDAuNSB8fCBNYXRoLmFicyhjdXJyZW50LnkgLSBjb25zdHJhaW5lZFkpID4gMC41KSB7XG4gICAgICB0aGlzLmN1cnJlbnRDbG9uZUF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh7IHg6IGNvbnN0cmFpbmVkWCwgeTogY29uc3RyYWluZWRZIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2xvbmVFbGVtZW50SGFuZGxlcihvcmlnaW5hbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudC5zZXQobnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgY2xvbmVkRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmRyYWdDbG9uZWRUZW1wbGF0ZSgpO1xuXG4gICAgY29uc3QgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZSA9IChzb3VyY2U6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc291cmNlKTtcblxuICAgICAgaWYgKGNvbXB1dGVkU3R5bGVzLmNzc1RleHQgJiYgdGFyZ2V0LnN0eWxlLmNzc1RleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGVtcENzc1RleHQgPSBjb21wdXRlZFN0eWxlcy5jc3NUZXh0O1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBjbG9uZWRFbGVtZW50KSB7XG4gICAgICAgICAgdGVtcENzc1RleHQgPSB0ZW1wQ3NzVGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoL3Bvc2l0aW9uOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvdG9wOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvbGVmdDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JpZ2h0OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvYm90dG9tOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvd2lkdGg6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9oZWlnaHQ6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9tYXJnaW5bXjtdKjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zaXRpb25bXjtdKjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zZm9ybTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RyYW5zbGF0ZTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3otaW5kZXg6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9vcGFjaXR5OlteO10rOy9naSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBDc3NUZXh0ID0gdGVtcENzc1RleHQucmVwbGFjZSgvcG9pbnRlci1ldmVudHM6W147XSs7L2dpLCAnJyk7XG4gICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gdGVtcENzc1RleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXB1dGVkU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBjb21wdXRlZFN0eWxlc1tpXTtcbiAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdwb2ludGVyLWV2ZW50cycpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQgPT09IGNsb25lZEVsZW1lbnQgJiZcbiAgICAgICAgICAgIChwcm9wTmFtZSA9PT0gJ3Bvc2l0aW9uJyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3RvcCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdsZWZ0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3JpZ2h0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ2JvdHRvbScgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd3aWR0aCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdoZWlnaHQnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lLnN0YXJ0c1dpdGgoJ21hcmdpbicpIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lLnN0YXJ0c1dpdGgoJ3RyYW5zaXRpb24nKSB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3RyYW5zZm9ybScgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0cmFuc2xhdGUnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnei1pbmRleCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdvcGFjaXR5JylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wTmFtZSksXG4gICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcE5hbWUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2Fubm90IGJlIHNldCBkaXJlY3RseSwgc2tpcCBzaWxlbnRseVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHNvdXJjZS5jaGlsZHJlbik7XG4gICAgICBjb25zdCB0YXJnZXRDaGlsZHJlbiA9IEFycmF5LmZyb20odGFyZ2V0LmNoaWxkcmVuKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNvdXJjZUNoaWxkcmVuW2ldIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0Q2hpbGRyZW5baV0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgIGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUoc291cmNlQ2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQsIHRhcmdldENoaWxkcmVuW2ldIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGN1c3RvbVRlbXBsYXRlKTtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYuc2V0KHZpZXdSZWYpO1xuXG4gICAgICBpZiAodmlld1JlZi5yb290Tm9kZXMubGVuZ3RoID4gMCAmJiB2aWV3UmVmLnJvb3ROb2Rlc1swXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNsb25lZEVsZW1lbnQgPSB2aWV3UmVmLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBjb25zdCB2aWV3SW5kZXggPSB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5kZXhPZih2aWV3UmVmKTtcbiAgICAgICAgaWYgKHZpZXdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuZGV0YWNoKHZpZXdJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkpIHtcbiAgICAgICAgICB0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYuc2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnQVhEcmFnRGlyZWN0aXZlOiBkcmFnQ2xvbmVkVGVtcGxhdGUgZGlkIG5vdCBwcm9kdWNlIGEgdmFsaWQgSFRNTEVsZW1lbnQgcm9vdCBub2RlLiBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBjbG9uaW5nLicsXG4gICAgICAgICk7XG4gICAgICAgIGNsb25lZEVsZW1lbnQgPSBvcmlnaW5hbEVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBhcHBseUNvbXB1dGVkU3R5bGVzUmVjdXJzaXZlKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb25lZEVsZW1lbnQgPSBvcmlnaW5hbEVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZShvcmlnaW5hbEVsZW1lbnQsIGNsb25lZEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChjbG9uZWRFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShjbG9uZWRFbGVtZW50LCAnaWQnKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcmlnaW5hbEVsZW1lbnQsICdvcGFjaXR5JywgJzAuNScpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxSZWN0ID0gb3JpZ2luYWxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ2xlZnQnLCAnMHB4Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndG9wJywgJzBweCcpO1xuICAgIGlmICghY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3dpZHRoJywgYCR7b3JpZ2luYWxSZWN0LndpZHRofXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdoZWlnaHQnLCBgJHtvcmlnaW5hbFJlY3QuaGVpZ2h0fXB4YCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ21hcmdpbicsICcwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnYm94LXNpemluZycsICdib3JkZXItYm94Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnb3BhY2l0eScsICcwLjc1Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnei1pbmRleCcsICc5OTknKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdwb2ludGVyLWV2ZW50cycsICdub25lJywgUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3VzZXItc2VsZWN0JywgJ25vbmUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd0b3VjaC1hY3Rpb24nLCAnbm9uZScpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndHJhbnNsYXRlJywgYCR7b3JpZ2luYWxSZWN0LmxlZnR9cHggJHtvcmlnaW5hbFJlY3QudG9wfXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjbG9uZWRFbGVtZW50LCAndHJhbnNpdGlvbicpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RyYW5zaXRpb24tcHJvcGVydHknKTtcblxuICAgIHRoaXMuY29weVBzZXVkb0VsZW1lbnRTdHlsZXMob3JpZ2luYWxFbGVtZW50LCBjbG9uZWRFbGVtZW50LCAnOjpiZWZvcmUnKTtcbiAgICB0aGlzLmNvcHlQc2V1ZG9FbGVtZW50U3R5bGVzKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCwgJzo6YWZ0ZXInKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCBjbG9uZWRFbGVtZW50KTtcbiAgICB0aGlzLmNsb25lZEVsZW1lbnQuc2V0KGNsb25lZEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0Q2xvbmVQb3NpdGlvbihvcmlnaW5hbFJlY3QubGVmdCwgb3JpZ2luYWxSZWN0LnRvcCk7XG5cbiAgICByZXR1cm4gY2xvbmVkRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVBzZXVkb0VsZW1lbnRTdHlsZXMoc291cmNlOiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgcHNldWRvOiAnOjpiZWZvcmUnIHwgJzo6YWZ0ZXInKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBzZXVkb1N0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNvdXJjZSwgcHNldWRvKTtcbiAgICBjb25zdCBjb250ZW50ID0gcHNldWRvU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gcHNldWRvU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKTtcbiAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudCA9PT0gJ25vbmUnIHx8IGRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwc2V1ZG9FbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwc2V1ZG9TdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gcHNldWRvU3R5bGVzW2ldO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHNldWRvRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICBwc2V1ZG9TdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wTmFtZSksXG4gICAgICAgICAgcHNldWRvU3R5bGVzLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcE5hbWUpLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTb21lIHByb3BlcnRpZXMgbWlnaHQgZmFpbCB0byBzZXQsIHdoaWNoIGlzIHVzdWFsbHkgZmluZS5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnXCInKSAmJiBjb250ZW50LmVuZHNXaXRoKCdcIicpKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHBzZXVkb0VsZW1lbnQsICd0ZXh0Q29udGVudCcsIGNvbnRlbnQuc2xpY2UoMSwgLTEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShwc2V1ZG9FbGVtZW50LCAndGV4dENvbnRlbnQnLCBjb250ZW50KTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwc2V1ZG9FbGVtZW50LCAncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuICAgIGlmIChwc2V1ZG8gPT09ICc6OmJlZm9yZScpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHRhcmdldCwgcHNldWRvRWxlbWVudCwgdGFyZ2V0LmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRhcmdldCwgcHNldWRvRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDbG9uZUVsZW1lbnRXaXRoQW5pbWF0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyLCBkcm9wTGlzdD86IEFYRHJvcExpc3REaXJlY3RpdmUpIHtcbiAgICBkcm9wTGlzdD8uX2RyYWdnYWJsZUl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVFbGVtZW50VHJhbnNpdGlvbihpdGVtLmVsZW1lbnQoKSk7XG4gICAgfSk7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lZEVsZW1lbnQoKTtcbiAgICBpZiAoIWNsb25lKSByZXR1cm47XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnb3BhY2l0eScsIHRoaXMuZWxlbWVudE9wYWNpdHkoKSk7XG5cbiAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChlbGVtZW50UmVjdCkge1xuICAgICAgdGhpcy5zZXRFbGVtZW50VHJhbnNpdGlvbihjbG9uZSk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lLCAnb3BhY2l0eScsICcwJyk7XG4gICAgICB0aGlzLnNldENsb25lUG9zaXRpb24oZWxlbWVudFJlY3QubGVmdCArIHgsIGVsZW1lbnRSZWN0LnRvcCArIHkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kcmFnVHJhbnNpdGlvbigpKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbG9uZUVsZW1lbnQoKTtcbiAgICAgICAgZHJvcExpc3Q/Ll9kcmFnZ2FibGVJdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICB0aGlzLnNldEVsZW1lbnRUcmFuc2l0aW9uKGl0ZW0uZWxlbWVudCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbigpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNsb25lRWxlbWVudCgpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgaWYgKGNsb25lPy5wYXJlbnROb2RlKSB7XG4gICAgICAvLyBSZW1vdmUgY2xhc3NlcyBiZWZvcmUgcmVtb3ZpbmcgZWxlbWVudFxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhjbG9uZSwgJ2F4LWRyYWctcHJldmlldycpO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhjbG9uZSwgJ2F4LWRyYWdnaW5nJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGNsb25lLnBhcmVudE5vZGUsIGNsb25lKTtcbiAgICB9XG4gICAgdGhpcy5jbG9uZWRFbGVtZW50LnNldChudWxsKTtcblxuICAgIGlmICh0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkpIHtcbiAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmLnNldChudWxsKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERvY3VtZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJNb3ZlLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyVXApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEb2N1bWVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyTW92ZSk7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyVXApO1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJVcCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","import { NXComponent } from '@acorex/cdk/common';\nimport { Directive, input, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXDropZoneDirective extends NXComponent {\n constructor() {\n super(...arguments);\n this.dropZoneGroup = input(...(ngDevMode ? [undefined, { debugName: \"dropZoneGroup\" }] : []));\n this.isHovered = signal(false, ...(ngDevMode ? [{ debugName: \"isHovered\" }] : []));\n this.element = signal(this.nativeElement, ...(ngDevMode ? [{ debugName: \"element\" }] : []));\n this.onElementDrop = output();\n this.onElementHover = output();\n }\n ngOnInit() {\n this.element().dataset['axDropZone'] = 'true';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.15\", type: AXDropZoneDirective, isStandalone: true, selector: \"[axDropZone]\", inputs: { dropZoneGroup: { classPropertyName: \"dropZoneGroup\", publicName: \"dropZoneGroup\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onElementDrop: \"onElementDrop\", onElementHover: \"onElementHover\" }, exportAs: [\"axDropZone\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDropZoneDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropZone]',\n exportAs: 'axDropZone',\n }]\n }], propDecorators: { dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dropZoneGroup\", required: false }] }], onElementDrop: [{ type: i0.Output, args: [\"onElementDrop\"] }], onElementHover: [{ type: i0.Output, args: [\"onElementHover\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZekUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS0Usa0JBQWEsR0FBRyxLQUFLLG1FQUFVLENBQUM7UUFFaEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLHFEQUFDLENBQUM7UUFDakIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxtREFBQyxDQUFDO1FBRTlDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxFQUF3QixDQUFDO0tBS2pEO0lBSEMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7K0dBWFUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRHJvcFpvbmVEcm9wRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYRHJvcFpvbmVEaXJlY3RpdmUsIE1vdXNlRXZlbnQ+IHtcbiAgZHJvcHBlZDogQVhEcmFnRGlyZWN0aXZlO1xufVxuZXhwb3J0IHR5cGUgQVhEcm9wWm9uZUhvdmVyRXZlbnQgPSBBWERyb3Bab25lRHJvcEV2ZW50ICYgeyBzdGF0ZTogJ2VudGVyJyB8ICdsZWF2ZScgfTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcFpvbmVdJyxcbiAgZXhwb3J0QXM6ICdheERyb3Bab25lJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wWm9uZURpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcblxuICBpc0hvdmVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgb25FbGVtZW50RHJvcCA9IG91dHB1dDxBWERyb3Bab25lRHJvcEV2ZW50PigpO1xuICBvbkVsZW1lbnRIb3ZlciA9IG91dHB1dDxBWERyb3Bab25lSG92ZXJFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQoKS5kYXRhc2V0WydheERyb3Bab25lJ10gPSAndHJ1ZSc7XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDragDirective } from './drag.directive';\nimport { AXDropListDirective } from './drop-list.directive';\nimport { AXDropZoneDirective } from './drop-zone.directive';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective];\nexport class AXDragDropModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXDragDropModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcmFnLWRyb3AubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCxNQUFNLFNBQVMsR0FBRyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBT3JHLE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjtnSEFBaEIsZ0JBQWdCLFlBUFYsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixhQUFoRixlQUFlLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CO2dIQU90RixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBTDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUN2QixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcExpc3REaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3AtbGlzdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcC16b25lLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtBWERyYWdEaXJlY3RpdmUsIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSwgQVhEcm9wTGlzdERpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZV07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcmFnRHJvcE1vZHVsZSB7fVxuIl19","import { clamp } from 'lodash-es';\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nexport function moveItemInArray(array, fromIndex, toIndex) {\n const from = clamp(fromIndex, array.length - 1);\n const to = clamp(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n const target = array[from];\n const delta = to < from ? -1 : 1;\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nexport function transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const from = clamp(currentIndex, currentArray.length - 1);\n const to = clamp(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctZHJvcC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBVSxLQUFVLEVBQUUsU0FBaUIsRUFBRSxPQUFlO0lBQ3JGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFNUMsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDaEIsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixZQUFpQixFQUNqQixXQUFnQixFQUNoQixZQUFvQixFQUNwQixXQUFtQjtJQUVuQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEQsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGFtcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8qKlxuICogTW92ZXMgYW4gaXRlbSBvbmUgaW5kZXggaW4gYW4gYXJyYXkgdG8gYW5vdGhlci5cbiAqIEBwYXJhbSBhcnJheSBBcnJheSBpbiB3aGljaCB0byBtb3ZlIHRoZSBpdGVtLlxuICogQHBhcmFtIGZyb21JbmRleCBTdGFydGluZyBpbmRleCBvZiB0aGUgaXRlbS5cbiAqIEBwYXJhbSB0b0luZGV4IEluZGV4IHRvIHdoaWNoIHRoZSBpdGVtIHNob3VsZCBiZSBtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmVJdGVtSW5BcnJheTxUID0gYW55PihhcnJheTogVFtdLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGZyb20gPSBjbGFtcChmcm9tSW5kZXgsIGFycmF5Lmxlbmd0aCAtIDEpO1xuICBjb25zdCB0byA9IGNsYW1wKHRvSW5kZXgsIGFycmF5Lmxlbmd0aCAtIDEpO1xuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IGFycmF5W2Zyb21dO1xuICBjb25zdCBkZWx0YSA9IHRvIDwgZnJvbSA/IC0xIDogMTtcblxuICBmb3IgKGxldCBpID0gZnJvbTsgaSAhPT0gdG87IGkgKz0gZGVsdGEpIHtcbiAgICBhcnJheVtpXSA9IGFycmF5W2kgKyBkZWx0YV07XG4gIH1cblxuICBhcnJheVt0b10gPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogTW92ZXMgYW4gaXRlbSBmcm9tIG9uZSBhcnJheSB0byBhbm90aGVyLlxuICogQHBhcmFtIGN1cnJlbnRBcnJheSBBcnJheSBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyIHRoZSBpdGVtLlxuICogQHBhcmFtIHRhcmdldEFycmF5IEFycmF5IGludG8gd2hpY2ggdG8gcHV0IHRoZSBpdGVtLlxuICogQHBhcmFtIGN1cnJlbnRJbmRleCBJbmRleCBvZiB0aGUgaXRlbSBpbiBpdHMgY3VycmVudCBhcnJheS5cbiAqIEBwYXJhbSB0YXJnZXRJbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGl0ZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2ZlckFycmF5SXRlbTxUID0gYW55PihcbiAgY3VycmVudEFycmF5OiBUW10sXG4gIHRhcmdldEFycmF5OiBUW10sXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICB0YXJnZXRJbmRleDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGNvbnN0IGZyb20gPSBjbGFtcChjdXJyZW50SW5kZXgsIGN1cnJlbnRBcnJheS5sZW5ndGggLSAxKTtcbiAgY29uc3QgdG8gPSBjbGFtcCh0YXJnZXRJbmRleCwgdGFyZ2V0QXJyYXkubGVuZ3RoKTtcblxuICBpZiAoY3VycmVudEFycmF5Lmxlbmd0aCkge1xuICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1kcmFnLWRyb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9hY29yZXgtY2RrLWRyYWctZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|