@acorex/cdk 20.1.4 → 20.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -471,10 +471,10 @@ class AXDragDirective {
471
471
  return;
472
472
  this.isDragging.set(true);
473
473
  if (this.dragCursor() === 'move') {
474
- this.renderer.setStyle(this.document.body, 'cursor', 'move');
474
+ this.renderer.setStyle(this.handle(), 'cursor', 'move');
475
475
  }
476
476
  else if (this.dragCursor() === 'grab') {
477
- this.renderer.setStyle(this.document.body, 'cursor', 'grabbing');
477
+ this.renderer.setStyle(this.handle(), 'cursor', 'grabbing');
478
478
  }
479
479
  e.stopPropagation();
480
480
  this.dragStartOffset.set({ x: e.clientX - this.currentAxis().x, y: e.clientY - this.currentAxis().y });
@@ -523,7 +523,9 @@ class AXDragDirective {
523
523
  return;
524
524
  if (!this.isDragging())
525
525
  return;
526
- this.renderer.removeStyle(this.document.body, 'cursor');
526
+ if (this.dragCursor() === 'grab') {
527
+ this.renderer.setStyle(this.handle(), 'cursor', 'grab');
528
+ }
527
529
  const wasMoving = this.isMoving();
528
530
  this.isDragging.set(false);
529
531
  if (wasMoving) {
@@ -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);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: AXDragHandleDirective, isStandalone: true, selector: \"[axDragHandle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDragHandle]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1oYW5kbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSVUsT0FBRSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDaEQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xEOzhHQUhZLHFCQUFxQjtrR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcmFnSGFuZGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG59XG4iXX0=","import { NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectorRef, contentChildren, Directive, ElementRef, inject, input, NgZone, output, 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._hostEl = inject(ElementRef);\n // --- Public API: Inputs and Outputs ---\n /** Whether sorting within this list is disabled. */\n this.sortingDisabled = input(false);\n /** The group this drop list belongs to. Dragging is only allowed between lists of the same group. */\n this.dropListGroup = input();\n /** The layout orientation of the list. */\n this.dropListOrientation = input('vertical');\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, { 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);\n /** The calculated index where the placeholder/item should be. */\n this._placeholderIndex = signal(-1);\n /** A snapshot of the items' data and geometry at the start of the drag. */\n this._cachedItems = signal([]);\n /** The list's initial bounding box, used to calculate scroll delta. */\n this._listInitialRect = signal(null);\n /** The detected `gap` of the list for the current orientation. */\n this._listGap = signal(0);\n /** A signal-based alias for the orientation input for internal use. */\n this._orientation = this.dropListOrientation;\n }\n ngOnInit() {\n this.element.dataset['axDropList'] = 'true';\n this.element.classList.add('ax-drop-list-sorting-transition');\n }\n ngAfterContentInit() {\n this._cdr.detectChanges();\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.sortingDisabled() || this._activeDragItem())\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.sortingDisabled() || this.isDragActiveForThisList(dragItem))\n return;\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.isDragActiveForThisList(dragItem) || this.sortingDisabled() || !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.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 const siblings = this._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 const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n // Map the index from the 'siblings' array back to the original `_cachedItems` array.\n return originalIndex > -1 && newIndexInSiblings >= originalIndex ? newIndexInSiblings + 1 : newIndexInSiblings;\n }\n /** Applies `transform` styles to all items to create the visual sorting effect. */\n _applyVisualShifts() {\n const activeItem = this._activeDragItem();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n const isIntraListDrag = originalIndex > -1;\n // A helper to get the total space an item occupies (size + margins).\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 let draggedItemSize = 0;\n if (isIntraListDrag) {\n draggedItemSize = getItemSpace(this._cachedItems()[originalIndex]);\n }\n else {\n const rect = activeItem.elementRect();\n if (rect) {\n const style = window.getComputedStyle(activeItem.element());\n draggedItemSize =\n this._orientation() === 'vertical'\n ? rect.height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n : rect.width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n }\n this._cachedItems().forEach((data, index) => {\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 * 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 }\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.0.4\", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXDropListDirective, isStandalone: true, selector: \"[axDropList]\", inputs: { 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.0.4\", ngImport: i0, type: AXDropListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropList]',\n exportAs: 'axDropList',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1saXN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLWxpc3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBcUJuRDs7Ozs7Ozs7O0dBU0c7QUFLSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQUpwRDs7UUFLbUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUV2RSx5Q0FBeUM7UUFFekMsb0RBQW9EO1FBQ3BELG9CQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLHFHQUFxRztRQUNyRyxrQkFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ2hDLDBDQUEwQztRQUMxQyx3QkFBbUIsR0FBRyxLQUFLLENBQTRCLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLG1EQUFtRDtRQUNuRCxvQkFBZSxHQUFHLE1BQU0sRUFBMEIsQ0FBQztRQUVuRCxxRUFBcUU7UUFDNUQsb0JBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtB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QUFDLENBQUMsQ0FBQztJQUN2QixDQUFDOzhHQS9WVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw2bUJBa0JhLGVBQWU7OzJGQWxCL0MsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsWUFBWTtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOWENvbXBvbmVudCwgTlhOYXRpdmVFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgY29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG4vKiogRGVzY3JpYmVzIHRoZSBjYWNoZWQgZ2VvbWV0cmljIGRhdGEgb2YgYSBkcmFnZ2FibGUgaXRlbSB3aXRoaW4gdGhlIGxpc3QuICovXG5pbnRlcmZhY2UgRHJvcExpc3RJdGVtRGF0YSB7XG4gIGl0ZW06IEFYRHJhZ0RpcmVjdGl2ZTtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluaXRpYWxSZWN0OiBET01SZWN0O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWFyZ2luczogeyB0b3A6IG51bWJlcjsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgcmlnaHQ6IG51bWJlciB9O1xufVxuXG4vKiogRXZlbnQgb2JqZWN0IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW50byBhIGRyb3AgbGlzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhEcm9wTGlzdERyb3BwZWRFdmVudCBleHRlbmRzIE5YTmF0aXZlRXZlbnQ8QVhEcm9wTGlzdERpcmVjdGl2ZSwgTW91c2VFdmVudD4ge1xuICBpdGVtOiBBWERyYWdEaXJlY3RpdmU7XG4gIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gIGNvbnRhaW5lcjogQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgcHJldmlvdXNDb250YWluZXI6IEFYRHJvcExpc3REaXJlY3RpdmU7XG59XG5cbi8qKlxuICogQERpcmVjdGl2ZSBheERyb3BMaXN0XG4gKlxuICogTWFuYWdlcyBhIGxpc3Qgb2YgZHJhZ2dhYmxlIGl0ZW1zIChgYXhEcmFnYCksIGVuYWJsaW5nIHNvcnRpbmcgd2l0aGluIHRoZSBsaXN0XG4gKiBhbmQgdHJhbnNmZXJyaW5nIGl0ZW1zIGJldHdlZW4gY29tcGF0aWJsZSBsaXN0cy4gSXQgaGFuZGxlcyB0aGUgdmlzdWFsIHNoaWZ0aW5nXG4gKiBvZiBpdGVtcyBkdXJpbmcgYSBkcmFnIG9wZXJhdGlvbiB0byBwcm92aWRlIGEgY2xlYXIgcHJldmlldyBvZiB0aGUgZHJvcCBsb2NhdGlvbi5cbiAqXG4gKiBUaGlzIGRpcmVjdGl2ZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYGdhcGAgZnJvbSBmbGV4Ym94L2dyaWQgbGF5b3V0cyBhbmQgaGFuZGxlc1xuICogaXRlbXMgd2l0aCB2YXJpYWJsZSBzaXplcyBhbmQgbWFyZ2lucy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcExpc3RdJyxcbiAgZXhwb3J0QXM6ICdheERyb3BMaXN0Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wTGlzdERpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0RWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8vIC0tLSBQdWJsaWMgQVBJOiBJbnB1dHMgYW5kIE91dHB1dHMgLS0tXG5cbiAgLyoqIFdoZXRoZXIgc29ydGluZyB3aXRoaW4gdGhpcyBsaXN0IGlzIGRpc2FibGVkLiAqL1xuICBzb3J0aW5nRGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBUaGUgZ3JvdXAgdGhpcyBkcm9wIGxpc3QgYmVsb25ncyB0by4gRHJhZ2dpbmcgaXMgb25seSBhbGxvd2VkIGJldHdlZW4gbGlzdHMgb2YgdGhlIHNhbWUgZ3JvdXAuICovXG4gIGRyb3BMaXN0R3JvdXAgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKiBUaGUgbGF5b3V0IG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0LiAqL1xuICBkcm9wTGlzdE9yaWVudGF0aW9uID0gaW5wdXQ8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ3ZlcnRpY2FsJyk7XG4gIC8qKiBFbWl0cyB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbnRvIHRoZSBsaXN0LiAqL1xuICBkcm9wTGlzdERyb3BwZWQgPSBvdXRwdXQ8QVhEcm9wTGlzdERyb3BwZWRFdmVudD4oKTtcblxuICAvKiogVGhlIGBheERyYWdgIGRpcmVjdGl2ZXMgdGhhdCBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgbGlzdC4gKi9cbiAgcmVhZG9ubHkgX2RyYWdnYWJsZUl0ZW1zID0gY29udGVudENoaWxkcmVuKEFYRHJhZ0RpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSk7XG5cbiAgLy8gLS0tIEludGVybmFsIFN0YXRlIE1hbmFnZW1lbnQgLS0tXG5cbiAgLyoqIFRoZSBuYXRpdmUgZWxlbWVudCBvZiB0aGUgZHJvcCBsaXN0LiAqL1xuICByZWFkb25seSBlbGVtZW50ID0gdGhpcy5faG9zdEVsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgLyoqIFRoZSBkcmFnZ2FibGUgaXRlbSBjdXJyZW50bHkgYmVpbmcgbW92ZWQgb3ZlciB0aGlzIGxpc3QuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZURyYWdJdGVtID0gc2lnbmFsPEFYRHJhZ0RpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW5kZXggd2hlcmUgdGhlIHBsYWNlaG9sZGVyL2l0ZW0gc2hvdWxkIGJlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGFjZWhvbGRlckluZGV4ID0gc2lnbmFsKC0xKTtcbiAgLyoqIEEgc25hcHNob3Qgb2YgdGhlIGl0ZW1zJyBkYXRhIGFuZCBnZW9tZXRyeSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRyYWcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlZEl0ZW1zID0gc2lnbmFsPHJlYWRvbmx5IERyb3BMaXN0SXRlbURhdGFbXT4oW10pO1xuICAvKiogVGhlIGxpc3QncyBpbml0aWFsIGJvdW5kaW5nIGJveCwgdXNlZCB0byBjYWxjdWxhdGUgc2Nyb2xsIGRlbHRhLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0SW5pdGlhbFJlY3QgPSBzaWduYWw8RE9NUmVjdCB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIGRldGVjdGVkIGBnYXBgIG9mIHRoZSBsaXN0IGZvciB0aGUgY3VycmVudCBvcmllbnRhdGlvbi4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdEdhcCA9IHNpZ25hbCgwKTtcblxuICAvKiogQSBzaWduYWwtYmFzZWQgYWxpYXMgZm9yIHRoZSBvcmllbnRhdGlvbiBpbnB1dCBmb3IgaW50ZXJuYWwgdXNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9IHRoaXMuZHJvcExpc3RPcmllbnRhdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuZGF0YXNldFsnYXhEcm9wTGlzdCddID0gJ3RydWUnO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy10cmFuc2l0aW9uJyk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBQdWJsaWMgTWV0aG9kcyAoZm9yIGludGVybmFsIGxpYnJhcnkgdXNlKSAtLS1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBnaXZlbiBkcmFnIGl0ZW0gaXMgdGhlIG9uZSBjdXJyZW50bHkgYWN0aXZlIGluIHRoaXMgbGlzdC4gKi9cbiAgaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW06IEFYRHJhZ0RpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpID09PSBkcmFnSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBmb3Igc29ydGluZyB3aGVuIGEgZHJhZyBvcGVyYXRpb24gc3RhcnRzIGZyb20gd2l0aGluIHRoaXMgbGlzdC5cbiAgICogQHBhcmFtIGRyYWdJdGVtIFRoZSBpdGVtIHRoYXQgaXMgYmVpbmcgZHJhZ2dlZC5cbiAgICovXG4gIHByZXBhcmVTb3J0KGRyYWdJdGVtOiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nRGlzYWJsZWQoKSB8fCB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlR2VvbWV0cnkoKTtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZHggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZGF0YSkgPT4gZGF0YS5pdGVtID09PSBkcmFnSXRlbSk7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KHBsYWNlaG9sZGVySWR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciByZWNlaXZpbmcgYW4gaXRlbSB0aGF0IHN0YXJ0ZWQgZHJhZ2dpbmcgZnJvbSBhbm90aGVyIGxpc3QuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBlbnRlcmluZyB0aGlzIGxpc3QuXG4gICAqL1xuICBlbnRlcihkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHwgdGhpcy5pc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbSkpIHJldHVybjtcblxuICAgIHRoaXMuX2FjdGl2ZURyYWdJdGVtLnNldChkcmFnSXRlbSk7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWRyb3AtbGlzdC1zb3J0aW5nLWFjdGl2ZScpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLl9jYWNoZUdlb21ldHJ5KCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBuZXcgcGxhY2Vob2xkZXIgaW5kZXggYmFzZWQgb24gdGhlIHBvaW50ZXIncyBwb3NpdGlvbiBhbmQgYXBwbGllcyB2aXN1YWwgc2hpZnRzLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBvaW50ZXIgbW92ZSBldmVudC5cbiAgICogQHBhcmFtIGRyYWdJdGVtIFRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXG4gICAqL1xuICBzb3J0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGRyYWdJdGVtOiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHwgIXRoaXMuX2xpc3RJbml0aWFsUmVjdCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBwb2ludGVyUG9zaXRpb24gPSB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gZXZlbnQuY2xpZW50WSA6IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgbmV3UGxhY2Vob2xkZXJJbmRleCA9IHRoaXMuX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uKTtcblxuICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlckluZGV4KCkgIT09IG5ld1BsYWNlaG9sZGVySW5kZXgpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KG5ld1BsYWNlaG9sZGVySW5kZXgpO1xuICAgICAgdGhpcy5fYXBwbHlWaXN1YWxTaGlmdHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluYWxpemVzIHRoZSBkcm9wLCBlbWl0cyB0aGUgZHJvcCBldmVudCwgYW5kIHJlc2V0cyB0aGUgbGlzdCdzIHN0YXRlLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBvaW50ZXIgdXAgZXZlbnQuXG4gICAqIEBwYXJhbSBkcm9wcGVkSXRlbSBUaGUgaXRlbSB0aGF0IHdhcyBkcm9wcGVkLlxuICAgKiBAcGFyYW0gc291cmNlTGlzdCBUaGUgbGlzdCB3aGVyZSB0aGUgZHJhZyBvcmlnaW5hdGVkLlxuICAgKi9cbiAgZmluYWxpemVTb3J0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGRyb3BwZWRJdGVtOiBBWERyYWdEaXJlY3RpdmUsIHNvdXJjZUxpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJvcHBlZEl0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVzZXRTb3J0U3RhdGVBbmRTdHlsZXMoc291cmNlTGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGlmICghYWN0aXZlSXRlbSB8fCB0YXJnZXRTbG90SW5kZXggPT09IC0xKSB7XG4gICAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBzb3VyY2VMaXN0Ll9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBBZGp1c3QgdGhlIGluZGV4IGZvciBhcnJheSBtdXRhdGlvbiBpZiBtb3ZpbmcgYW4gaXRlbSB0byBhIGxhdGVyIHBvc2l0aW9uIGluIHRoZSBzYW1lIGxpc3QuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID1cbiAgICAgIHNvdXJjZUxpc3QgPT09IHRoaXMgJiYgcHJldmlvdXNJbmRleCAhPT0gLTEgJiYgdGFyZ2V0U2xvdEluZGV4ID4gcHJldmlvdXNJbmRleFxuICAgICAgICA/IHRhcmdldFNsb3RJbmRleCAtIDFcbiAgICAgICAgOiB0YXJnZXRTbG90SW5kZXg7XG5cbiAgICB0aGlzLmRyb3BMaXN0RHJvcHBlZC5lbWl0KHtcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIGl0ZW06IGFjdGl2ZUl0ZW0sXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY29udGFpbmVyOiB0aGlzLFxuICAgICAgcHJldmlvdXNDb250YWluZXI6IHNvdXJjZUxpc3QsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgdHJhbnNmb3JtcyBvbiBhbGwgaXRlbXMgYW5kIGNhbmNlbHMgdGhlIGN1cnJlbnQgc29ydCBvcGVyYXRpb24uICovXG4gIGNhbmNlbFNvcnQoZHJhZ0l0ZW0/OiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoZHJhZ0l0ZW0gJiYgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG4gICAgdGhpcy5fcmVzZXRBbGxUcmFuc2Zvcm1zKCk7XG4gICAgdGhpcy5yZXNldFNvcnRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0cmFuc2Zvcm1zIGJ1dCBrZWVwcyB0aGUgYWN0aXZlIHN0YXRlLCB1c2VkIHdoZW4gbW92aW5nIGJldHdlZW4gbGlzdHMuICovXG4gIGNhbmNlbFNvcnRQcmV2aWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKSkgcmV0dXJuO1xuICAgIHRoaXMuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKTtcbiAgICB0aGlzLl9wbGFjZWhvbGRlckluZGV4LnNldChvcmlnaW5hbEluZGV4ID4gLTEgPyBvcmlnaW5hbEluZGV4IDogLTEpO1xuICB9XG5cbiAgLy8gLS0tIFByaXZhdGUgSGVscGVyIE1ldGhvZHMgLS0tXG5cbiAgLyoqIENhY2hlcyB0aGUgZ2VvbWV0cnkgb2YgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBkcmFnLiAqL1xuICBwcml2YXRlIF9jYWNoZUdlb21ldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQodGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLl9kZXRlY3RBbmRDYWNoZUxpc3RHYXAoKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZHJhZ2dhYmxlSXRlbXMoKS5tYXAoKGl0ZW1EcmFnZ2FibGUpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbURyYWdnYWJsZS5lbGVtZW50KCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW06IGl0ZW1EcmFnZ2FibGUsXG4gICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICBpbml0aWFsUmVjdDogcmVjdCxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIG1hcmdpbnM6IHtcbiAgICAgICAgICB0b3A6IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wKSxcbiAgICAgICAgICBib3R0b206IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKSxcbiAgICAgICAgICBsZWZ0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpLFxuICAgICAgICAgIHJpZ2h0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblJpZ2h0KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMuc2V0KGl0ZW1zKTtcbiAgfVxuXG4gIC8qKiBEZXRlY3RzIGFuZCBjYWNoZXMgdGhlIGBnYXBgIHByb3BlcnR5IGZyb20gdGhlIGxpc3QncyBjb21wdXRlZCBzdHlsZXMuICovXG4gIHByaXZhdGUgX2RldGVjdEFuZENhY2hlTGlzdEdhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpO1xuICAgIGNvbnN0IGdhcFZhbHVlID0gbGlzdFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2dhcCcpO1xuICAgIGlmIChnYXBWYWx1ZSAmJiBnYXBWYWx1ZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgIGNvbnN0IGdhcFBhcnRzID0gZ2FwVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IHJvd0dhcCA9IHBhcnNlRmxvYXQoZ2FwUGFydHNbMF0pO1xuICAgICAgY29uc3QgY29sdW1uR2FwID0gcGFyc2VGbG9hdChnYXBQYXJ0c1sxXSB8fCBnYXBQYXJ0c1swXSk7XG4gICAgICB0aGlzLl9saXN0R2FwLnNldCh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gcm93R2FwIDogY29sdW1uR2FwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5ldyBwbGFjZWhvbGRlciBpbmRleCBieSBjb21wYXJpbmcgdGhlIHBvaW50ZXIgcG9zaXRpb24gYWdhaW5zdCB0aGVcbiAgICogbWlkcG9pbnRzIG9mIHRoZSBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHBvaW50ZXJQb3NpdGlvbiBUaGUgY2xpZW50WCBvciBjbGllbnRZIG9mIHRoZSBwb2ludGVyLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBwbGFjZWhvbGRlciBpbmRleC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpO1xuICAgIGNvbnN0IGxpc3RSZWN0ID0gdGhpcy5fbGlzdEluaXRpYWxSZWN0KCk7XG4gICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbHRlcigoZCkgPT4gZC5pdGVtICE9PSBhY3RpdmVJdGVtKTtcbiAgICBjb25zdCBzY3JvbGxEZWx0YSA9XG4gICAgICB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnXG4gICAgICAgID8gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGxpc3RSZWN0LnRvcFxuICAgICAgICA6IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbGlzdFJlY3QubGVmdDtcblxuICAgIGxldCBuZXdJbmRleEluU2libGluZ3MgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgICBjb25zdCBpdGVtTWlkUG9pbnQgPVxuICAgICAgICAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJyA/IHNpYmxpbmcuaW5pdGlhbFJlY3QudG9wIDogc2libGluZy5pbml0aWFsUmVjdC5sZWZ0KSArXG4gICAgICAgIHNjcm9sbERlbHRhICtcbiAgICAgICAgKHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBzaWJsaW5nLmhlaWdodCA6IHNpYmxpbmcud2lkdGgpIC8gMjtcblxuICAgICAgaWYgKHBvaW50ZXJQb3NpdGlvbiA8IGl0ZW1NaWRQb2ludCkge1xuICAgICAgICBuZXdJbmRleEluU2libGluZ3MgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3SW5kZXhJblNpYmxpbmdzID09PSAtMSkge1xuICAgICAgbmV3SW5kZXhJblNpYmxpbmdzID0gc2libGluZ3MubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBNYXAgdGhlIGluZGV4IGZyb20gdGhlICdzaWJsaW5ncycgYXJyYXkgYmFjayB0byB0aGUgb3JpZ2luYWwgYF9jYWNoZWRJdGVtc2AgYXJyYXkuXG4gICAgcmV0dXJuIG9yaWdpbmFsSW5kZXggPiAtMSAmJiBuZXdJbmRleEluU2libGluZ3MgPj0gb3JpZ2luYWxJbmRleCA/IG5ld0luZGV4SW5TaWJsaW5ncyArIDEgOiBuZXdJbmRleEluU2libGluZ3M7XG4gIH1cblxuICAvKiogQXBwbGllcyBgdHJhbnNmb3JtYCBzdHlsZXMgdG8gYWxsIGl0ZW1zIHRvIGNyZWF0ZSB0aGUgdmlzdWFsIHNvcnRpbmcgZWZmZWN0LiAqL1xuICBwcml2YXRlIF9hcHBseVZpc3VhbFNoaWZ0cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKTtcbiAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0gdGhpcy5fY2FjaGVkSXRlbXMoKS5maW5kSW5kZXgoKGQpID0+IGQuaXRlbSA9PT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3QgaXNJbnRyYUxpc3REcmFnID0gb3JpZ2luYWxJbmRleCA+IC0xO1xuXG4gICAgLy8gQSBoZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBzcGFjZSBhbiBpdGVtIG9jY3VwaWVzIChzaXplICsgbWFyZ2lucykuXG4gICAgY29uc3QgZ2V0SXRlbVNwYWNlID0gKGl0ZW1EYXRhOiBEcm9wTGlzdEl0ZW1EYXRhKSA9PlxuICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IGl0ZW1EYXRhLmhlaWdodCArIGl0ZW1EYXRhLm1hcmdpbnMudG9wICsgaXRlbURhdGEubWFyZ2lucy5ib3R0b21cbiAgICAgICAgOiBpdGVtRGF0YS53aWR0aCArIGl0ZW1EYXRhLm1hcmdpbnMubGVmdCArIGl0ZW1EYXRhLm1hcmdpbnMucmlnaHQ7XG5cbiAgICBsZXQgZHJhZ2dlZEl0ZW1TaXplID0gMDtcbiAgICBpZiAoaXNJbnRyYUxpc3REcmFnKSB7XG4gICAgICBkcmFnZ2VkSXRlbVNpemUgPSBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtvcmlnaW5hbEluZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBhY3RpdmVJdGVtLmVsZW1lbnRSZWN0KCk7XG4gICAgICBpZiAocmVjdCkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGFjdGl2ZUl0ZW0uZWxlbWVudCgpKTtcbiAgICAgICAgZHJhZ2dlZEl0ZW1TaXplID1cbiAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnXG4gICAgICAgICAgICA/IHJlY3QuaGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20pXG4gICAgICAgICAgICA6IHJlY3Qud2lkdGggKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5SaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2FjaGVkSXRlbXMoKS5mb3JFYWNoKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGluZGV4LCBvcmlnaW5hbEluZGV4LCBkcmFnZ2VkSXRlbVNpemUsIGdldEl0ZW1TcGFjZSk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgdHJhbnNmb3JtID8gYCR7dGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJyA/ICd0cmFuc2xhdGVZJyA6ICd0cmFuc2xhdGVYJ30oJHt0cmFuc2Zvcm19cHgpYCA6ICcnLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSByZXF1aXJlZCB0cmFuc2Zvcm0gaW4gcGl4ZWxzIGZvciBhIHNpbmdsZSBpdGVtLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIG9yaWdpbmFsSW5kZXggVGhlIG9yaWdpbmFsIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGl0ZW0gKC0xIGlmIGZyb20gYW5vdGhlciBsaXN0KS5cbiAgICogQHBhcmFtIGRyYWdnZWRJdGVtU2l6ZSBUaGUgc2l6ZSAoaW5jbHVkaW5nIG1hcmdpbnMpIG9mIHRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXG4gICAqIEBwYXJhbSBnZXRJdGVtU3BhY2UgQSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGFuIGl0ZW0ncyBzaXplIGluY2x1ZGluZyBtYXJnaW5zLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtIHZhbHVlIGluIHBpeGVscy5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVRyYW5zZm9ybShcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcixcbiAgICBkcmFnZ2VkSXRlbVNpemU6IG51bWJlcixcbiAgICBnZXRJdGVtU3BhY2U6IChpdGVtOiBEcm9wTGlzdEl0ZW1EYXRhKSA9PiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9wbGFjZWhvbGRlckluZGV4KCk7XG4gICAgY29uc3QgbGlzdEdhcCA9IHRoaXMuX2xpc3RHYXAoKTtcblxuICAgIGlmIChvcmlnaW5hbEluZGV4ID4gLTEpIHtcbiAgICAgIC8vIC0tLSBJbnRyYS1saXN0IERyYWcgLS0tXG4gICAgICBpZiAoaW5kZXggPT09IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgLy8gVGhlIGRyYWdnZWQgaXRlbSBtb3ZlcyBieSB0aGUgc3VtIG9mIHRoZSBzaXplcyBvZiB0aGUgaXRlbXMgaXQgcGFzc2VzIG92ZXIsIFBMVVMgdGhlIGdhcHMgYmV0d2VlbiB0aGVtLlxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID4gb3JpZ2luYWxJbmRleCkge1xuICAgICAgICAgIC8vIERyYWdnaW5nIGRvd24vcmlnaHRcbiAgICAgICAgICBmb3IgKGxldCBpID0gb3JpZ2luYWxJbmRleCArIDE7IGkgPCB0YXJnZXRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBvZmZzZXQgKz0gZ2V0SXRlbVNwYWNlKHRoaXMuX2NhY2hlZEl0ZW1zKClbaV0pICsgbGlzdEdhcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRHJhZ2dpbmcgdXAvbGVmdFxuICAgICAgICAgIGZvciAobGV0IGkgPSB0YXJnZXRJbmRleDsgaSA8IG9yaWdpbmFsSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgb2Zmc2V0IC09IGdldEl0ZW1TcGFjZSh0aGlzLl9jYWNoZWRJdGVtcygpW2ldKSArIGxpc3RHYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGEgc2libGluZyBpdGVtIHRoYXQgbmVlZHMgdG8gbWFrZSBzcGFjZS5cbiAgICAgICAgLy8gSXQgbW92ZXMgYnkgdGhlIHNpemUgb2YgdGhlIGRyYWdnZWQgaXRlbSwgcGx1cyBPTkUgZ2FwIHRvIGZpbGwgdGhlIHZvaWQuXG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZHJhZ2dlZEl0ZW1TaXplICsgbGlzdEdhcDtcbiAgICAgICAgaWYgKG9yaWdpbmFsSW5kZXggPCB0YXJnZXRJbmRleCAmJiBpbmRleCA+IG9yaWdpbmFsSW5kZXggJiYgaW5kZXggPCB0YXJnZXRJbmRleCkge1xuICAgICAgICAgIHJldHVybiAtc2hpZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxJbmRleCA+IHRhcmdldEluZGV4ICYmIGluZGV4ID49IHRhcmdldEluZGV4ICYmIGluZGV4IDwgb3JpZ2luYWxJbmRleCkge1xuICAgICAgICAgIHJldHVybiBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLS0gSW50ZXItbGlzdCBEcmFnIChmcm9tIGFub3RoZXIgbGlzdCkgLS0tXG4gICAgICBpZiAoaW5kZXggPj0gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgLy8gQW4gaXRlbSBmcm9tIGFub3RoZXIgbGlzdCBlbnRlcnMuIFNpYmxpbmdzIHNoaWZ0IGJ5IGl0cyBzaXplIHBsdXMgT05FIGdhcC5cbiAgICAgICAgcmV0dXJuIGRyYWdnZWRJdGVtU2l6ZSArIGxpc3RHYXA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgc3RhdGUgb2YgdGhpcyBsaXN0IGFuZCB0aGUgc291cmNlIGxpc3QgYWZ0ZXIgYSBkcm9wLiAqL1xuICBwcml2YXRlIHJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0c1RvUmVzZXQgPSBuZXcgU2V0KFt0aGlzLCBzb3VyY2VMaXN0XSk7XG4gICAgbGlzdHNUb1Jlc2V0LmZvckVhY2goKGxpc3QpID0+IHtcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgIGxpc3QuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgICAgICBsaXN0LnJlc2V0U29ydFN0YXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhbGwgYHRyYW5zZm9ybWAgc3R5bGVzIGZyb20gdGhlIGl0ZW1zIGluIHRoaXMgbGlzdC4gKi9cbiAgcHJpdmF0ZSBfcmVzZXRBbGxUcmFuc2Zvcm1zKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zKCkuZm9yRWFjaCgoZGF0YSkgPT4gdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZGF0YS5lbGVtZW50LCAndHJhbnNmb3JtJywgJycpKTtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBkaXJlY3RpdmUgdG8gaXRzIGluaXRpYWwgdmFsdWVzLiAqL1xuICByZXNldFNvcnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZHJvcC1saXN0LXNvcnRpbmctYWN0aXZlJyk7XG4gICAgdGhpcy5fYWN0aXZlRHJhZ0l0ZW0uc2V0KG51bGwpO1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zLnNldChbXSk7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQoLTEpO1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQobnVsbCk7XG4gICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gIH1cbn1cbiJdfQ==","import { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, computed, contentChild, Directive, DOCUMENT, effect, ElementRef, inject, input, linkedSignal, NgZone, output, PLATFORM_ID, Renderer2, RendererStyleFlags2, signal, ViewContainerRef, } 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\";\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);\n this.dragData = input();\n this.dragDisabled = input(false);\n this.dragTransition = input(true);\n this.dragElementClone = input(false);\n this.dropZoneGroup = input();\n this.dragStartDelay = input();\n this.dragResetOnDblClick = input(true);\n this.dragLockAxis = input(null);\n this.dragClonedTemplate = input();\n this.dragCursor = input('move');\n this.dragBoundary = input();\n this.dragTransitionDuration = input(150);\n this.dragPositionChanged = output();\n this.clonedElement = signal(null);\n this.currentAxis = signal({ x: 0, y: 0 });\n this.currentCloneAxis = signal({ x: 0, y: 0 });\n this.transitionDuration = linkedSignal(() => this.dragTransitionDuration());\n this.element = signal(this.el.nativeElement);\n this.isMoving = signal(false);\n this.isDragging = signal(false);\n this.elementOpacity = signal('1');\n this.isDelayStarted = signal(false);\n this.prevDropZone = signal(null);\n this.dragStartOffset = signal({ x: 0, y: 0 });\n this.clonePointerOffset = signal({ x: 0, y: 0 });\n this.clonedElementViewRef = signal(null);\n this._parentDropList = inject(AXDropListDirective, { optional: true, skipSelf: true, host: false });\n this._currentDropList = signal(null);\n this.createCloneElement = computed(() => this.dragElementClone() || !!this._parentDropList);\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 });\n this.elementRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.element().getBoundingClientRect();\n });\n this.boundaryRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.boundaryElement()?.getBoundingClientRect();\n });\n this.handle = computed(() => this.handleDirective()?.element() ?? this.element());\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.#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 });\n }\n #dragDisabledEffect;\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n this.zone.runOutsideAngular(() => {\n this.handle().addEventListener('dblclick', this.boundHandleDblClick);\n this.handle().addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });\n });\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 this.handle().removeEventListener('dblclick', this.boundHandleDblClick);\n this.handle().removeEventListener('pointerdown', this.boundHandlePointerDown);\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.dragDisabled() || e.button !== 0)\n return;\n this.isDragging.set(true);\n if (this.dragCursor() === 'move') {\n this.renderer.setStyle(this.document.body, 'cursor', 'move');\n }\n else if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.document.body, 'cursor', 'grabbing');\n }\n e.stopPropagation();\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.handle().setPointerCapture(e.pointerId);\n this.addDocumentListeners();\n if (this.dragStartDelay()) {\n this.isDelayStarted.set(true);\n setTimeout(() => {\n if (this.isDragging()) {\n this.isDelayStarted.set(false);\n this.startDrag(e);\n }\n }, this.dragStartDelay());\n }\n else {\n this.startDrag(e);\n }\n }\n startDrag(e) {\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 this.createCloneElementHandler(this.element());\n }\n }\n handlePointerUp(e) {\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 if (!isPlatformBrowser(this.platformId))\n return;\n if (!this.isDragging())\n return;\n this.renderer.removeStyle(this.document.body, 'cursor');\n const wasMoving = this.isMoving();\n this.isDragging.set(false);\n if (wasMoving) {\n this.preventClicking();\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 this._currentDropList.set(null);\n this.isMoving.set(false);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n if (this.handle().hasPointerCapture(e.pointerId)) {\n this.handle().releasePointerCapture(e.pointerId);\n }\n this.removeDocumentListeners();\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 handleDblClick() {\n if (!this.dragResetOnDblClick() || this.dragDisabled())\n return;\n this.setPosition(0, 0);\n }\n handlePointerMove(e) {\n if (!isPlatformBrowser(this.platformId) || !this.isDragging() || this.isDelayStarted())\n return;\n e.preventDefault();\n if (!this.isMoving()) {\n this.isMoving.set(true);\n }\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 if (this._parentDropList) {\n this.handleDropListInteractions(e);\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n }\n handleDropListInteractions(e) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n const previousList = this._currentDropList();\n let targetList = null;\n if (listUnderPointer && this.canDropInList(listUnderPointer)) {\n targetList = listUnderPointer;\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 return !!dragGroup && dragGroup === targetGroup;\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 dropListElement = this.document\n .elementsFromPoint(x, y)\n .find((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');\n return dropListElement ? dropListElement['__axContext__'] : null;\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 this.currentAxis.set({ x: constrainedX, y: constrainedY });\n this.renderer.setStyle(this.element(), 'translate', `${constrainedX}px ${constrainedY}px`);\n this.dragPositionChanged.emit(this.currentAxis());\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 this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });\n this.renderer.setStyle(cloneEl, 'translate', `${constrainedX}px ${constrainedY}px`);\n this.dragPositionChanged.emit(this.currentCloneAxis());\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 (e) {\n console.log(e);\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 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.0.4\", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXDragDirective, isStandalone: true, selector: \"[axDrag]\", inputs: { 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.0.4\", ngImport: i0, type: AXDragDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDrag]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9saWIvZHJhZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFFVixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBR04sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLE1BQU0sRUFFTixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRNUQsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFJVSxTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxPQUFFLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIs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QUFVO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIERPQ1VNRU5ULFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEcmFnSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQVhEcm9wTGlzdERpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcC1saXN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyb3Bab25lRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wLXpvbmUuZGlyZWN0aXZlJztcblxudHlwZSBBWFBvc2l0aW9uVHlwZSA9IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJhZ10nLFxufSlcbmV4cG9ydCBjbGFzcyBBWERyYWdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBlbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgaGFuZGxlRGlyZWN0aXZlID0gY29udGVudENoaWxkKEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSk7XG5cbiAgZHJhZ0RhdGEgPSBpbnB1dCgpO1xuICBkcmFnRGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdUcmFuc2l0aW9uID0gaW5wdXQodHJ1ZSk7XG4gIGRyYWdFbGVtZW50Q2xvbmUgPSBpbnB1dChmYWxzZSk7XG4gIGRyb3Bab25lR3JvdXAgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQ8bnVtYmVyPigpO1xuICBkcmFnUmVzZXRPbkRibENsaWNrID0gaW5wdXQodHJ1ZSk7XG4gIGRyYWdMb2NrQXhpcyA9IGlucHV0PCd4JyB8ICd5JyB8IG51bGw+KG51bGwpO1xuICBkcmFnQ2xvbmVkVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgZHJhZ0N1cnNvciA9IGlucHV0PCdtb3ZlJyB8ICdncmFiJyB8ICdub25lJz4oJ21vdmUnKTtcbiAgZHJhZ0JvdW5kYXJ5ID0gaW5wdXQ8c3RyaW5nIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD4oKTtcbiAgZHJhZ1RyYW5zaXRpb25EdXJhdGlvbiA9IGlucHV0PG51bWJlcj4oMTUwKTtcblxuICBkcmFnUG9zaXRpb25DaGFuZ2VkID0gb3V0cHV0PEFYUG9zaXRpb25UeXBlPigpO1xuXG4gIGNsb25lZEVsZW1lbnQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY3VycmVudEF4aXMgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgY3VycmVudENsb25lQXhpcyA9IHNpZ25hbDxBWFBvc2l0aW9uVHlwZT4oeyB4OiAwLCB5OiAwIH0pO1xuICB0cmFuc2l0aW9uRHVyYXRpb24gPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5kcmFnVHJhbnNpdGlvbkR1cmF0aW9uKCkpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsPEhUTUxFbGVtZW50Pih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICBwcml2YXRlIGlzTW92aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBlbGVtZW50T3BhY2l0eSA9IHNpZ25hbDxzdHJpbmc+KCcxJyk7XG4gIHByaXZhdGUgaXNEZWxheVN0YXJ0ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHByZXZEcm9wWm9uZSA9IHNpZ25hbDxBWERyb3Bab25lRGlyZWN0aXZlIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgZHJhZ1N0YXJ0T2Zmc2V0ID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgY2xvbmVQb2ludGVyT2Zmc2V0ID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgY2xvbmVkRWxlbWVudFZpZXdSZWYgPSBzaWduYWw8RW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSBfcGFyZW50RHJvcExpc3QgPSBpbmplY3QoQVhEcm9wTGlzdERpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUsIGhvc3Q6IGZhbHNlIH0pO1xuICBwcml2YXRlIF9jdXJyZW50RHJvcExpc3QgPSBzaWduYWw8QVhEcm9wTGlzdERpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjcmVhdGVDbG9uZUVsZW1lbnQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLmRyYWdFbGVtZW50Q2xvbmUoKSB8fCAhIXRoaXMuX3BhcmVudERyb3BMaXN0KTtcblxuICBwcml2YXRlIGJvdW5kYXJ5RWxlbWVudCA9IGNvbXB1dGVkPEhUTUxFbGVtZW50IHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gdGhpcy5kcmFnQm91bmRhcnkoKTtcbiAgICBpZiAoIWJvdW5kYXJ5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib3VuZGFyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGJvdW5kYXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGJvdW5kYXJ5IGluc3RhbmNlb2YgRWxlbWVudFJlZiA/IGJvdW5kYXJ5Lm5hdGl2ZUVsZW1lbnQgOiBib3VuZGFyeTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudFJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9KTtcblxuICBwcml2YXRlIGJvdW5kYXJ5UmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ib3VuZGFyeUVsZW1lbnQoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgaGFuZGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oYW5kbGVEaXJlY3RpdmUoKT8uZWxlbWVudCgpID8/IHRoaXMuZWxlbWVudCgpKTtcblxuICBwcml2YXRlIGJvdW5kSGFuZGxlRGJsQ2xpY2sgPSB0aGlzLmhhbmRsZURibENsaWNrLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRIYW5kbGVQb2ludGVyVXAgPSB0aGlzLmhhbmRsZVBvaW50ZXJVcC5iaW5kKHRoaXMpO1xuICBwcml2YXRlIGJvdW5kSGFuZGxlUG9pbnRlckRvd24gPSB0aGlzLmhhbmRsZVBvaW50ZXJEb3duLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRIYW5kbGVQb2ludGVyTW92ZSA9IHRoaXMuaGFuZGxlUG9pbnRlck1vdmUuYmluZCh0aGlzKTtcblxuICAjZHJhZ0Rpc2FibGVkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicsIHRoaXMuZHJhZ0N1cnNvcigpKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ3RvdWNoLWFjdGlvbicsICdub25lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5oYW5kbGUoKSwgJ2N1cnNvcicpO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAndG91Y2gtYWN0aW9uJyk7XG4gICAgfVxuICB9KTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGUoKS5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMuYm91bmRIYW5kbGVEYmxDbGljayk7XG4gICAgICAgIHRoaXMuaGFuZGxlKCkuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlckRvd24sIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRUcmFuc2l0aW9uKHRoaXMuZWxlbWVudCgpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50KCksICd6LWluZGV4JywgJzEnKTtcbiAgICAgIHRoaXMuZWxlbWVudE9wYWNpdHkuc2V0KGdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KCkpLm9wYWNpdHkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmhhbmRsZSgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5ib3VuZEhhbmRsZURibENsaWNrKTtcbiAgICAgIHRoaXMuaGFuZGxlKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlckRvd24pO1xuICAgICAgdGhpcy5yZW1vdmVEb2N1bWVudExpc3RlbmVycygpO1xuICAgICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbG9uZUVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCAmJiB0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICB0aGlzLl9wYXJlbnREcm9wTGlzdC5jYW5jZWxTb3J0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbGVtZW50VHJhbnNpdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tcHJvcGVydHknLCAndHJhbnNmb3JtLCBvcGFjaXR5LCB0cmFuc2xhdGUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgZWxlbWVudCxcbiAgICAgICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgICAgIGB2YXIoLS1heC1zeXMtdHJhbnNpdGlvbi1kdXJhdGlvbiwke3RoaXMudHJhbnNpdGlvbkR1cmF0aW9uKCl9bXMpYCxcbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJywgJ3ZhcigtLWF4LXN5cy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiknKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRWxlbWVudFRyYW5zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICd0cmFuc2l0aW9uLXByb3BlcnR5JywgJ29wYWNpdHknKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlckRvd24oZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkKCkgfHwgZS5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdtb3ZlJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnbW92ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdncmFiJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnZ3JhYmJpbmcnKTtcbiAgICB9XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5kcmFnU3RhcnRPZmZzZXQuc2V0KHsgeDogZS5jbGllbnRYIC0gdGhpcy5jdXJyZW50QXhpcygpLngsIHk6IGUuY2xpZW50WSAtIHRoaXMuY3VycmVudEF4aXMoKS55IH0pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oYW5kbGUoKSwgJ3VzZXJTZWxlY3QnLCAnbm9uZScpO1xuICAgIHRoaXMuaGFuZGxlKCkuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIHRoaXMuYWRkRG9jdW1lbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmRyYWdTdGFydERlbGF5KCkpIHtcbiAgICAgIHRoaXMuaXNEZWxheVN0YXJ0ZWQuc2V0KHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgIHRoaXMuaXNEZWxheVN0YXJ0ZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0RHJhZyhlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5kcmFnU3RhcnREZWxheSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERyYWcoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICB0aGlzLl9jdXJyZW50RHJvcExpc3Quc2V0KHRoaXMuX3BhcmVudERyb3BMaXN0KTtcbiAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LnByZXBhcmVTb3J0KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3Bab25lSG92ZXJIYW5kbGVyKGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZUNsb25lRWxlbWVudCgpKSB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuZWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5jbG9uZVBvaW50ZXJPZmZzZXQuc2V0KHtcbiAgICAgICAgeDogZS5jbGllbnRYIC0gZWxlbWVudFJlY3QubGVmdCxcbiAgICAgICAgeTogZS5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNyZWF0ZUNsb25lRWxlbWVudEhhbmRsZXIodGhpcy5lbGVtZW50KCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlclVwKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuZWxlbWVudCgpLnN0eWxlLnRyYW5zZm9ybTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHggPSBOdW1iZXIodHJhbnNmb3JtLnNwbGl0KCd0cmFuc2xhdGVYKCcpWzFdPy5zcGxpdCgncHgpJylbMF0pO1xuICAgICAgeSA9IE51bWJlcih0cmFuc2Zvcm0uc3BsaXQoJ3RyYW5zbGF0ZVkoJylbMV0/LnNwbGl0KCdweCknKVswXSk7XG4gICAgfVxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHJldHVybjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnY3Vyc29yJyk7XG5cbiAgICBjb25zdCB3YXNNb3ZpbmcgPSB0aGlzLmlzTW92aW5nKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nLnNldChmYWxzZSk7XG5cbiAgICBpZiAod2FzTW92aW5nKSB7XG4gICAgICB0aGlzLnByZXZlbnRDbGlja2luZygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyb3BwZWRJbnRvTGlzdCA9IHRoaXMuX2N1cnJlbnREcm9wTGlzdCgpO1xuICAgIGlmIChkcm9wcGVkSW50b0xpc3QgJiYgdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIGRyb3BwZWRJbnRvTGlzdC5maW5hbGl6ZVNvcnQoZSwgdGhpcywgdGhpcy5fcGFyZW50RHJvcExpc3QpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LmNhbmNlbFNvcnQodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcFpvbmVEcm9wSGFuZGxlcihlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RHJvcExpc3Quc2V0KG51bGwpO1xuICAgIHRoaXMuaXNNb3Zpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuaGFuZGxlKCksICd1c2VyU2VsZWN0Jyk7XG4gICAgaWYgKHRoaXMuaGFuZGxlKCkuaGFzUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpKSB7XG4gICAgICB0aGlzLmhhbmRsZSgpLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmNyZWF0ZUNsb25lRWxlbWVudCgpKSB7XG4gICAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudFdpdGhBbmltYXRpb24oeCB8fCAwLCB5IHx8IDAsIGxpc3RVbmRlclBvaW50ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnb3BhY2l0eScsIHRoaXMuZWxlbWVudE9wYWNpdHkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmV2ZW50Q2xpY2tpbmcoKSB7XG4gICAgY29uc3QgYmxvY2tDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJsb2NrQ2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSwgb25jZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGJsQ2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLmRyYWdSZXNldE9uRGJsQ2xpY2soKSB8fCB0aGlzLmRyYWdEaXNhYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQb3NpdGlvbigwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlck1vdmUoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSB8fCB0aGlzLmlzRGVsYXlTdGFydGVkKCkpIHJldHVybjtcblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuaXNNb3ZpbmcoKSkge1xuICAgICAgdGhpcy5pc01vdmluZy5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgIGNvbnN0IG5ld0Nsb25lWCA9IGUuY2xpZW50WCAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueDtcbiAgICAgIGNvbnN0IG5ld0Nsb25lWSA9IGUuY2xpZW50WSAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueTtcbiAgICAgIHRoaXMuc2V0Q2xvbmVQb3NpdGlvbihuZXdDbG9uZVgsIG5ld0Nsb25lWSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1ggPSBlLmNsaWVudFggLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLng7XG4gICAgICBjb25zdCBuZXdZID0gZS5jbGllbnRZIC0gdGhpcy5kcmFnU3RhcnRPZmZzZXQoKS55O1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbihuZXdYLCBuZXdZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHRoaXMuaGFuZGxlRHJvcExpc3RJbnRlcmFjdGlvbnMoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcFpvbmVIb3ZlckhhbmRsZXIoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wTGlzdEludGVyYWN0aW9ucyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgcHJldmlvdXNMaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgbGV0IHRhcmdldExpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsaXN0VW5kZXJQb2ludGVyICYmIHRoaXMuY2FuRHJvcEluTGlzdChsaXN0VW5kZXJQb2ludGVyKSkge1xuICAgICAgdGFyZ2V0TGlzdCA9IGxpc3RVbmRlclBvaW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldExpc3QgIT09IHByZXZpb3VzTGlzdCkge1xuICAgICAgaWYgKHByZXZpb3VzTGlzdCkge1xuICAgICAgICBwcmV2aW91c0xpc3QuY2FuY2VsU29ydFByZXZpZXcoKTtcbiAgICAgICAgaWYgKHByZXZpb3VzTGlzdCAhPT0gdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgICAgICBwcmV2aW91c0xpc3QucmVzZXRTb3J0U3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldExpc3QpIHtcbiAgICAgICAgdGFyZ2V0TGlzdC5lbnRlcih0aGlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wTGlzdC5zZXQodGFyZ2V0TGlzdCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudERyb3BMaXN0KCk/LnNvcnQoZSwgdGhpcyk7XG4gIH1cblxuICBwcml2YXRlIGNhbkRyb3BJbkxpc3QobGlzdDogQVhEcm9wTGlzdERpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCBsaXN0LnNvcnRpbmdEaXNhYmxlZCgpIHx8ICF0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobGlzdCA9PT0gdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkcmFnR3JvdXAgPSB0aGlzLl9wYXJlbnREcm9wTGlzdC5kcm9wTGlzdEdyb3VwKCk7XG4gICAgY29uc3QgdGFyZ2V0R3JvdXAgPSBsaXN0LmRyb3BMaXN0R3JvdXAoKTtcbiAgICByZXR1cm4gISFkcmFnR3JvdXAgJiYgZHJhZ0dyb3VwID09PSB0YXJnZXRHcm91cDtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVIb3ZlckhhbmRsZXIoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcFpvbmVzID0gdGhpcy5nZXREcm9wWm9uZXNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGNvbnN0IGRyb3Bab25lID0gZHJvcFpvbmVzWzBdO1xuXG4gICAgaWYgKCFkcm9wWm9uZSkge1xuICAgICAgaWYgKHRoaXMucHJldkRyb3Bab25lKCkpIHtcbiAgICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSAmJiB0aGlzLnByZXZEcm9wWm9uZSgpICE9PSBkcm9wWm9uZSkge1xuICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmUpICYmICFkcm9wWm9uZS5pc0hvdmVyZWQoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUuc2V0KGRyb3Bab25lKTtcbiAgICAgIGRyb3Bab25lLm9uRWxlbWVudEhvdmVyLmVtaXQoeyBzZW5kZXI6IGRyb3Bab25lLCBkcm9wcGVkOiB0aGlzLCBuYXRpdmVFdmVudDogZSwgc3RhdGU6ICdlbnRlcicgfSk7XG4gICAgICBkcm9wWm9uZS5pc0hvdmVyZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVEcm9wSGFuZGxlcihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wWm9uZXMgPSB0aGlzLmdldERyb3Bab25lc0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgZHJvcFpvbmUgPSBkcm9wWm9uZXNbMF07XG4gICAgaWYgKCF0aGlzLmRyb3Bab25lVmFsaWRhdGlvbihkcm9wWm9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJvcFpvbmUuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgZHJvcFpvbmUub25FbGVtZW50RHJvcC5lbWl0KHsgc2VuZGVyOiBkcm9wWm9uZSwgZHJvcHBlZDogdGhpcywgbmF0aXZlRXZlbnQ6IGUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERyb3Bab25lc0Zyb21Qb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEFYRHJvcFpvbmVEaXJlY3RpdmVbXSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAuZmlsdGVyKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnYXhEcm9wWm9uZSddID09PSAndHJ1ZScpXG4gICAgICAubWFwKChlbCkgPT4gZWxbJ19fYXhDb250ZXh0X18nXSBhcyBBWERyb3Bab25lRGlyZWN0aXZlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcExpc3RGcm9tUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBWERyb3BMaXN0RGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ2F4RHJvcExpc3QnXSA9PT0gJ3RydWUnKTtcbiAgICByZXR1cm4gZHJvcExpc3RFbGVtZW50ID8gKGRyb3BMaXN0RWxlbWVudFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmUpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVWYWxpZGF0aW9uKGRyb3Bab25lOiBBWERyb3Bab25lRGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcm9wWm9uZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRyYWdHcm91cCA9IHRoaXMuZHJvcFpvbmVHcm91cCgpO1xuICAgIGNvbnN0IGRyb3BHcm91cCA9IGRyb3Bab25lLmRyb3Bab25lR3JvdXAoKTtcbiAgICBpZiAoZHJvcEdyb3VwICYmIGRyYWdHcm91cCAhPT0gZHJvcEdyb3VwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBsZWF2ZVByZXZEcm9wWm9uZShlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUoKS5vbkVsZW1lbnRIb3Zlci5lbWl0KHtcbiAgICAgICAgZHJvcHBlZDogdGhpcyxcbiAgICAgICAgc3RhdGU6ICdsZWF2ZScsXG4gICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgICBzZW5kZXI6IHRoaXMucHJldkRyb3Bab25lKCksXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJldkRyb3Bab25lKCkuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnByZXZEcm9wWm9uZS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBsZXQgY29uc3RyYWluZWRYID0geDtcbiAgICBsZXQgY29uc3RyYWluZWRZID0geTtcblxuICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvdW5kYXJ5UmVjdCA9IHRoaXMuYm91bmRhcnlSZWN0KCk7XG5cbiAgICBpZiAoYm91bmRhcnlSZWN0ICYmIGVsZW1lbnRSZWN0KSB7XG4gICAgICBjb25zdCBtaW5YID0gYm91bmRhcnlSZWN0LmxlZnQgLSBlbGVtZW50UmVjdC5sZWZ0O1xuICAgICAgY29uc3QgbWluWSA9IGJvdW5kYXJ5UmVjdC50b3AgLSBlbGVtZW50UmVjdC50b3A7XG4gICAgICBjb25zdCBtYXhYID0gbWluWCArIGJvdW5kYXJ5UmVjdC53aWR0aCAtIGVsZW1lbnRSZWN0LndpZHRoO1xuICAgICAgY29uc3QgbWF4WSA9IG1pblkgKyBib3VuZGFyeVJlY3QuaGVpZ2h0IC0gZWxlbWVudFJlY3QuaGVpZ2h0O1xuICAgICAgY29uc3RyYWluZWRYID0gY2xhbXAoeCwgbWluWCwgbWF4WCk7XG4gICAgICBjb25zdHJhaW5lZFkgPSBjbGFtcCh5LCBtaW5ZLCBtYXhZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3gnKSBjb25zdHJhaW5lZFkgPSB0aGlzLmN1cnJlbnRBeGlzKCkueTtcbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3knKSBjb25zdHJhaW5lZFggPSB0aGlzLmN1cnJlbnRBeGlzKCkueDtcblxuICAgIHRoaXMuY3VycmVudEF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQoKSwgJ3RyYW5zbGF0ZScsIGAke2NvbnN0cmFpbmVkWH1weCAke2NvbnN0cmFpbmVkWX1weGApO1xuICAgIHRoaXMuZHJhZ1Bvc2l0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuY3VycmVudEF4aXMoKSk7XG4gIH1cblxuICBzZXRDbG9uZVBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgbGV0IGNvbnN0cmFpbmVkWCA9IHg7XG4gICAgbGV0IGNvbnN0cmFpbmVkWSA9IHk7XG5cbiAgICBjb25zdCBjbG9uZUVsID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgY29uc3QgYm91bmRhcnlSZWN0ID0gdGhpcy5ib3VuZGFyeVJlY3QoKTtcblxuICAgIGlmIChib3VuZGFyeVJlY3QgJiYgY2xvbmVFbCkge1xuICAgICAgY29uc3QgY2xvbmVXaWR0aCA9IGNsb25lRWwub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjbG9uZUhlaWdodCA9IGNsb25lRWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBjb25zdHJhaW5lZFggPSBjbGFtcCh4LCBib3VuZGFyeVJlY3QubGVmdCwgYm91bmRhcnlSZWN0LnJpZ2h0IC0gY2xvbmVXaWR0aCk7XG4gICAgICBjb25zdHJhaW5lZFkgPSBjbGFtcCh5LCBib3VuZGFyeVJlY3QudG9wLCBib3VuZGFyeVJlY3QuYm90dG9tIC0gY2xvbmVIZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneCcpIGNvbnN0cmFpbmVkWSA9IHRoaXMuY3VycmVudENsb25lQXhpcygpLnk7XG4gICAgaWYgKHRoaXMuZHJhZ0xvY2tBeGlzKCkgPT09ICd5JykgY29uc3RyYWluZWRYID0gdGhpcy5jdXJyZW50Q2xvbmVBeGlzKCkueDtcblxuICAgIHRoaXMuY3VycmVudENsb25lQXhpcy5zZXQoeyB4OiBjb25zdHJhaW5lZFgsIHk6IGNvbnN0cmFpbmVkWSB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lRWwsICd0cmFuc2xhdGUnLCBgJHtjb25zdHJhaW5lZFh9cHggJHtjb25zdHJhaW5lZFl9cHhgKTtcbiAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsb25lRWxlbWVudEhhbmRsZXIob3JpZ2luYWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmNsb25lZEVsZW1lbnQuc2V0KG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGNsb25lZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlID0gdGhpcy5kcmFnQ2xvbmVkVGVtcGxhdGUoKTtcblxuICAgIGNvbnN0IGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUgPSAoc291cmNlOiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNvdXJjZSk7XG5cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlcy5jc3NUZXh0ICYmIHRhcmdldC5zdHlsZS5jc3NUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRlbXBDc3NUZXh0ID0gY29tcHV0ZWRTdHlsZXMuY3NzVGV4dDtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY2xvbmVkRWxlbWVudCkge1xuICAgICAgICAgIHRlbXBDc3NUZXh0ID0gdGVtcENzc1RleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC9wb3NpdGlvbjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RvcDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2xlZnQ6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yaWdodDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2JvdHRvbTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3dpZHRoOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvaGVpZ2h0OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvbWFyZ2luW147XSo6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2l0aW9uW147XSo6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2Zvcm06W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2xhdGU6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC96LWluZGV4OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvb3BhY2l0eTpbXjtdKzsvZ2ksICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wQ3NzVGV4dCA9IHRlbXBDc3NUZXh0LnJlcGxhY2UoL3BvaW50ZXItZXZlbnRzOlteO10rOy9naSwgJycpO1xuICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IHRlbXBDc3NUZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wdXRlZFN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gY29tcHV0ZWRTdHlsZXNbaV07XG4gICAgICAgICAgaWYgKHByb3BOYW1lID09PSAncG9pbnRlci1ldmVudHMnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0ID09PSBjbG9uZWRFbGVtZW50ICYmXG4gICAgICAgICAgICAocHJvcE5hbWUgPT09ICdwb3NpdGlvbicgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0b3AnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnbGVmdCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdyaWdodCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdib3R0b20nIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnd2lkdGgnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnaGVpZ2h0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZS5zdGFydHNXaXRoKCdtYXJnaW4nKSB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZS5zdGFydHNXaXRoKCd0cmFuc2l0aW9uJykgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0cmFuc2Zvcm0nIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAndHJhbnNsYXRlJyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3otaW5kZXgnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnb3BhY2l0eScpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcE5hbWUpLFxuICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BOYW1lKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzb3VyY2VDaGlsZHJlbiA9IEFycmF5LmZyb20oc291cmNlLmNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IHRhcmdldENoaWxkcmVuID0gQXJyYXkuZnJvbSh0YXJnZXQuY2hpbGRyZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc291cmNlQ2hpbGRyZW5baV0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXRDaGlsZHJlbltpXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZShzb3VyY2VDaGlsZHJlbltpXSBhcyBIVE1MRWxlbWVudCwgdGFyZ2V0Q2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21UZW1wbGF0ZSkge1xuICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY3VzdG9tVGVtcGxhdGUpO1xuICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQodmlld1JlZik7XG5cbiAgICAgIGlmICh2aWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAwICYmIHZpZXdSZWYucm9vdE5vZGVzWzBdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY2xvbmVkRWxlbWVudCA9IHZpZXdSZWYucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHZpZXdJbmRleCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHZpZXdSZWYpO1xuICAgICAgICBpZiAodmlld0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5kZXRhY2godmlld0luZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKSkge1xuICAgICAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKS5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdBWERyYWdEaXJlY3RpdmU6IGRyYWdDbG9uZWRUZW1wbGF0ZSBkaWQgbm90IHByb2R1Y2UgYSB2YWxpZCBIVE1MRWxlbWVudCByb290IG5vZGUuIEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGNsb25pbmcuJyxcbiAgICAgICAgKTtcbiAgICAgICAgY2xvbmVkRWxlbWVudCA9IG9yaWdpbmFsRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUob3JpZ2luYWxFbGVtZW50LCBjbG9uZWRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2xvbmVkRWxlbWVudCA9IG9yaWdpbmFsRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBhcHBseUNvbXB1dGVkU3R5bGVzUmVjdXJzaXZlKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lZEVsZW1lbnQuaWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGNsb25lZEVsZW1lbnQsICdpZCcpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9yaWdpbmFsRWxlbWVudCwgJ29wYWNpdHknLCAnMC41Jyk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFJlY3QgPSBvcmlnaW5hbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAncG9zaXRpb24nLCAnZml4ZWQnLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnbGVmdCcsICcwcHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd0b3AnLCAnMHB4Jyk7XG4gICAgaWYgKCFjdXN0b21UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnd2lkdGgnLCBgJHtvcmlnaW5hbFJlY3Qud2lkdGh9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ2hlaWdodCcsIGAke29yaWdpbmFsUmVjdC5oZWlnaHR9cHhgKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnbWFyZ2luJywgJzAnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdib3gtc2l6aW5nJywgJ2JvcmRlci1ib3gnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdvcGFjaXR5JywgJzAuNzUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd6LWluZGV4JywgJzEwMDAwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAncG9pbnRlci1ldmVudHMnLCAnbm9uZScsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd1c2VyLXNlbGVjdCcsICdub25lJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndG91Y2gtYWN0aW9uJywgJ25vbmUnKTtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RyYW5zbGF0ZScsIGAke29yaWdpbmFsUmVjdC5sZWZ0fXB4ICR7b3JpZ2luYWxSZWN0LnRvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RyYW5zaXRpb24nKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNsb25lZEVsZW1lbnQsICd0cmFuc2l0aW9uLXByb3BlcnR5Jyk7XG5cbiAgICB0aGlzLmNvcHlQc2V1ZG9FbGVtZW50U3R5bGVzKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCwgJzo6YmVmb3JlJyk7XG4gICAgdGhpcy5jb3B5UHNldWRvRWxlbWVudFN0eWxlcyhvcmlnaW5hbEVsZW1lbnQsIGNsb25lZEVsZW1lbnQsICc6OmFmdGVyJyk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgY2xvbmVkRWxlbWVudCk7XG4gICAgdGhpcy5jbG9uZWRFbGVtZW50LnNldChjbG9uZWRFbGVtZW50KTtcbiAgICB0aGlzLnNldENsb25lUG9zaXRpb24ob3JpZ2luYWxSZWN0LmxlZnQsIG9yaWdpbmFsUmVjdC50b3ApO1xuXG4gICAgcmV0dXJuIGNsb25lZEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNvcHlQc2V1ZG9FbGVtZW50U3R5bGVzKHNvdXJjZTogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIHBzZXVkbzogJzo6YmVmb3JlJyB8ICc6OmFmdGVyJyk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwc2V1ZG9TdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzb3VyY2UsIHBzZXVkbyk7XG4gICAgY29uc3QgY29udGVudCA9IHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgY29uc3QgZGlzcGxheSA9IHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5Jyk7XG4gICAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQgPT09ICdub25lJyB8fCBkaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHNldWRvRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHNldWRvU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IHBzZXVkb1N0eWxlc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBzZXVkb0VsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgcHNldWRvU3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcE5hbWUpLFxuICAgICAgICAgIHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BOYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gU29tZSBwcm9wZXJ0aWVzIG1pZ2h0IGZhaWwgdG8gc2V0LCB3aGljaCBpcyB1c3VhbGx5IGZpbmUuXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJ1wiJykgJiYgY29udGVudC5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShwc2V1ZG9FbGVtZW50LCAndGV4dENvbnRlbnQnLCBjb250ZW50LnNsaWNlKDEsIC0xKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkocHNldWRvRWxlbWVudCwgJ3RleHRDb250ZW50JywgY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocHNldWRvRWxlbWVudCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgICBpZiAocHNldWRvID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0YXJnZXQsIHBzZXVkb0VsZW1lbnQsIHRhcmdldC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0YXJnZXQsIHBzZXVkb0VsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2xvbmVFbGVtZW50V2l0aEFuaW1hdGlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgZHJvcExpc3Q/OiBBWERyb3BMaXN0RGlyZWN0aXZlKSB7XG4gICAgZHJvcExpc3Q/Ll9kcmFnZ2FibGVJdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlRWxlbWVudFRyYW5zaXRpb24oaXRlbS5lbGVtZW50KCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgaWYgKCFjbG9uZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQoKSwgJ29wYWNpdHknLCB0aGlzLmVsZW1lbnRPcGFjaXR5KCkpO1xuXG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSB0aGlzLmVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoZWxlbWVudFJlY3QpIHtcbiAgICAgIHRoaXMuc2V0RWxlbWVudFRyYW5zaXRpb24oY2xvbmUpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZSwgJ29wYWNpdHknLCAnMCcpO1xuICAgICAgdGhpcy5zZXRDbG9uZVBvc2l0aW9uKGVsZW1lbnRSZWN0LmxlZnQgKyB4LCBlbGVtZW50UmVjdC50b3AgKyB5KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHJhZ1RyYW5zaXRpb24oKSkge1xuICAgICAgdGhpcy5yZW1vdmVDbG9uZUVsZW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2xvbmVFbGVtZW50KCk7XG4gICAgICAgIGRyb3BMaXN0Py5fZHJhZ2dhYmxlSXRlbXMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRFbGVtZW50VHJhbnNpdGlvbihpdGVtLmVsZW1lbnQoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24oKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDbG9uZUVsZW1lbnQoKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVkRWxlbWVudCgpO1xuICAgIGlmIChjbG9uZT8ucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjbG9uZS5wYXJlbnROb2RlLCBjbG9uZSk7XG4gICAgfVxuICAgIHRoaXMuY2xvbmVkRWxlbWVudC5zZXQobnVsbCk7XG5cbiAgICBpZiAodGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZigpKSB7XG4gICAgICB0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQobnVsbCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREb2N1bWVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyTW92ZSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG9jdW1lbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyVXApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","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();\n this.isHovered = signal(false);\n this.element = signal(this.nativeElement);\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.0.4\", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.4\", 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.0.4\", ngImport: i0, type: AXDropZoneDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropZone]',\n exportAs: 'axDropZone',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZekUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS0Usa0JBQWEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVoQyxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxFQUF3QixDQUFDO0tBS2pEO0lBSEMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7OEdBWFUsbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRHJvcFpvbmVEcm9wRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYRHJvcFpvbmVEaXJlY3RpdmUsIE1vdXNlRXZlbnQ+IHtcbiAgZHJvcHBlZDogQVhEcmFnRGlyZWN0aXZlO1xufVxuZXhwb3J0IHR5cGUgQVhEcm9wWm9uZUhvdmVyRXZlbnQgPSBBWERyb3Bab25lRHJvcEV2ZW50ICYgeyBzdGF0ZTogJ2VudGVyJyB8ICdsZWF2ZScgfTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcFpvbmVdJyxcbiAgZXhwb3J0QXM6ICdheERyb3Bab25lJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wWm9uZURpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcblxuICBpc0hvdmVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgb25FbGVtZW50RHJvcCA9IG91dHB1dDxBWERyb3Bab25lRHJvcEV2ZW50PigpO1xuICBvbkVsZW1lbnRIb3ZlciA9IG91dHB1dDxBWERyb3Bab25lSG92ZXJFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQoKS5kYXRhc2V0WydheERyb3Bab25lJ10gPSAndHJ1ZSc7XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDragDirective } from './drag.directive';\nimport { AXDropZoneDirective } from './drop-zone.directive';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective];\nexport class AXDragDropModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcmFnLWRyb3AubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCxNQUFNLFNBQVMsR0FBRyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBT2hGLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLFlBUFYsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixhQUEzRCxlQUFlLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1COytHQU9qRSxnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBTDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUN2QixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Atem9uZS5kaXJlY3RpdmUnO1xuXG5jb25zdCBDT01QT05FTlQgPSBbQVhEcmFnRGlyZWN0aXZlLCBBWERyYWdIYW5kbGVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmVdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbLi4uQ09NUE9ORU5UXSxcbiAgZXhwb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0Ryb3BNb2R1bGUge31cbiJdfQ==","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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"}
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);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: AXDragHandleDirective, isStandalone: true, selector: \"[axDragHandle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDragHandle]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1oYW5kbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2RyYWctZHJvcC9zcmMvbGliL2RyYWctaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSVUsT0FBRSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDaEQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xEOzhHQUhZLHFCQUFxQjtrR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcmFnSGFuZGxlXScsXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG59XG4iXX0=","import { NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectorRef, contentChildren, Directive, ElementRef, inject, input, NgZone, output, 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._hostEl = inject(ElementRef);\n // --- Public API: Inputs and Outputs ---\n /** Whether sorting within this list is disabled. */\n this.sortingDisabled = input(false);\n /** The group this drop list belongs to. Dragging is only allowed between lists of the same group. */\n this.dropListGroup = input();\n /** The layout orientation of the list. */\n this.dropListOrientation = input('vertical');\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, { 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);\n /** The calculated index where the placeholder/item should be. */\n this._placeholderIndex = signal(-1);\n /** A snapshot of the items' data and geometry at the start of the drag. */\n this._cachedItems = signal([]);\n /** The list's initial bounding box, used to calculate scroll delta. */\n this._listInitialRect = signal(null);\n /** The detected `gap` of the list for the current orientation. */\n this._listGap = signal(0);\n /** A signal-based alias for the orientation input for internal use. */\n this._orientation = this.dropListOrientation;\n }\n ngOnInit() {\n this.element.dataset['axDropList'] = 'true';\n this.element.classList.add('ax-drop-list-sorting-transition');\n }\n ngAfterContentInit() {\n this._cdr.detectChanges();\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.sortingDisabled() || this._activeDragItem())\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.sortingDisabled() || this.isDragActiveForThisList(dragItem))\n return;\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.isDragActiveForThisList(dragItem) || this.sortingDisabled() || !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.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 const siblings = this._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 const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n // Map the index from the 'siblings' array back to the original `_cachedItems` array.\n return originalIndex > -1 && newIndexInSiblings >= originalIndex ? newIndexInSiblings + 1 : newIndexInSiblings;\n }\n /** Applies `transform` styles to all items to create the visual sorting effect. */\n _applyVisualShifts() {\n const activeItem = this._activeDragItem();\n const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);\n const isIntraListDrag = originalIndex > -1;\n // A helper to get the total space an item occupies (size + margins).\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 let draggedItemSize = 0;\n if (isIntraListDrag) {\n draggedItemSize = getItemSpace(this._cachedItems()[originalIndex]);\n }\n else {\n const rect = activeItem.elementRect();\n if (rect) {\n const style = window.getComputedStyle(activeItem.element());\n draggedItemSize =\n this._orientation() === 'vertical'\n ? rect.height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n : rect.width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n }\n this._cachedItems().forEach((data, index) => {\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 * 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 }\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.0.4\", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXDropListDirective, isStandalone: true, selector: \"[axDropList]\", inputs: { 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.0.4\", ngImport: i0, type: AXDropListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropList]',\n exportAs: 'axDropList',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1saXN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLWxpc3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBcUJuRDs7Ozs7Ozs7O0dBU0c7QUFLSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQUpwRDs7UUFLbUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUV2RSx5Q0FBeUM7UUFFekMsb0RBQW9EO1FBQ3BELG9CQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLHFHQUFxRztRQUNyRyxrQkFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ2hDLDBDQUEwQztRQUMxQyx3QkFBbUIsR0FBRyxLQUFLLENBQTRCLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLG1EQUFtRDtRQUNuRCxvQkFBZSxHQUFHLE1BQU0sRUFBMEIsQ0FBQztRQUVuRCxxRUFBcUU7UUFDNUQsb0JBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtB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QUFDLENBQUMsQ0FBQztJQUN2QixDQUFDOzhHQS9WVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw2bUJBa0JhLGVBQWU7OzJGQWxCL0MsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsWUFBWTtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOWENvbXBvbmVudCwgTlhOYXRpdmVFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgY29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG4vKiogRGVzY3JpYmVzIHRoZSBjYWNoZWQgZ2VvbWV0cmljIGRhdGEgb2YgYSBkcmFnZ2FibGUgaXRlbSB3aXRoaW4gdGhlIGxpc3QuICovXG5pbnRlcmZhY2UgRHJvcExpc3RJdGVtRGF0YSB7XG4gIGl0ZW06IEFYRHJhZ0RpcmVjdGl2ZTtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluaXRpYWxSZWN0OiBET01SZWN0O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWFyZ2luczogeyB0b3A6IG51bWJlcjsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgcmlnaHQ6IG51bWJlciB9O1xufVxuXG4vKiogRXZlbnQgb2JqZWN0IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW50byBhIGRyb3AgbGlzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhEcm9wTGlzdERyb3BwZWRFdmVudCBleHRlbmRzIE5YTmF0aXZlRXZlbnQ8QVhEcm9wTGlzdERpcmVjdGl2ZSwgTW91c2VFdmVudD4ge1xuICBpdGVtOiBBWERyYWdEaXJlY3RpdmU7XG4gIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gIGNvbnRhaW5lcjogQVhEcm9wTGlzdERpcmVjdGl2ZTtcbiAgcHJldmlvdXNDb250YWluZXI6IEFYRHJvcExpc3REaXJlY3RpdmU7XG59XG5cbi8qKlxuICogQERpcmVjdGl2ZSBheERyb3BMaXN0XG4gKlxuICogTWFuYWdlcyBhIGxpc3Qgb2YgZHJhZ2dhYmxlIGl0ZW1zIChgYXhEcmFnYCksIGVuYWJsaW5nIHNvcnRpbmcgd2l0aGluIHRoZSBsaXN0XG4gKiBhbmQgdHJhbnNmZXJyaW5nIGl0ZW1zIGJldHdlZW4gY29tcGF0aWJsZSBsaXN0cy4gSXQgaGFuZGxlcyB0aGUgdmlzdWFsIHNoaWZ0aW5nXG4gKiBvZiBpdGVtcyBkdXJpbmcgYSBkcmFnIG9wZXJhdGlvbiB0byBwcm92aWRlIGEgY2xlYXIgcHJldmlldyBvZiB0aGUgZHJvcCBsb2NhdGlvbi5cbiAqXG4gKiBUaGlzIGRpcmVjdGl2ZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYGdhcGAgZnJvbSBmbGV4Ym94L2dyaWQgbGF5b3V0cyBhbmQgaGFuZGxlc1xuICogaXRlbXMgd2l0aCB2YXJpYWJsZSBzaXplcyBhbmQgbWFyZ2lucy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcExpc3RdJyxcbiAgZXhwb3J0QXM6ICdheERyb3BMaXN0Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wTGlzdERpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0RWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8vIC0tLSBQdWJsaWMgQVBJOiBJbnB1dHMgYW5kIE91dHB1dHMgLS0tXG5cbiAgLyoqIFdoZXRoZXIgc29ydGluZyB3aXRoaW4gdGhpcyBsaXN0IGlzIGRpc2FibGVkLiAqL1xuICBzb3J0aW5nRGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBUaGUgZ3JvdXAgdGhpcyBkcm9wIGxpc3QgYmVsb25ncyB0by4gRHJhZ2dpbmcgaXMgb25seSBhbGxvd2VkIGJldHdlZW4gbGlzdHMgb2YgdGhlIHNhbWUgZ3JvdXAuICovXG4gIGRyb3BMaXN0R3JvdXAgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKiBUaGUgbGF5b3V0IG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0LiAqL1xuICBkcm9wTGlzdE9yaWVudGF0aW9uID0gaW5wdXQ8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ3ZlcnRpY2FsJyk7XG4gIC8qKiBFbWl0cyB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbnRvIHRoZSBsaXN0LiAqL1xuICBkcm9wTGlzdERyb3BwZWQgPSBvdXRwdXQ8QVhEcm9wTGlzdERyb3BwZWRFdmVudD4oKTtcblxuICAvKiogVGhlIGBheERyYWdgIGRpcmVjdGl2ZXMgdGhhdCBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgbGlzdC4gKi9cbiAgcmVhZG9ubHkgX2RyYWdnYWJsZUl0ZW1zID0gY29udGVudENoaWxkcmVuKEFYRHJhZ0RpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSk7XG5cbiAgLy8gLS0tIEludGVybmFsIFN0YXRlIE1hbmFnZW1lbnQgLS0tXG5cbiAgLyoqIFRoZSBuYXRpdmUgZWxlbWVudCBvZiB0aGUgZHJvcCBsaXN0LiAqL1xuICByZWFkb25seSBlbGVtZW50ID0gdGhpcy5faG9zdEVsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgLyoqIFRoZSBkcmFnZ2FibGUgaXRlbSBjdXJyZW50bHkgYmVpbmcgbW92ZWQgb3ZlciB0aGlzIGxpc3QuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZURyYWdJdGVtID0gc2lnbmFsPEFYRHJhZ0RpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW5kZXggd2hlcmUgdGhlIHBsYWNlaG9sZGVyL2l0ZW0gc2hvdWxkIGJlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGFjZWhvbGRlckluZGV4ID0gc2lnbmFsKC0xKTtcbiAgLyoqIEEgc25hcHNob3Qgb2YgdGhlIGl0ZW1zJyBkYXRhIGFuZCBnZW9tZXRyeSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRyYWcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlZEl0ZW1zID0gc2lnbmFsPHJlYWRvbmx5IERyb3BMaXN0SXRlbURhdGFbXT4oW10pO1xuICAvKiogVGhlIGxpc3QncyBpbml0aWFsIGJvdW5kaW5nIGJveCwgdXNlZCB0byBjYWxjdWxhdGUgc2Nyb2xsIGRlbHRhLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0SW5pdGlhbFJlY3QgPSBzaWduYWw8RE9NUmVjdCB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIGRldGVjdGVkIGBnYXBgIG9mIHRoZSBsaXN0IGZvciB0aGUgY3VycmVudCBvcmllbnRhdGlvbi4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdEdhcCA9IHNpZ25hbCgwKTtcblxuICAvKiogQSBzaWduYWwtYmFzZWQgYWxpYXMgZm9yIHRoZSBvcmllbnRhdGlvbiBpbnB1dCBmb3IgaW50ZXJuYWwgdXNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9IHRoaXMuZHJvcExpc3RPcmllbnRhdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuZGF0YXNldFsnYXhEcm9wTGlzdCddID0gJ3RydWUnO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy10cmFuc2l0aW9uJyk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBQdWJsaWMgTWV0aG9kcyAoZm9yIGludGVybmFsIGxpYnJhcnkgdXNlKSAtLS1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBnaXZlbiBkcmFnIGl0ZW0gaXMgdGhlIG9uZSBjdXJyZW50bHkgYWN0aXZlIGluIHRoaXMgbGlzdC4gKi9cbiAgaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW06IEFYRHJhZ0RpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpID09PSBkcmFnSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBmb3Igc29ydGluZyB3aGVuIGEgZHJhZyBvcGVyYXRpb24gc3RhcnRzIGZyb20gd2l0aGluIHRoaXMgbGlzdC5cbiAgICogQHBhcmFtIGRyYWdJdGVtIFRoZSBpdGVtIHRoYXQgaXMgYmVpbmcgZHJhZ2dlZC5cbiAgICovXG4gIHByZXBhcmVTb3J0KGRyYWdJdGVtOiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0aW5nRGlzYWJsZWQoKSB8fCB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9hY3RpdmVEcmFnSXRlbS5zZXQoZHJhZ0l0ZW0pO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1kcm9wLWxpc3Qtc29ydGluZy1hY3RpdmUnKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlR2VvbWV0cnkoKTtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZHggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZGF0YSkgPT4gZGF0YS5pdGVtID09PSBkcmFnSXRlbSk7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KHBsYWNlaG9sZGVySWR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSBsaXN0IGZvciByZWNlaXZpbmcgYW4gaXRlbSB0aGF0IHN0YXJ0ZWQgZHJhZ2dpbmcgZnJvbSBhbm90aGVyIGxpc3QuXG4gICAqIEBwYXJhbSBkcmFnSXRlbSBUaGUgaXRlbSBlbnRlcmluZyB0aGlzIGxpc3QuXG4gICAqL1xuICBlbnRlcihkcmFnSXRlbTogQVhEcmFnRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHwgdGhpcy5pc0RyYWdBY3RpdmVGb3JUaGlzTGlzdChkcmFnSXRlbSkpIHJldHVybjtcblxuICAgIHRoaXMuX2FjdGl2ZURyYWdJdGVtLnNldChkcmFnSXRlbSk7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWRyb3AtbGlzdC1zb3J0aW5nLWFjdGl2ZScpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLl9jYWNoZUdlb21ldHJ5KCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBuZXcgcGxhY2Vob2xkZXIgaW5kZXggYmFzZWQgb24gdGhlIHBvaW50ZXIncyBwb3NpdGlvbiBhbmQgYXBwbGllcyB2aXN1YWwgc2hpZnRzLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBvaW50ZXIgbW92ZSBldmVudC5cbiAgICogQHBhcmFtIGRyYWdJdGVtIFRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXG4gICAqL1xuICBzb3J0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGRyYWdJdGVtOiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkgfHwgIXRoaXMuX2xpc3RJbml0aWFsUmVjdCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBwb2ludGVyUG9zaXRpb24gPSB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gZXZlbnQuY2xpZW50WSA6IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgbmV3UGxhY2Vob2xkZXJJbmRleCA9IHRoaXMuX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uKTtcblxuICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlckluZGV4KCkgIT09IG5ld1BsYWNlaG9sZGVySW5kZXgpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVySW5kZXguc2V0KG5ld1BsYWNlaG9sZGVySW5kZXgpO1xuICAgICAgdGhpcy5fYXBwbHlWaXN1YWxTaGlmdHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluYWxpemVzIHRoZSBkcm9wLCBlbWl0cyB0aGUgZHJvcCBldmVudCwgYW5kIHJlc2V0cyB0aGUgbGlzdCdzIHN0YXRlLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBvaW50ZXIgdXAgZXZlbnQuXG4gICAqIEBwYXJhbSBkcm9wcGVkSXRlbSBUaGUgaXRlbSB0aGF0IHdhcyBkcm9wcGVkLlxuICAgKiBAcGFyYW0gc291cmNlTGlzdCBUaGUgbGlzdCB3aGVyZSB0aGUgZHJhZyBvcmlnaW5hdGVkLlxuICAgKi9cbiAgZmluYWxpemVTb3J0KGV2ZW50OiBQb2ludGVyRXZlbnQsIGRyb3BwZWRJdGVtOiBBWERyYWdEaXJlY3RpdmUsIHNvdXJjZUxpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJvcHBlZEl0ZW0pIHx8IHRoaXMuc29ydGluZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMucmVzZXRTb3J0U3RhdGVBbmRTdHlsZXMoc291cmNlTGlzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZURyYWdJdGVtKCk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdEluZGV4ID0gdGhpcy5fcGxhY2Vob2xkZXJJbmRleCgpO1xuICAgIGlmICghYWN0aXZlSXRlbSB8fCB0YXJnZXRTbG90SW5kZXggPT09IC0xKSB7XG4gICAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBzb3VyY2VMaXN0Ll9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBBZGp1c3QgdGhlIGluZGV4IGZvciBhcnJheSBtdXRhdGlvbiBpZiBtb3ZpbmcgYW4gaXRlbSB0byBhIGxhdGVyIHBvc2l0aW9uIGluIHRoZSBzYW1lIGxpc3QuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID1cbiAgICAgIHNvdXJjZUxpc3QgPT09IHRoaXMgJiYgcHJldmlvdXNJbmRleCAhPT0gLTEgJiYgdGFyZ2V0U2xvdEluZGV4ID4gcHJldmlvdXNJbmRleFxuICAgICAgICA/IHRhcmdldFNsb3RJbmRleCAtIDFcbiAgICAgICAgOiB0YXJnZXRTbG90SW5kZXg7XG5cbiAgICB0aGlzLmRyb3BMaXN0RHJvcHBlZC5lbWl0KHtcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIGl0ZW06IGFjdGl2ZUl0ZW0sXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY29udGFpbmVyOiB0aGlzLFxuICAgICAgcHJldmlvdXNDb250YWluZXI6IHNvdXJjZUxpc3QsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3QpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgdHJhbnNmb3JtcyBvbiBhbGwgaXRlbXMgYW5kIGNhbmNlbHMgdGhlIGN1cnJlbnQgc29ydCBvcGVyYXRpb24uICovXG4gIGNhbmNlbFNvcnQoZHJhZ0l0ZW0/OiBBWERyYWdEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoZHJhZ0l0ZW0gJiYgIXRoaXMuaXNEcmFnQWN0aXZlRm9yVGhpc0xpc3QoZHJhZ0l0ZW0pKSByZXR1cm47XG4gICAgdGhpcy5fcmVzZXRBbGxUcmFuc2Zvcm1zKCk7XG4gICAgdGhpcy5yZXNldFNvcnRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0cmFuc2Zvcm1zIGJ1dCBrZWVwcyB0aGUgYWN0aXZlIHN0YXRlLCB1c2VkIHdoZW4gbW92aW5nIGJldHdlZW4gbGlzdHMuICovXG4gIGNhbmNlbFNvcnRQcmV2aWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKSkgcmV0dXJuO1xuICAgIHRoaXMuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpKTtcbiAgICB0aGlzLl9wbGFjZWhvbGRlckluZGV4LnNldChvcmlnaW5hbEluZGV4ID4gLTEgPyBvcmlnaW5hbEluZGV4IDogLTEpO1xuICB9XG5cbiAgLy8gLS0tIFByaXZhdGUgSGVscGVyIE1ldGhvZHMgLS0tXG5cbiAgLyoqIENhY2hlcyB0aGUgZ2VvbWV0cnkgb2YgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBkcmFnLiAqL1xuICBwcml2YXRlIF9jYWNoZUdlb21ldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQodGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLl9kZXRlY3RBbmRDYWNoZUxpc3RHYXAoKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZHJhZ2dhYmxlSXRlbXMoKS5tYXAoKGl0ZW1EcmFnZ2FibGUpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbURyYWdnYWJsZS5lbGVtZW50KCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW06IGl0ZW1EcmFnZ2FibGUsXG4gICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICBpbml0aWFsUmVjdDogcmVjdCxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIG1hcmdpbnM6IHtcbiAgICAgICAgICB0b3A6IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wKSxcbiAgICAgICAgICBib3R0b206IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKSxcbiAgICAgICAgICBsZWZ0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpLFxuICAgICAgICAgIHJpZ2h0OiBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblJpZ2h0KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY2FjaGVkSXRlbXMuc2V0KGl0ZW1zKTtcbiAgfVxuXG4gIC8qKiBEZXRlY3RzIGFuZCBjYWNoZXMgdGhlIGBnYXBgIHByb3BlcnR5IGZyb20gdGhlIGxpc3QncyBjb21wdXRlZCBzdHlsZXMuICovXG4gIHByaXZhdGUgX2RldGVjdEFuZENhY2hlTGlzdEdhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpO1xuICAgIGNvbnN0IGdhcFZhbHVlID0gbGlzdFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2dhcCcpO1xuICAgIGlmIChnYXBWYWx1ZSAmJiBnYXBWYWx1ZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgIGNvbnN0IGdhcFBhcnRzID0gZ2FwVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IHJvd0dhcCA9IHBhcnNlRmxvYXQoZ2FwUGFydHNbMF0pO1xuICAgICAgY29uc3QgY29sdW1uR2FwID0gcGFyc2VGbG9hdChnYXBQYXJ0c1sxXSB8fCBnYXBQYXJ0c1swXSk7XG4gICAgICB0aGlzLl9saXN0R2FwLnNldCh0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnID8gcm93R2FwIDogY29sdW1uR2FwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG5ldyBwbGFjZWhvbGRlciBpbmRleCBieSBjb21wYXJpbmcgdGhlIHBvaW50ZXIgcG9zaXRpb24gYWdhaW5zdCB0aGVcbiAgICogbWlkcG9pbnRzIG9mIHRoZSBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHBvaW50ZXJQb3NpdGlvbiBUaGUgY2xpZW50WCBvciBjbGllbnRZIG9mIHRoZSBwb2ludGVyLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBwbGFjZWhvbGRlciBpbmRleC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBsYWNlaG9sZGVySW5kZXgocG9pbnRlclBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVEcmFnSXRlbSgpO1xuICAgIGNvbnN0IGxpc3RSZWN0ID0gdGhpcy5fbGlzdEluaXRpYWxSZWN0KCk7XG4gICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbHRlcigoZCkgPT4gZC5pdGVtICE9PSBhY3RpdmVJdGVtKTtcbiAgICBjb25zdCBzY3JvbGxEZWx0YSA9XG4gICAgICB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnXG4gICAgICAgID8gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGxpc3RSZWN0LnRvcFxuICAgICAgICA6IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbGlzdFJlY3QubGVmdDtcblxuICAgIGxldCBuZXdJbmRleEluU2libGluZ3MgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgICBjb25zdCBpdGVtTWlkUG9pbnQgPVxuICAgICAgICAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJyA/IHNpYmxpbmcuaW5pdGlhbFJlY3QudG9wIDogc2libGluZy5pbml0aWFsUmVjdC5sZWZ0KSArXG4gICAgICAgIHNjcm9sbERlbHRhICtcbiAgICAgICAgKHRoaXMuX29yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgPyBzaWJsaW5nLmhlaWdodCA6IHNpYmxpbmcud2lkdGgpIC8gMjtcblxuICAgICAgaWYgKHBvaW50ZXJQb3NpdGlvbiA8IGl0ZW1NaWRQb2ludCkge1xuICAgICAgICBuZXdJbmRleEluU2libGluZ3MgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3SW5kZXhJblNpYmxpbmdzID09PSAtMSkge1xuICAgICAgbmV3SW5kZXhJblNpYmxpbmdzID0gc2libGluZ3MubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsSW5kZXggPSB0aGlzLl9jYWNoZWRJdGVtcygpLmZpbmRJbmRleCgoZCkgPT4gZC5pdGVtID09PSBhY3RpdmVJdGVtKTtcbiAgICAvLyBNYXAgdGhlIGluZGV4IGZyb20gdGhlICdzaWJsaW5ncycgYXJyYXkgYmFjayB0byB0aGUgb3JpZ2luYWwgYF9jYWNoZWRJdGVtc2AgYXJyYXkuXG4gICAgcmV0dXJuIG9yaWdpbmFsSW5kZXggPiAtMSAmJiBuZXdJbmRleEluU2libGluZ3MgPj0gb3JpZ2luYWxJbmRleCA/IG5ld0luZGV4SW5TaWJsaW5ncyArIDEgOiBuZXdJbmRleEluU2libGluZ3M7XG4gIH1cblxuICAvKiogQXBwbGllcyBgdHJhbnNmb3JtYCBzdHlsZXMgdG8gYWxsIGl0ZW1zIHRvIGNyZWF0ZSB0aGUgdmlzdWFsIHNvcnRpbmcgZWZmZWN0LiAqL1xuICBwcml2YXRlIF9hcHBseVZpc3VhbFNoaWZ0cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fYWN0aXZlRHJhZ0l0ZW0oKTtcbiAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0gdGhpcy5fY2FjaGVkSXRlbXMoKS5maW5kSW5kZXgoKGQpID0+IGQuaXRlbSA9PT0gYWN0aXZlSXRlbSk7XG4gICAgY29uc3QgaXNJbnRyYUxpc3REcmFnID0gb3JpZ2luYWxJbmRleCA+IC0xO1xuXG4gICAgLy8gQSBoZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBzcGFjZSBhbiBpdGVtIG9jY3VwaWVzIChzaXplICsgbWFyZ2lucykuXG4gICAgY29uc3QgZ2V0SXRlbVNwYWNlID0gKGl0ZW1EYXRhOiBEcm9wTGlzdEl0ZW1EYXRhKSA9PlxuICAgICAgdGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IGl0ZW1EYXRhLmhlaWdodCArIGl0ZW1EYXRhLm1hcmdpbnMudG9wICsgaXRlbURhdGEubWFyZ2lucy5ib3R0b21cbiAgICAgICAgOiBpdGVtRGF0YS53aWR0aCArIGl0ZW1EYXRhLm1hcmdpbnMubGVmdCArIGl0ZW1EYXRhLm1hcmdpbnMucmlnaHQ7XG5cbiAgICBsZXQgZHJhZ2dlZEl0ZW1TaXplID0gMDtcbiAgICBpZiAoaXNJbnRyYUxpc3REcmFnKSB7XG4gICAgICBkcmFnZ2VkSXRlbVNpemUgPSBnZXRJdGVtU3BhY2UodGhpcy5fY2FjaGVkSXRlbXMoKVtvcmlnaW5hbEluZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBhY3RpdmVJdGVtLmVsZW1lbnRSZWN0KCk7XG4gICAgICBpZiAocmVjdCkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGFjdGl2ZUl0ZW0uZWxlbWVudCgpKTtcbiAgICAgICAgZHJhZ2dlZEl0ZW1TaXplID1cbiAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnXG4gICAgICAgICAgICA/IHJlY3QuaGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20pXG4gICAgICAgICAgICA6IHJlY3Qud2lkdGggKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkxlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5SaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2FjaGVkSXRlbXMoKS5mb3JFYWNoKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGluZGV4LCBvcmlnaW5hbEluZGV4LCBkcmFnZ2VkSXRlbVNpemUsIGdldEl0ZW1TcGFjZSk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgdHJhbnNmb3JtID8gYCR7dGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJyA/ICd0cmFuc2xhdGVZJyA6ICd0cmFuc2xhdGVYJ30oJHt0cmFuc2Zvcm19cHgpYCA6ICcnLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSByZXF1aXJlZCB0cmFuc2Zvcm0gaW4gcGl4ZWxzIGZvciBhIHNpbmdsZSBpdGVtLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIG9yaWdpbmFsSW5kZXggVGhlIG9yaWdpbmFsIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGl0ZW0gKC0xIGlmIGZyb20gYW5vdGhlciBsaXN0KS5cbiAgICogQHBhcmFtIGRyYWdnZWRJdGVtU2l6ZSBUaGUgc2l6ZSAoaW5jbHVkaW5nIG1hcmdpbnMpIG9mIHRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXG4gICAqIEBwYXJhbSBnZXRJdGVtU3BhY2UgQSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGFuIGl0ZW0ncyBzaXplIGluY2x1ZGluZyBtYXJnaW5zLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtIHZhbHVlIGluIHBpeGVscy5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVRyYW5zZm9ybShcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcixcbiAgICBkcmFnZ2VkSXRlbVNpemU6IG51bWJlcixcbiAgICBnZXRJdGVtU3BhY2U6IChpdGVtOiBEcm9wTGlzdEl0ZW1EYXRhKSA9PiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9wbGFjZWhvbGRlckluZGV4KCk7XG4gICAgY29uc3QgbGlzdEdhcCA9IHRoaXMuX2xpc3RHYXAoKTtcblxuICAgIGlmIChvcmlnaW5hbEluZGV4ID4gLTEpIHtcbiAgICAgIC8vIC0tLSBJbnRyYS1saXN0IERyYWcgLS0tXG4gICAgICBpZiAoaW5kZXggPT09IG9yaWdpbmFsSW5kZXgpIHtcbiAgICAgICAgLy8gVGhlIGRyYWdnZWQgaXRlbSBtb3ZlcyBieSB0aGUgc3VtIG9mIHRoZSBzaXplcyBvZiB0aGUgaXRlbXMgaXQgcGFzc2VzIG92ZXIsIFBMVVMgdGhlIGdhcHMgYmV0d2VlbiB0aGVtLlxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID4gb3JpZ2luYWxJbmRleCkge1xuICAgICAgICAgIC8vIERyYWdnaW5nIGRvd24vcmlnaHRcbiAgICAgICAgICBmb3IgKGxldCBpID0gb3JpZ2luYWxJbmRleCArIDE7IGkgPCB0YXJnZXRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBvZmZzZXQgKz0gZ2V0SXRlbVNwYWNlKHRoaXMuX2NhY2hlZEl0ZW1zKClbaV0pICsgbGlzdEdhcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRHJhZ2dpbmcgdXAvbGVmdFxuICAgICAgICAgIGZvciAobGV0IGkgPSB0YXJnZXRJbmRleDsgaSA8IG9yaWdpbmFsSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgb2Zmc2V0IC09IGdldEl0ZW1TcGFjZSh0aGlzLl9jYWNoZWRJdGVtcygpW2ldKSArIGxpc3RHYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGEgc2libGluZyBpdGVtIHRoYXQgbmVlZHMgdG8gbWFrZSBzcGFjZS5cbiAgICAgICAgLy8gSXQgbW92ZXMgYnkgdGhlIHNpemUgb2YgdGhlIGRyYWdnZWQgaXRlbSwgcGx1cyBPTkUgZ2FwIHRvIGZpbGwgdGhlIHZvaWQuXG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZHJhZ2dlZEl0ZW1TaXplICsgbGlzdEdhcDtcbiAgICAgICAgaWYgKG9yaWdpbmFsSW5kZXggPCB0YXJnZXRJbmRleCAmJiBpbmRleCA+IG9yaWdpbmFsSW5kZXggJiYgaW5kZXggPCB0YXJnZXRJbmRleCkge1xuICAgICAgICAgIHJldHVybiAtc2hpZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxJbmRleCA+IHRhcmdldEluZGV4ICYmIGluZGV4ID49IHRhcmdldEluZGV4ICYmIGluZGV4IDwgb3JpZ2luYWxJbmRleCkge1xuICAgICAgICAgIHJldHVybiBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLS0gSW50ZXItbGlzdCBEcmFnIChmcm9tIGFub3RoZXIgbGlzdCkgLS0tXG4gICAgICBpZiAoaW5kZXggPj0gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgLy8gQW4gaXRlbSBmcm9tIGFub3RoZXIgbGlzdCBlbnRlcnMuIFNpYmxpbmdzIHNoaWZ0IGJ5IGl0cyBzaXplIHBsdXMgT05FIGdhcC5cbiAgICAgICAgcmV0dXJuIGRyYWdnZWRJdGVtU2l6ZSArIGxpc3RHYXA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgc3RhdGUgb2YgdGhpcyBsaXN0IGFuZCB0aGUgc291cmNlIGxpc3QgYWZ0ZXIgYSBkcm9wLiAqL1xuICBwcml2YXRlIHJlc2V0U29ydFN0YXRlQW5kU3R5bGVzKHNvdXJjZUxpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0c1RvUmVzZXQgPSBuZXcgU2V0KFt0aGlzLCBzb3VyY2VMaXN0XSk7XG4gICAgbGlzdHNUb1Jlc2V0LmZvckVhY2goKGxpc3QpID0+IHtcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgIGxpc3QuX3Jlc2V0QWxsVHJhbnNmb3JtcygpO1xuICAgICAgICBsaXN0LnJlc2V0U29ydFN0YXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhbGwgYHRyYW5zZm9ybWAgc3R5bGVzIGZyb20gdGhlIGl0ZW1zIGluIHRoaXMgbGlzdC4gKi9cbiAgcHJpdmF0ZSBfcmVzZXRBbGxUcmFuc2Zvcm1zKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zKCkuZm9yRWFjaCgoZGF0YSkgPT4gdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZGF0YS5lbGVtZW50LCAndHJhbnNmb3JtJywgJycpKTtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBkaXJlY3RpdmUgdG8gaXRzIGluaXRpYWwgdmFsdWVzLiAqL1xuICByZXNldFNvcnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZHJvcC1saXN0LXNvcnRpbmctYWN0aXZlJyk7XG4gICAgdGhpcy5fYWN0aXZlRHJhZ0l0ZW0uc2V0KG51bGwpO1xuICAgIHRoaXMuX2NhY2hlZEl0ZW1zLnNldChbXSk7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXJJbmRleC5zZXQoLTEpO1xuICAgIHRoaXMuX2xpc3RJbml0aWFsUmVjdC5zZXQobnVsbCk7XG4gICAgdGhpcy5fbGlzdEdhcC5zZXQoMCk7XG4gIH1cbn1cbiJdfQ==","import { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, computed, contentChild, Directive, DOCUMENT, effect, ElementRef, inject, input, linkedSignal, NgZone, output, PLATFORM_ID, Renderer2, RendererStyleFlags2, signal, ViewContainerRef, } 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\";\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);\n this.dragData = input();\n this.dragDisabled = input(false);\n this.dragTransition = input(true);\n this.dragElementClone = input(false);\n this.dropZoneGroup = input();\n this.dragStartDelay = input();\n this.dragResetOnDblClick = input(true);\n this.dragLockAxis = input(null);\n this.dragClonedTemplate = input();\n this.dragCursor = input('move');\n this.dragBoundary = input();\n this.dragTransitionDuration = input(150);\n this.dragPositionChanged = output();\n this.clonedElement = signal(null);\n this.currentAxis = signal({ x: 0, y: 0 });\n this.currentCloneAxis = signal({ x: 0, y: 0 });\n this.transitionDuration = linkedSignal(() => this.dragTransitionDuration());\n this.element = signal(this.el.nativeElement);\n this.isMoving = signal(false);\n this.isDragging = signal(false);\n this.elementOpacity = signal('1');\n this.isDelayStarted = signal(false);\n this.prevDropZone = signal(null);\n this.dragStartOffset = signal({ x: 0, y: 0 });\n this.clonePointerOffset = signal({ x: 0, y: 0 });\n this.clonedElementViewRef = signal(null);\n this._parentDropList = inject(AXDropListDirective, { optional: true, skipSelf: true, host: false });\n this._currentDropList = signal(null);\n this.createCloneElement = computed(() => this.dragElementClone() || !!this._parentDropList);\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 });\n this.elementRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.element().getBoundingClientRect();\n });\n this.boundaryRect = computed(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return this.boundaryElement()?.getBoundingClientRect();\n });\n this.handle = computed(() => this.handleDirective()?.element() ?? this.element());\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.#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 });\n }\n #dragDisabledEffect;\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n this.zone.runOutsideAngular(() => {\n this.handle().addEventListener('dblclick', this.boundHandleDblClick);\n this.handle().addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });\n });\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 this.handle().removeEventListener('dblclick', this.boundHandleDblClick);\n this.handle().removeEventListener('pointerdown', this.boundHandlePointerDown);\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.dragDisabled() || e.button !== 0)\n return;\n this.isDragging.set(true);\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 e.stopPropagation();\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.handle().setPointerCapture(e.pointerId);\n this.addDocumentListeners();\n if (this.dragStartDelay()) {\n this.isDelayStarted.set(true);\n setTimeout(() => {\n if (this.isDragging()) {\n this.isDelayStarted.set(false);\n this.startDrag(e);\n }\n }, this.dragStartDelay());\n }\n else {\n this.startDrag(e);\n }\n }\n startDrag(e) {\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 this.createCloneElementHandler(this.element());\n }\n }\n handlePointerUp(e) {\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 if (!isPlatformBrowser(this.platformId))\n return;\n if (!this.isDragging())\n return;\n if (this.dragCursor() === 'grab') {\n this.renderer.setStyle(this.handle(), 'cursor', 'grab');\n }\n const wasMoving = this.isMoving();\n this.isDragging.set(false);\n if (wasMoving) {\n this.preventClicking();\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 this._currentDropList.set(null);\n this.isMoving.set(false);\n this.renderer.removeStyle(this.handle(), 'userSelect');\n if (this.handle().hasPointerCapture(e.pointerId)) {\n this.handle().releasePointerCapture(e.pointerId);\n }\n this.removeDocumentListeners();\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 handleDblClick() {\n if (!this.dragResetOnDblClick() || this.dragDisabled())\n return;\n this.setPosition(0, 0);\n }\n handlePointerMove(e) {\n if (!isPlatformBrowser(this.platformId) || !this.isDragging() || this.isDelayStarted())\n return;\n e.preventDefault();\n if (!this.isMoving()) {\n this.isMoving.set(true);\n }\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 if (this._parentDropList) {\n this.handleDropListInteractions(e);\n }\n else {\n this.dropZoneHoverHandler(e);\n }\n }\n handleDropListInteractions(e) {\n const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);\n const previousList = this._currentDropList();\n let targetList = null;\n if (listUnderPointer && this.canDropInList(listUnderPointer)) {\n targetList = listUnderPointer;\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 return !!dragGroup && dragGroup === targetGroup;\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 dropListElement = this.document\n .elementsFromPoint(x, y)\n .find((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');\n return dropListElement ? dropListElement['__axContext__'] : null;\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 this.currentAxis.set({ x: constrainedX, y: constrainedY });\n this.renderer.setStyle(this.element(), 'translate', `${constrainedX}px ${constrainedY}px`);\n this.dragPositionChanged.emit(this.currentAxis());\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 this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });\n this.renderer.setStyle(cloneEl, 'translate', `${constrainedX}px ${constrainedY}px`);\n this.dragPositionChanged.emit(this.currentCloneAxis());\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 (e) {\n console.log(e);\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 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.0.4\", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXDragDirective, isStandalone: true, selector: \"[axDrag]\", inputs: { 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.0.4\", ngImport: i0, type: AXDragDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDrag]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvZHJhZy1kcm9wL3NyYy9saWIvZHJhZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFFVixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBR04sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLE1BQU0sRUFFTixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRNUQsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFJVSxTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxPQUFFLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIs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LHFCQUFxQjs7MkZBUmpELGVBQWU7a0JBSDNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRE9DVU1FTlQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBsaW5rZWRTaWduYWwsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyb3BMaXN0RGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wLWxpc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Atem9uZS5kaXJlY3RpdmUnO1xuXG50eXBlIEFYUG9zaXRpb25UeXBlID0geyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhEcmFnXScsXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGVsID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBoYW5kbGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoQVhEcmFnSGFuZGxlRGlyZWN0aXZlKTtcblxuICBkcmFnRGF0YSA9IGlucHV0KCk7XG4gIGRyYWdEaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1RyYW5zaXRpb24gPSBpbnB1dCh0cnVlKTtcbiAgZHJhZ0VsZW1lbnRDbG9uZSA9IGlucHV0KGZhbHNlKTtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dDxudW1iZXI+KCk7XG4gIGRyYWdSZXNldE9uRGJsQ2xpY2sgPSBpbnB1dCh0cnVlKTtcbiAgZHJhZ0xvY2tBeGlzID0gaW5wdXQ8J3gnIHwgJ3knIHwgbnVsbD4obnVsbCk7XG4gIGRyYWdDbG9uZWRUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBkcmFnQ3Vyc29yID0gaW5wdXQ8J21vdmUnIHwgJ2dyYWInIHwgJ25vbmUnPignbW92ZScpO1xuICBkcmFnQm91bmRhcnkgPSBpbnB1dDxzdHJpbmcgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PigpO1xuICBkcmFnVHJhbnNpdGlvbkR1cmF0aW9uID0gaW5wdXQ8bnVtYmVyPigxNTApO1xuXG4gIGRyYWdQb3NpdGlvbkNoYW5nZWQgPSBvdXRwdXQ8QVhQb3NpdGlvblR5cGU+KCk7XG5cbiAgY2xvbmVkRWxlbWVudCA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50QXhpcyA9IHNpZ25hbDxBWFBvc2l0aW9uVHlwZT4oeyB4OiAwLCB5OiAwIH0pO1xuICBjdXJyZW50Q2xvbmVBeGlzID0gc2lnbmFsPEFYUG9zaXRpb25UeXBlPih7IHg6IDAsIHk6IDAgfSk7XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IGxpbmtlZFNpZ25hbCgoKSA9PiB0aGlzLmRyYWdUcmFuc2l0aW9uRHVyYXRpb24oKSk7XG4gIHJlYWRvbmx5IGVsZW1lbnQgPSBzaWduYWw8SFRNTEVsZW1lbnQ+KHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gIHByaXZhdGUgaXNNb3ZpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGVsZW1lbnRPcGFjaXR5ID0gc2lnbmFsPHN0cmluZz4oJzEnKTtcbiAgcHJpdmF0ZSBpc0RlbGF5U3RhcnRlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcHJldkRyb3Bab25lID0gc2lnbmFsPEFYRHJvcFpvbmVEaXJlY3RpdmUgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBkcmFnU3RhcnRPZmZzZXQgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBjbG9uZVBvaW50ZXJPZmZzZXQgPSBzaWduYWw8QVhQb3NpdGlvblR5cGU+KHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBjbG9uZWRFbGVtZW50Vmlld1JlZiA9IHNpZ25hbDxFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIF9wYXJlbnREcm9wTGlzdCA9IGluamVjdChBWERyb3BMaXN0RGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSwgaG9zdDogZmFsc2UgfSk7XG4gIHByaXZhdGUgX2N1cnJlbnREcm9wTGlzdCA9IHNpZ25hbDxBWERyb3BMaXN0RGlyZWN0aXZlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGNyZWF0ZUNsb25lRWxlbWVudCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMuZHJhZ0VsZW1lbnRDbG9uZSgpIHx8ICEhdGhpcy5fcGFyZW50RHJvcExpc3QpO1xuXG4gIHByaXZhdGUgYm91bmRhcnlFbGVtZW50ID0gY29tcHV0ZWQ8SFRNTEVsZW1lbnQgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgYm91bmRhcnkgPSB0aGlzLmRyYWdCb3VuZGFyeSgpO1xuICAgIGlmICghYm91bmRhcnkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvdW5kYXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYm91bmRhcnkpO1xuICAgIH1cbiAgICByZXR1cm4gYm91bmRhcnkgaW5zdGFuY2VvZiBFbGVtZW50UmVmID8gYm91bmRhcnkubmF0aXZlRWxlbWVudCA6IGJvdW5kYXJ5O1xuICB9KTtcblxuICByZWFkb25seSBlbGVtZW50UmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgYm91bmRhcnlSZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJvdW5kYXJ5RWxlbWVudCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBoYW5kbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhhbmRsZURpcmVjdGl2ZSgpPy5lbGVtZW50KCkgPz8gdGhpcy5lbGVtZW50KCkpO1xuXG4gIHByaXZhdGUgYm91bmRIYW5kbGVEYmxDbGljayA9IHRoaXMuaGFuZGxlRGJsQ2xpY2suYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBib3VuZEhhbmRsZVBvaW50ZXJVcCA9IHRoaXMuaGFuZGxlUG9pbnRlclVwLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRIYW5kbGVQb2ludGVyRG93biA9IHRoaXMuaGFuZGxlUG9pbnRlckRvd24uYmluZCh0aGlzKTtcbiAgcHJpdmF0ZSBib3VuZEhhbmRsZVBvaW50ZXJNb3ZlID0gdGhpcy5oYW5kbGVQb2ludGVyTW92ZS5iaW5kKHRoaXMpO1xuXG4gICNkcmFnRGlzYWJsZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRyYWdDdXJzb3IoKSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kcmFnRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgdGhpcy5kcmFnQ3Vyc29yKCkpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAndG91Y2gtYWN0aW9uJywgJ25vbmUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuaGFuZGxlKCksICd0b3VjaC1hY3Rpb24nKTtcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZSgpLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5ib3VuZEhhbmRsZURibENsaWNrKTtcbiAgICAgICAgdGhpcy5oYW5kbGUoKS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyRG93biwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0KSB7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudFRyYW5zaXRpb24odGhpcy5lbGVtZW50KCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQoKSwgJ3otaW5kZXgnLCAnMScpO1xuICAgICAgdGhpcy5lbGVtZW50T3BhY2l0eS5zZXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQoKSkub3BhY2l0eSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLmJvdW5kSGFuZGxlRGJsQ2xpY2spO1xuICAgICAgdGhpcy5oYW5kbGUoKS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyRG93bik7XG4gICAgICB0aGlzLnJlbW92ZURvY3VtZW50TGlzdGVuZXJzKCk7XG4gICAgICBpZiAodGhpcy5jcmVhdGVDbG9uZUVsZW1lbnQoKSkge1xuICAgICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3BhcmVudERyb3BMaXN0ICYmIHRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LmNhbmNlbFNvcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVsZW1lbnRUcmFuc2l0aW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAndHJhbnNpdGlvbi1wcm9wZXJ0eScsICd0cmFuc2Zvcm0sIG9wYWNpdHksIHRyYW5zbGF0ZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAgICAgYHZhcigtLWF4LXN5cy10cmFuc2l0aW9uLWR1cmF0aW9uLCR7dGhpcy50cmFuc2l0aW9uRHVyYXRpb24oKX1tcylgLFxuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCAndmFyKC0tYXgtc3lzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKScpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVFbGVtZW50VHJhbnNpdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3RyYW5zaXRpb24tcHJvcGVydHknLCAnb3BhY2l0eScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludGVyRG93bihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5kcmFnRGlzYWJsZWQoKSB8fCBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nLnNldCh0cnVlKTtcblxuICAgIGlmICh0aGlzLmRyYWdDdXJzb3IoKSA9PT0gJ21vdmUnKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGFuZGxlKCksICdjdXJzb3InLCAnbW92ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdncmFiJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgJ2dyYWJiaW5nJyk7XG4gICAgfVxuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuZHJhZ1N0YXJ0T2Zmc2V0LnNldCh7IHg6IGUuY2xpZW50WCAtIHRoaXMuY3VycmVudEF4aXMoKS54LCB5OiBlLmNsaWVudFkgLSB0aGlzLmN1cnJlbnRBeGlzKCkueSB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGFuZGxlKCksICd1c2VyU2VsZWN0JywgJ25vbmUnKTtcbiAgICB0aGlzLmhhbmRsZSgpLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICB0aGlzLmFkZERvY3VtZW50TGlzdGVuZXJzKCk7XG5cbiAgICBpZiAodGhpcy5kcmFnU3RhcnREZWxheSgpKSB7XG4gICAgICB0aGlzLmlzRGVsYXlTdGFydGVkLnNldCh0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLmlzRGVsYXlTdGFydGVkLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMuZHJhZ1N0YXJ0RGVsYXkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREcmFnKGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREcmFnKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgdGhpcy5fY3VycmVudERyb3BMaXN0LnNldCh0aGlzLl9wYXJlbnREcm9wTGlzdCk7XG4gICAgICB0aGlzLl9wYXJlbnREcm9wTGlzdC5wcmVwYXJlU29ydCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wWm9uZUhvdmVySGFuZGxlcihlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jcmVhdGVDbG9uZUVsZW1lbnQoKSkge1xuICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSB0aGlzLmVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0LnNldCh7XG4gICAgICAgIHg6IGUuY2xpZW50WCAtIGVsZW1lbnRSZWN0LmxlZnQsXG4gICAgICAgIHk6IGUuY2xpZW50WSAtIGVsZW1lbnRSZWN0LnRvcCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jcmVhdGVDbG9uZUVsZW1lbnRIYW5kbGVyKHRoaXMuZWxlbWVudCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBvaW50ZXJVcChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLmVsZW1lbnQoKS5zdHlsZS50cmFuc2Zvcm07XG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gMDtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB4ID0gTnVtYmVyKHRyYW5zZm9ybS5zcGxpdCgndHJhbnNsYXRlWCgnKVsxXT8uc3BsaXQoJ3B4KScpWzBdKTtcbiAgICAgIHkgPSBOdW1iZXIodHJhbnNmb3JtLnNwbGl0KCd0cmFuc2xhdGVZKCcpWzFdPy5zcGxpdCgncHgpJylbMF0pO1xuICAgIH1cbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kcmFnQ3Vyc29yKCkgPT09ICdncmFiJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmhhbmRsZSgpLCAnY3Vyc29yJywgJ2dyYWInKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YXNNb3ZpbmcgPSB0aGlzLmlzTW92aW5nKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nLnNldChmYWxzZSk7XG5cbiAgICBpZiAod2FzTW92aW5nKSB7XG4gICAgICB0aGlzLnByZXZlbnRDbGlja2luZygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyb3BwZWRJbnRvTGlzdCA9IHRoaXMuX2N1cnJlbnREcm9wTGlzdCgpO1xuICAgIGlmIChkcm9wcGVkSW50b0xpc3QgJiYgdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIGRyb3BwZWRJbnRvTGlzdC5maW5hbGl6ZVNvcnQoZSwgdGhpcywgdGhpcy5fcGFyZW50RHJvcExpc3QpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHRoaXMuX3BhcmVudERyb3BMaXN0LmNhbmNlbFNvcnQodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcFpvbmVEcm9wSGFuZGxlcihlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RHJvcExpc3Quc2V0KG51bGwpO1xuICAgIHRoaXMuaXNNb3Zpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuaGFuZGxlKCksICd1c2VyU2VsZWN0Jyk7XG4gICAgaWYgKHRoaXMuaGFuZGxlKCkuaGFzUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpKSB7XG4gICAgICB0aGlzLmhhbmRsZSgpLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmNyZWF0ZUNsb25lRWxlbWVudCgpKSB7XG4gICAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICB0aGlzLnJlbW92ZUNsb25lRWxlbWVudFdpdGhBbmltYXRpb24oeCB8fCAwLCB5IHx8IDAsIGxpc3RVbmRlclBvaW50ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCgpLCAnb3BhY2l0eScsIHRoaXMuZWxlbWVudE9wYWNpdHkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmV2ZW50Q2xpY2tpbmcoKSB7XG4gICAgY29uc3QgYmxvY2tDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJsb2NrQ2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSwgb25jZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGJsQ2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLmRyYWdSZXNldE9uRGJsQ2xpY2soKSB8fCB0aGlzLmRyYWdEaXNhYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQb3NpdGlvbigwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRlck1vdmUoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSB8fCB0aGlzLmlzRGVsYXlTdGFydGVkKCkpIHJldHVybjtcblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMuaXNNb3ZpbmcoKSkge1xuICAgICAgdGhpcy5pc01vdmluZy5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlYXRlQ2xvbmVFbGVtZW50KCkpIHtcbiAgICAgIGNvbnN0IG5ld0Nsb25lWCA9IGUuY2xpZW50WCAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueDtcbiAgICAgIGNvbnN0IG5ld0Nsb25lWSA9IGUuY2xpZW50WSAtIHRoaXMuY2xvbmVQb2ludGVyT2Zmc2V0KCkueTtcbiAgICAgIHRoaXMuc2V0Q2xvbmVQb3NpdGlvbihuZXdDbG9uZVgsIG5ld0Nsb25lWSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1ggPSBlLmNsaWVudFggLSB0aGlzLmRyYWdTdGFydE9mZnNldCgpLng7XG4gICAgICBjb25zdCBuZXdZID0gZS5jbGllbnRZIC0gdGhpcy5kcmFnU3RhcnRPZmZzZXQoKS55O1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbihuZXdYLCBuZXdZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHRoaXMuaGFuZGxlRHJvcExpc3RJbnRlcmFjdGlvbnMoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcFpvbmVIb3ZlckhhbmRsZXIoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wTGlzdEludGVyYWN0aW9ucyhlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBsaXN0VW5kZXJQb2ludGVyID0gdGhpcy5nZXREcm9wTGlzdEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgcHJldmlvdXNMaXN0ID0gdGhpcy5fY3VycmVudERyb3BMaXN0KCk7XG4gICAgbGV0IHRhcmdldExpc3Q6IEFYRHJvcExpc3REaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsaXN0VW5kZXJQb2ludGVyICYmIHRoaXMuY2FuRHJvcEluTGlzdChsaXN0VW5kZXJQb2ludGVyKSkge1xuICAgICAgdGFyZ2V0TGlzdCA9IGxpc3RVbmRlclBvaW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldExpc3QgIT09IHByZXZpb3VzTGlzdCkge1xuICAgICAgaWYgKHByZXZpb3VzTGlzdCkge1xuICAgICAgICBwcmV2aW91c0xpc3QuY2FuY2VsU29ydFByZXZpZXcoKTtcbiAgICAgICAgaWYgKHByZXZpb3VzTGlzdCAhPT0gdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgICAgICBwcmV2aW91c0xpc3QucmVzZXRTb3J0U3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldExpc3QpIHtcbiAgICAgICAgdGFyZ2V0TGlzdC5lbnRlcih0aGlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wTGlzdC5zZXQodGFyZ2V0TGlzdCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudERyb3BMaXN0KCk/LnNvcnQoZSwgdGhpcyk7XG4gIH1cblxuICBwcml2YXRlIGNhbkRyb3BJbkxpc3QobGlzdDogQVhEcm9wTGlzdERpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCBsaXN0LnNvcnRpbmdEaXNhYmxlZCgpIHx8ICF0aGlzLl9wYXJlbnREcm9wTGlzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobGlzdCA9PT0gdGhpcy5fcGFyZW50RHJvcExpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkcmFnR3JvdXAgPSB0aGlzLl9wYXJlbnREcm9wTGlzdC5kcm9wTGlzdEdyb3VwKCk7XG4gICAgY29uc3QgdGFyZ2V0R3JvdXAgPSBsaXN0LmRyb3BMaXN0R3JvdXAoKTtcbiAgICByZXR1cm4gISFkcmFnR3JvdXAgJiYgZHJhZ0dyb3VwID09PSB0YXJnZXRHcm91cDtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVIb3ZlckhhbmRsZXIoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcFpvbmVzID0gdGhpcy5nZXREcm9wWm9uZXNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGNvbnN0IGRyb3Bab25lID0gZHJvcFpvbmVzWzBdO1xuXG4gICAgaWYgKCFkcm9wWm9uZSkge1xuICAgICAgaWYgKHRoaXMucHJldkRyb3Bab25lKCkpIHtcbiAgICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSAmJiB0aGlzLnByZXZEcm9wWm9uZSgpICE9PSBkcm9wWm9uZSkge1xuICAgICAgdGhpcy5sZWF2ZVByZXZEcm9wWm9uZShlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wWm9uZVZhbGlkYXRpb24oZHJvcFpvbmUpICYmICFkcm9wWm9uZS5pc0hvdmVyZWQoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUuc2V0KGRyb3Bab25lKTtcbiAgICAgIGRyb3Bab25lLm9uRWxlbWVudEhvdmVyLmVtaXQoeyBzZW5kZXI6IGRyb3Bab25lLCBkcm9wcGVkOiB0aGlzLCBuYXRpdmVFdmVudDogZSwgc3RhdGU6ICdlbnRlcicgfSk7XG4gICAgICBkcm9wWm9uZS5pc0hvdmVyZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVEcm9wSGFuZGxlcihlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wWm9uZXMgPSB0aGlzLmdldERyb3Bab25lc0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgY29uc3QgZHJvcFpvbmUgPSBkcm9wWm9uZXNbMF07XG4gICAgaWYgKCF0aGlzLmRyb3Bab25lVmFsaWRhdGlvbihkcm9wWm9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJvcFpvbmUuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgZHJvcFpvbmUub25FbGVtZW50RHJvcC5lbWl0KHsgc2VuZGVyOiBkcm9wWm9uZSwgZHJvcHBlZDogdGhpcywgbmF0aXZlRXZlbnQ6IGUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERyb3Bab25lc0Zyb21Qb2ludCh4OiBudW1iZXIsIHk6IG51bWJlcik6IEFYRHJvcFpvbmVEaXJlY3RpdmVbXSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAuZmlsdGVyKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnYXhEcm9wWm9uZSddID09PSAndHJ1ZScpXG4gICAgICAubWFwKChlbCkgPT4gZWxbJ19fYXhDb250ZXh0X18nXSBhcyBBWERyb3Bab25lRGlyZWN0aXZlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcExpc3RGcm9tUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBWERyb3BMaXN0RGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ2F4RHJvcExpc3QnXSA9PT0gJ3RydWUnKTtcbiAgICByZXR1cm4gZHJvcExpc3RFbGVtZW50ID8gKGRyb3BMaXN0RWxlbWVudFsnX19heENvbnRleHRfXyddIGFzIEFYRHJvcExpc3REaXJlY3RpdmUpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZHJvcFpvbmVWYWxpZGF0aW9uKGRyb3Bab25lOiBBWERyb3Bab25lRGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcm9wWm9uZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRyYWdHcm91cCA9IHRoaXMuZHJvcFpvbmVHcm91cCgpO1xuICAgIGNvbnN0IGRyb3BHcm91cCA9IGRyb3Bab25lLmRyb3Bab25lR3JvdXAoKTtcbiAgICBpZiAoZHJvcEdyb3VwICYmIGRyYWdHcm91cCAhPT0gZHJvcEdyb3VwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBsZWF2ZVByZXZEcm9wWm9uZShlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcmV2RHJvcFpvbmUoKSkge1xuICAgICAgdGhpcy5wcmV2RHJvcFpvbmUoKS5vbkVsZW1lbnRIb3Zlci5lbWl0KHtcbiAgICAgICAgZHJvcHBlZDogdGhpcyxcbiAgICAgICAgc3RhdGU6ICdsZWF2ZScsXG4gICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgICBzZW5kZXI6IHRoaXMucHJldkRyb3Bab25lKCksXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJldkRyb3Bab25lKCkuaXNIb3ZlcmVkLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnByZXZEcm9wWm9uZS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBsZXQgY29uc3RyYWluZWRYID0geDtcbiAgICBsZXQgY29uc3RyYWluZWRZID0geTtcblxuICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvdW5kYXJ5UmVjdCA9IHRoaXMuYm91bmRhcnlSZWN0KCk7XG5cbiAgICBpZiAoYm91bmRhcnlSZWN0ICYmIGVsZW1lbnRSZWN0KSB7XG4gICAgICBjb25zdCBtaW5YID0gYm91bmRhcnlSZWN0LmxlZnQgLSBlbGVtZW50UmVjdC5sZWZ0O1xuICAgICAgY29uc3QgbWluWSA9IGJvdW5kYXJ5UmVjdC50b3AgLSBlbGVtZW50UmVjdC50b3A7XG4gICAgICBjb25zdCBtYXhYID0gbWluWCArIGJvdW5kYXJ5UmVjdC53aWR0aCAtIGVsZW1lbnRSZWN0LndpZHRoO1xuICAgICAgY29uc3QgbWF4WSA9IG1pblkgKyBib3VuZGFyeVJlY3QuaGVpZ2h0IC0gZWxlbWVudFJlY3QuaGVpZ2h0O1xuICAgICAgY29uc3RyYWluZWRYID0gY2xhbXAoeCwgbWluWCwgbWF4WCk7XG4gICAgICBjb25zdHJhaW5lZFkgPSBjbGFtcCh5LCBtaW5ZLCBtYXhZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3gnKSBjb25zdHJhaW5lZFkgPSB0aGlzLmN1cnJlbnRBeGlzKCkueTtcbiAgICBpZiAodGhpcy5kcmFnTG9ja0F4aXMoKSA9PT0gJ3knKSBjb25zdHJhaW5lZFggPSB0aGlzLmN1cnJlbnRBeGlzKCkueDtcblxuICAgIHRoaXMuY3VycmVudEF4aXMuc2V0KHsgeDogY29uc3RyYWluZWRYLCB5OiBjb25zdHJhaW5lZFkgfSk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQoKSwgJ3RyYW5zbGF0ZScsIGAke2NvbnN0cmFpbmVkWH1weCAke2NvbnN0cmFpbmVkWX1weGApO1xuICAgIHRoaXMuZHJhZ1Bvc2l0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuY3VycmVudEF4aXMoKSk7XG4gIH1cblxuICBzZXRDbG9uZVBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgbGV0IGNvbnN0cmFpbmVkWCA9IHg7XG4gICAgbGV0IGNvbnN0cmFpbmVkWSA9IHk7XG5cbiAgICBjb25zdCBjbG9uZUVsID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgY29uc3QgYm91bmRhcnlSZWN0ID0gdGhpcy5ib3VuZGFyeVJlY3QoKTtcblxuICAgIGlmIChib3VuZGFyeVJlY3QgJiYgY2xvbmVFbCkge1xuICAgICAgY29uc3QgY2xvbmVXaWR0aCA9IGNsb25lRWwub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjbG9uZUhlaWdodCA9IGNsb25lRWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBjb25zdHJhaW5lZFggPSBjbGFtcCh4LCBib3VuZGFyeVJlY3QubGVmdCwgYm91bmRhcnlSZWN0LnJpZ2h0IC0gY2xvbmVXaWR0aCk7XG4gICAgICBjb25zdHJhaW5lZFkgPSBjbGFtcCh5LCBib3VuZGFyeVJlY3QudG9wLCBib3VuZGFyeVJlY3QuYm90dG9tIC0gY2xvbmVIZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWdMb2NrQXhpcygpID09PSAneCcpIGNvbnN0cmFpbmVkWSA9IHRoaXMuY3VycmVudENsb25lQXhpcygpLnk7XG4gICAgaWYgKHRoaXMuZHJhZ0xvY2tBeGlzKCkgPT09ICd5JykgY29uc3RyYWluZWRYID0gdGhpcy5jdXJyZW50Q2xvbmVBeGlzKCkueDtcblxuICAgIHRoaXMuY3VycmVudENsb25lQXhpcy5zZXQoeyB4OiBjb25zdHJhaW5lZFgsIHk6IGNvbnN0cmFpbmVkWSB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lRWwsICd0cmFuc2xhdGUnLCBgJHtjb25zdHJhaW5lZFh9cHggJHtjb25zdHJhaW5lZFl9cHhgKTtcbiAgICB0aGlzLmRyYWdQb3NpdGlvbkNoYW5nZWQuZW1pdCh0aGlzLmN1cnJlbnRDbG9uZUF4aXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsb25lRWxlbWVudEhhbmRsZXIob3JpZ2luYWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmNsb25lZEVsZW1lbnQuc2V0KG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGNsb25lZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlID0gdGhpcy5kcmFnQ2xvbmVkVGVtcGxhdGUoKTtcblxuICAgIGNvbnN0IGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUgPSAoc291cmNlOiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNvdXJjZSk7XG5cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlcy5jc3NUZXh0ICYmIHRhcmdldC5zdHlsZS5jc3NUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRlbXBDc3NUZXh0ID0gY29tcHV0ZWRTdHlsZXMuY3NzVGV4dDtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY2xvbmVkRWxlbWVudCkge1xuICAgICAgICAgIHRlbXBDc3NUZXh0ID0gdGVtcENzc1RleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC9wb3NpdGlvbjpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3RvcDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2xlZnQ6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yaWdodDpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2JvdHRvbTpbXjtdKzsvZ2ksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3dpZHRoOlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvaGVpZ2h0OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvbWFyZ2luW147XSo6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2l0aW9uW147XSo6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2Zvcm06W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC90cmFuc2xhdGU6W147XSs7L2dpLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC96LWluZGV4OlteO10rOy9naSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvb3BhY2l0eTpbXjtdKzsvZ2ksICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wQ3NzVGV4dCA9IHRlbXBDc3NUZXh0LnJlcGxhY2UoL3BvaW50ZXItZXZlbnRzOlteO10rOy9naSwgJycpO1xuICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IHRlbXBDc3NUZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wdXRlZFN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gY29tcHV0ZWRTdHlsZXNbaV07XG4gICAgICAgICAgaWYgKHByb3BOYW1lID09PSAncG9pbnRlci1ldmVudHMnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0ID09PSBjbG9uZWRFbGVtZW50ICYmXG4gICAgICAgICAgICAocHJvcE5hbWUgPT09ICdwb3NpdGlvbicgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0b3AnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnbGVmdCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdyaWdodCcgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICdib3R0b20nIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnd2lkdGgnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnaGVpZ2h0JyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZS5zdGFydHNXaXRoKCdtYXJnaW4nKSB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZS5zdGFydHNXaXRoKCd0cmFuc2l0aW9uJykgfHxcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPT09ICd0cmFuc2Zvcm0nIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAndHJhbnNsYXRlJyB8fFxuICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ3otaW5kZXgnIHx8XG4gICAgICAgICAgICAgIHByb3BOYW1lID09PSAnb3BhY2l0eScpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcE5hbWUpLFxuICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BOYW1lKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzb3VyY2VDaGlsZHJlbiA9IEFycmF5LmZyb20oc291cmNlLmNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IHRhcmdldENoaWxkcmVuID0gQXJyYXkuZnJvbSh0YXJnZXQuY2hpbGRyZW4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc291cmNlQ2hpbGRyZW5baV0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXRDaGlsZHJlbltpXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgYXBwbHlDb21wdXRlZFN0eWxlc1JlY3Vyc2l2ZShzb3VyY2VDaGlsZHJlbltpXSBhcyBIVE1MRWxlbWVudCwgdGFyZ2V0Q2hpbGRyZW5baV0gYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21UZW1wbGF0ZSkge1xuICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY3VzdG9tVGVtcGxhdGUpO1xuICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQodmlld1JlZik7XG5cbiAgICAgIGlmICh2aWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAwICYmIHZpZXdSZWYucm9vdE5vZGVzWzBdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY2xvbmVkRWxlbWVudCA9IHZpZXdSZWYucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHZpZXdJbmRleCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHZpZXdSZWYpO1xuICAgICAgICBpZiAodmlld0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5kZXRhY2godmlld0luZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKSkge1xuICAgICAgICAgIHRoaXMuY2xvbmVkRWxlbWVudFZpZXdSZWYoKS5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdBWERyYWdEaXJlY3RpdmU6IGRyYWdDbG9uZWRUZW1wbGF0ZSBkaWQgbm90IHByb2R1Y2UgYSB2YWxpZCBIVE1MRWxlbWVudCByb290IG5vZGUuIEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGNsb25pbmcuJyxcbiAgICAgICAgKTtcbiAgICAgICAgY2xvbmVkRWxlbWVudCA9IG9yaWdpbmFsRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGFwcGx5Q29tcHV0ZWRTdHlsZXNSZWN1cnNpdmUob3JpZ2luYWxFbGVtZW50LCBjbG9uZWRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2xvbmVkRWxlbWVudCA9IG9yaWdpbmFsRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBhcHBseUNvbXB1dGVkU3R5bGVzUmVjdXJzaXZlKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lZEVsZW1lbnQuaWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGNsb25lZEVsZW1lbnQsICdpZCcpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9yaWdpbmFsRWxlbWVudCwgJ29wYWNpdHknLCAnMC41Jyk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFJlY3QgPSBvcmlnaW5hbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAncG9zaXRpb24nLCAnZml4ZWQnLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnbGVmdCcsICcwcHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd0b3AnLCAnMHB4Jyk7XG4gICAgaWYgKCFjdXN0b21UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnd2lkdGgnLCBgJHtvcmlnaW5hbFJlY3Qud2lkdGh9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ2hlaWdodCcsIGAke29yaWdpbmFsUmVjdC5oZWlnaHR9cHhgKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAnbWFyZ2luJywgJzAnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdib3gtc2l6aW5nJywgJ2JvcmRlci1ib3gnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICdvcGFjaXR5JywgJzAuNzUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd6LWluZGV4JywgJzEwMDAwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAncG9pbnRlci1ldmVudHMnLCAnbm9uZScsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZEVsZW1lbnQsICd1c2VyLXNlbGVjdCcsICdub25lJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRFbGVtZW50LCAndG91Y2gtYWN0aW9uJywgJ25vbmUnKTtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RyYW5zbGF0ZScsIGAke29yaWdpbmFsUmVjdC5sZWZ0fXB4ICR7b3JpZ2luYWxSZWN0LnRvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoY2xvbmVkRWxlbWVudCwgJ3RyYW5zaXRpb24nKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNsb25lZEVsZW1lbnQsICd0cmFuc2l0aW9uLXByb3BlcnR5Jyk7XG5cbiAgICB0aGlzLmNvcHlQc2V1ZG9FbGVtZW50U3R5bGVzKG9yaWdpbmFsRWxlbWVudCwgY2xvbmVkRWxlbWVudCwgJzo6YmVmb3JlJyk7XG4gICAgdGhpcy5jb3B5UHNldWRvRWxlbWVudFN0eWxlcyhvcmlnaW5hbEVsZW1lbnQsIGNsb25lZEVsZW1lbnQsICc6OmFmdGVyJyk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgY2xvbmVkRWxlbWVudCk7XG4gICAgdGhpcy5jbG9uZWRFbGVtZW50LnNldChjbG9uZWRFbGVtZW50KTtcbiAgICB0aGlzLnNldENsb25lUG9zaXRpb24ob3JpZ2luYWxSZWN0LmxlZnQsIG9yaWdpbmFsUmVjdC50b3ApO1xuXG4gICAgcmV0dXJuIGNsb25lZEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNvcHlQc2V1ZG9FbGVtZW50U3R5bGVzKHNvdXJjZTogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIHBzZXVkbzogJzo6YmVmb3JlJyB8ICc6OmFmdGVyJyk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwc2V1ZG9TdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzb3VyY2UsIHBzZXVkbyk7XG4gICAgY29uc3QgY29udGVudCA9IHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgY29uc3QgZGlzcGxheSA9IHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5Jyk7XG4gICAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQgPT09ICdub25lJyB8fCBkaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHNldWRvRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHNldWRvU3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IHBzZXVkb1N0eWxlc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBzZXVkb0VsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgcHNldWRvU3R5bGVzLmdldFByb3BlcnR5VmFsdWUocHJvcE5hbWUpLFxuICAgICAgICAgIHBzZXVkb1N0eWxlcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BOYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gU29tZSBwcm9wZXJ0aWVzIG1pZ2h0IGZhaWwgdG8gc2V0LCB3aGljaCBpcyB1c3VhbGx5IGZpbmUuXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJ1wiJykgJiYgY29udGVudC5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShwc2V1ZG9FbGVtZW50LCAndGV4dENvbnRlbnQnLCBjb250ZW50LnNsaWNlKDEsIC0xKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkocHNldWRvRWxlbWVudCwgJ3RleHRDb250ZW50JywgY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocHNldWRvRWxlbWVudCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgICBpZiAocHNldWRvID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0YXJnZXQsIHBzZXVkb0VsZW1lbnQsIHRhcmdldC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0YXJnZXQsIHBzZXVkb0VsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2xvbmVFbGVtZW50V2l0aEFuaW1hdGlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgZHJvcExpc3Q/OiBBWERyb3BMaXN0RGlyZWN0aXZlKSB7XG4gICAgZHJvcExpc3Q/Ll9kcmFnZ2FibGVJdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlRWxlbWVudFRyYW5zaXRpb24oaXRlbS5lbGVtZW50KCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZWRFbGVtZW50KCk7XG4gICAgaWYgKCFjbG9uZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQoKSwgJ29wYWNpdHknLCB0aGlzLmVsZW1lbnRPcGFjaXR5KCkpO1xuXG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSB0aGlzLmVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoZWxlbWVudFJlY3QpIHtcbiAgICAgIHRoaXMuc2V0RWxlbWVudFRyYW5zaXRpb24oY2xvbmUpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZSwgJ29wYWNpdHknLCAnMCcpO1xuICAgICAgdGhpcy5zZXRDbG9uZVBvc2l0aW9uKGVsZW1lbnRSZWN0LmxlZnQgKyB4LCBlbGVtZW50UmVjdC50b3AgKyB5KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHJhZ1RyYW5zaXRpb24oKSkge1xuICAgICAgdGhpcy5yZW1vdmVDbG9uZUVsZW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2xvbmVFbGVtZW50KCk7XG4gICAgICAgIGRyb3BMaXN0Py5fZHJhZ2dhYmxlSXRlbXMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRFbGVtZW50VHJhbnNpdGlvbihpdGVtLmVsZW1lbnQoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24oKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDbG9uZUVsZW1lbnQoKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVkRWxlbWVudCgpO1xuICAgIGlmIChjbG9uZT8ucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjbG9uZS5wYXJlbnROb2RlLCBjbG9uZSk7XG4gICAgfVxuICAgIHRoaXMuY2xvbmVkRWxlbWVudC5zZXQobnVsbCk7XG5cbiAgICBpZiAodGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZigpKSB7XG4gICAgICB0aGlzLmNsb25lZEVsZW1lbnRWaWV3UmVmKCkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jbG9uZWRFbGVtZW50Vmlld1JlZi5zZXQobnVsbCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREb2N1bWVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyTW92ZSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5ib3VuZEhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG9jdW1lbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLmJvdW5kSGFuZGxlUG9pbnRlclVwKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMuYm91bmRIYW5kbGVQb2ludGVyVXApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","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();\n this.isHovered = signal(false);\n this.element = signal(this.nativeElement);\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.0.4\", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.4\", 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.0.4\", ngImport: i0, type: AXDropZoneDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axDropZone]',\n exportAs: 'axDropZone',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcm9wLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZekUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFKcEQ7O1FBS0Usa0JBQWEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVoQyxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxFQUF3QixDQUFDO0tBS2pEO0lBSEMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hELENBQUM7OEdBWFUsbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRHJvcFpvbmVEcm9wRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYRHJvcFpvbmVEaXJlY3RpdmUsIE1vdXNlRXZlbnQ+IHtcbiAgZHJvcHBlZDogQVhEcmFnRGlyZWN0aXZlO1xufVxuZXhwb3J0IHR5cGUgQVhEcm9wWm9uZUhvdmVyRXZlbnQgPSBBWERyb3Bab25lRHJvcEV2ZW50ICYgeyBzdGF0ZTogJ2VudGVyJyB8ICdsZWF2ZScgfTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4RHJvcFpvbmVdJyxcbiAgZXhwb3J0QXM6ICdheERyb3Bab25lJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhEcm9wWm9uZURpcmVjdGl2ZSBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZHJvcFpvbmVHcm91cCA9IGlucHV0PHN0cmluZz4oKTtcblxuICBpc0hvdmVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBlbGVtZW50ID0gc2lnbmFsKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgb25FbGVtZW50RHJvcCA9IG91dHB1dDxBWERyb3Bab25lRHJvcEV2ZW50PigpO1xuICBvbkVsZW1lbnRIb3ZlciA9IG91dHB1dDxBWERyb3Bab25lSG92ZXJFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQoKS5kYXRhc2V0WydheERyb3Bab25lJ10gPSAndHJ1ZSc7XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXDragHandleDirective } from './drag-handle.directive';\nimport { AXDragDirective } from './drag.directive';\nimport { AXDropZoneDirective } from './drop-zone.directive';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective];\nexport class AXDragDropModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXDragDropModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9kcmFnLWRyb3Avc3JjL2xpYi9kcmFnLWRyb3AubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCxNQUFNLFNBQVMsR0FBRyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBT2hGLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLFlBUFYsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixhQUEzRCxlQUFlLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1COytHQU9qRSxnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBTDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUN2QixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWERyYWdIYW5kbGVEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Atem9uZS5kaXJlY3RpdmUnO1xuXG5jb25zdCBDT01QT05FTlQgPSBbQVhEcmFnRGlyZWN0aXZlLCBBWERyYWdIYW5kbGVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmVdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbLi4uQ09NUE9ORU5UXSxcbiAgZXhwb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEFYRHJhZ0Ryb3BNb2R1bGUge31cbiJdfQ==","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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"}
@@ -62,6 +62,7 @@ class AXInputMaskDirective {
62
62
  }
63
63
  #eff;
64
64
  thousandsSeparatorHandler(value) {
65
+ const thousandsSeparator = this.separator() === '-' ? '_' : this.separator();
65
66
  let clearValue;
66
67
  const firstChar = value.charAt(0);
67
68
  const restOfString = value.slice(1);
@@ -71,7 +72,7 @@ class AXInputMaskDirective {
71
72
  else {
72
73
  clearValue = value.replace(/-/g, '');
73
74
  }
74
- const addSeparator = clearValue.replace(/\B(?=(\d{3})+(?!\d))/g, this.separator());
75
+ const addSeparator = clearValue.replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator);
75
76
  return addSeparator;
76
77
  }
77
78
  hijriMaskHandler(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-input-mask.mjs","sources":["../tmp-esm2022/input-mask/lib/input-mask.directive.js","../tmp-esm2022/input-mask/acorex-cdk-input-mask.js"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, output } from '@angular/core';\nimport { MaskInput } from 'maska';\nimport * as i0 from \"@angular/core\";\nexport class AXInputMaskDirective {\n constructor() {\n this.elm = inject(ElementRef);\n this.maskMode = input('digits');\n this.separator = input('/');\n this.eager = input(false);\n this.onMaskChanged = output();\n this.minValue = input(null);\n this.maxValue = input(null);\n this.decimal = input(0);\n this.#eff = effect(() => {\n if (this.maskaJs)\n this.maskaJs.destroy();\n let mask;\n switch (this.maskMode()) {\n case 'hijriDate':\n mask = [`1###${this.separator()}##${this.separator()}##`];\n break;\n case 'digits':\n mask = ['DF'];\n break;\n case 'decimal':\n mask = [`DX`];\n break;\n case 'thousandsSeparator':\n mask = [`U`];\n break;\n }\n this.maskaJs = new MaskInput(this.elm.nativeElement, {\n mask,\n reversed: this.maskMode() === 'thousandsSeparator' ? true : false,\n tokens: {\n D: { pattern: /-/, optional: true },\n F: { pattern: /[0-9]/, repeated: true },\n X: { pattern: /[.0-9]/, repeated: true },\n U: { pattern: /[-0-9]/, repeated: true },\n },\n postProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n default:\n return value;\n }\n },\n onMaska: (details) => {\n this.onMaskChanged.emit(details);\n },\n eager: this.eager(),\n });\n });\n }\n #eff;\n thousandsSeparatorHandler(value) {\n let clearValue;\n const firstChar = value.charAt(0);\n const restOfString = value.slice(1);\n if (firstChar === '-') {\n clearValue = '-' + restOfString.replace(/-/g, '');\n }\n else {\n clearValue = value.replace(/-/g, '');\n }\n const addSeparator = clearValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.separator());\n return addSeparator;\n }\n hijriMaskHandler(value) {\n const [yearStr, monthStr, dayStr] = value.split(this.separator());\n const year = +yearStr;\n const month = +monthStr;\n const day = +dayStr;\n //Month Logics\n if (!month || !year)\n return value;\n if (month > 12) {\n return `${yearStr}${this.separator()}12`;\n }\n if (month < 1) {\n return `${yearStr}${this.separator()}01`;\n }\n //Day Logics\n if (!day)\n return value;\n if (day < 1) {\n return `${yearStr}-${monthStr}${this.separator()}01`;\n }\n let maxDay = 30;\n if (month <= 6) {\n maxDay = 31;\n }\n else if (month === 12) {\n // Hijri leap year rule: (11 * year + 14) % 30 < 11\n const isKabise = (11 * year + 14) % 30 < 11;\n maxDay = isKabise ? 30 : 29;\n }\n if (day > maxDay) {\n return `${yearStr}${this.separator()}${monthStr}${this.separator()}${maxDay}`;\n }\n return value;\n }\n rangeValueLimit(value) {\n let convertedValue;\n if (this.separator()) {\n convertedValue = +value.split(this.separator()).join('');\n }\n else {\n convertedValue = +value;\n }\n if (this.minValue() && convertedValue < this.minValue()) {\n return this.minValue().toString();\n }\n if (this.maxValue() && convertedValue > this.maxValue()) {\n return this.maxValue().toString();\n }\n return value;\n }\n decimalMaskHandler(value) {\n // Remove any non-digit and non-decimal characters except the first decimal point\n let cleanValue = value;\n let finalValue;\n // Ensure only one decimal point\n const decimalParts = cleanValue.split('.');\n if (decimalParts.length > 2) {\n cleanValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Split into integer and decimal parts\n const parts = cleanValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n // Limit decimal part to the specified number of digits\n const limitedDecimalPart = decimalPart.slice(0, this.decimal());\n // Reconstruct the value\n if (limitedDecimalPart.length > 0) {\n finalValue = integerPart + '.' + limitedDecimalPart;\n }\n else if (cleanValue.includes('.')) {\n // If there's a decimal point but no decimal part, keep the decimal point\n finalValue = integerPart + '.';\n }\n else {\n finalValue = integerPart;\n }\n return this.rangeValueLimit(finalValue);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXInputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.4\", type: AXInputMaskDirective, isStandalone: true, selector: \"[axInputMask]\", inputs: { maskMode: { classPropertyName: \"maskMode\", publicName: \"maskMode\", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: \"separator\", publicName: \"separator\", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: \"eager\", publicName: \"eager\", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: \"minValue\", publicName: \"minValue\", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: \"maxValue\", publicName: \"maxValue\", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: \"decimal\", publicName: \"decimal\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: \"onMaskChanged\" }, exportAs: [\"axInputMask\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXInputMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axInputMask]',\n exportAs: 'axInputMask',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtbWFzay9zcmMvbGliL2lucHV0LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQWNsQyxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS1UsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqQyxhQUFRLEdBQUcsS0FBSyxDQUFtQixRQUFRLENBQUMsQ0FBQztRQUM3QyxjQUFTLEdBQUcsS0FBSyxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLFVBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsa0JBQWEsR0FBRyxNQUFNLEVBQW9CLENBQUM7UUFDM0MsYUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUMvQixhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQy9CLFlBQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBYyxDQUFDO1lBRW5CLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssV0FBVztvQkFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FB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dGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hc2tJbnB1dCB9IGZyb20gJ21hc2thJztcblxuZXhwb3J0IHR5cGUgQVhJbnB1dE1hc2tFdmVudCA9IHtcbiAgbWFza2VkOiBzdHJpbmc7XG4gIHVubWFza2VkOiBzdHJpbmc7XG4gIGNvbXBsZXRlZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFYSW5wdXRNYXNrTW9kZXMgPSAnaGlqcmlEYXRlJyB8ICdkaWdpdHMnIHwgJ3Rob3VzYW5kc1NlcGFyYXRvcicgfCAnZGVjaW1hbCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1theElucHV0TWFza10nLFxuICBleHBvcnRBczogJ2F4SW5wdXRNYXNrJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhJbnB1dE1hc2tEaXJlY3RpdmUge1xuICBwcml2YXRlIGVsbSA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBtYXNrYUpzOiBNYXNrSW5wdXQ7XG4gIG1hc2tNb2RlID0gaW5wdXQ8QVhJbnB1dE1hc2tNb2Rlcz4oJ2RpZ2l0cycpO1xuICBzZXBhcmF0b3IgPSBpbnB1dDxzdHJpbmc+KCcvJyk7XG4gIGVhZ2VyID0gaW5wdXQoZmFsc2UpO1xuICBvbk1hc2tDaGFuZ2VkID0gb3V0cHV0PEFYSW5wdXRNYXNrRXZlbnQ+KCk7XG4gIG1pblZhbHVlID0gaW5wdXQ8bnVtYmVyPihudWxsKTtcbiAgbWF4VmFsdWUgPSBpbnB1dDxudW1iZXI+KG51bGwpO1xuICBkZWNpbWFsID0gaW5wdXQoMCk7XG5cbiAgI2VmZiA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMubWFza2FKcykgdGhpcy5tYXNrYUpzLmRlc3Ryb3koKTtcbiAgICBsZXQgbWFzazogc3RyaW5nW107XG5cbiAgICBzd2l0Y2ggKHRoaXMubWFza01vZGUoKSkge1xuICAgICAgY2FzZSAnaGlqcmlEYXRlJzpcbiAgICAgICAgbWFzayA9IFtgMSMjIyR7dGhpcy5zZXBhcmF0b3IoKX0jIyR7dGhpcy5zZXBhcmF0b3IoKX0jI2BdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RpZ2l0cyc6XG4gICAgICAgIG1hc2sgPSBbJ0RGJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgIG1hc2sgPSBbYERYYF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGhvdXNhbmRzU2VwYXJhdG9yJzpcbiAgICAgICAgbWFzayA9IFtgVWBdO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLm1hc2thSnMgPSBuZXcgTWFza0lucHV0KHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIG1hc2ssXG4gICAgICByZXZlcnNlZDogdGhpcy5tYXNrTW9kZSgpID09PSAndGhvdXNhbmRzU2VwYXJhdG9yJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRva2Vuczoge1xuICAgICAgICBEOiB7IHBhdHRlcm46IC8tLywgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgRjogeyBwYXR0ZXJuOiAvWzAtOV0vLCByZXBlYXRlZDogdHJ1ZSB9LFxuICAgICAgICBYOiB7IHBhdHRlcm46IC9bLjAtOV0vLCByZXBlYXRlZDogdHJ1ZSB9LFxuICAgICAgICBVOiB7IHBhdHRlcm46IC9bLTAtOV0vLCByZXBlYXRlZDogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICAgIHBvc3RQcm9jZXNzOiAodmFsdWUpID0+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLm1hc2tNb2RlKCkpIHtcbiAgICAgICAgICBjYXNlICdoaWpyaURhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlqcmlNYXNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAnZGlnaXRzJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlVmFsdWVMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsTWFza0hhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ3Rob3VzYW5kc1NlcGFyYXRvcic6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aG91c2FuZHNTZXBhcmF0b3JIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25NYXNrYTogKGRldGFpbHMpID0+IHtcbiAgICAgICAgdGhpcy5vbk1hc2tDaGFuZ2VkLmVtaXQoZGV0YWlscyk7XG4gICAgICB9LFxuICAgICAgZWFnZXI6IHRoaXMuZWFnZXIoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSB0aG91c2FuZHNTZXBhcmF0b3JIYW5kbGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgY2xlYXJWYWx1ZTogc3RyaW5nO1xuXG4gICAgY29uc3QgZmlyc3RDaGFyID0gdmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IHJlc3RPZlN0cmluZyA9IHZhbHVlLnNsaWNlKDEpO1xuXG4gICAgaWYgKGZpcnN0Q2hhciA9PT0gJy0nKSB7XG4gICAgICBjbGVhclZhbHVlID0gJy0nICsgcmVzdE9mU3RyaW5nLnJlcGxhY2UoLy0vZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclZhbHVlID0gdmFsdWUucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWRkU2VwYXJhdG9yID0gY2xlYXJWYWx1ZS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCB0aGlzLnNlcGFyYXRvcigpKTtcblxuICAgIHJldHVybiBhZGRTZXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIGhpanJpTWFza0hhbmRsZXIodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IFt5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyXSA9IHZhbHVlLnNwbGl0KHRoaXMuc2VwYXJhdG9yKCkpO1xuXG4gICAgY29uc3QgeWVhciA9ICt5ZWFyU3RyO1xuICAgIGNvbnN0IG1vbnRoID0gK21vbnRoU3RyO1xuICAgIGNvbnN0IGRheSA9ICtkYXlTdHI7XG5cbiAgICAvL01vbnRoIExvZ2ljc1xuICAgIGlmICghbW9udGggfHwgIXllYXIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAobW9udGggPiAxMikge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfTEyYDtcbiAgICB9XG4gICAgaWYgKG1vbnRoIDwgMSkge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfTAxYDtcbiAgICB9XG5cbiAgICAvL0RheSBMb2dpY3NcbiAgICBpZiAoIWRheSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgaWYgKGRheSA8IDEpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfS0ke21vbnRoU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0wMWA7XG4gICAgfVxuXG4gICAgbGV0IG1heERheSA9IDMwO1xuICAgIGlmIChtb250aCA8PSA2KSB7XG4gICAgICBtYXhEYXkgPSAzMTtcbiAgICB9IGVsc2UgaWYgKG1vbnRoID09PSAxMikge1xuICAgICAgLy8gSGlqcmkgbGVhcCB5ZWFyIHJ1bGU6ICgxMSAqIHllYXIgKyAxNCkgJSAzMCA8IDExXG4gICAgICBjb25zdCBpc0thYmlzZSA9ICgxMSAqIHllYXIgKyAxNCkgJSAzMCA8IDExO1xuICAgICAgbWF4RGF5ID0gaXNLYWJpc2UgPyAzMCA6IDI5O1xuICAgIH1cblxuICAgIGlmIChkYXkgPiBtYXhEYXkpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0ke21vbnRoU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0ke21heERheX1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VWYWx1ZUxpbWl0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgY29udmVydGVkVmFsdWU6IG51bWJlcjtcblxuICAgIGlmICh0aGlzLnNlcGFyYXRvcigpKSB7XG4gICAgICBjb252ZXJ0ZWRWYWx1ZSA9ICt2YWx1ZS5zcGxpdCh0aGlzLnNlcGFyYXRvcigpKS5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udmVydGVkVmFsdWUgPSArdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluVmFsdWUoKSAmJiBjb252ZXJ0ZWRWYWx1ZSA8IHRoaXMubWluVmFsdWUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWluVmFsdWUoKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heFZhbHVlKCkgJiYgY29udmVydGVkVmFsdWUgPiB0aGlzLm1heFZhbHVlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heFZhbHVlKCkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGRlY2ltYWxNYXNrSGFuZGxlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gUmVtb3ZlIGFueSBub24tZGlnaXQgYW5kIG5vbi1kZWNpbWFsIGNoYXJhY3RlcnMgZXhjZXB0IHRoZSBmaXJzdCBkZWNpbWFsIHBvaW50XG4gICAgbGV0IGNsZWFuVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgZmluYWxWYWx1ZTogc3RyaW5nO1xuXG4gICAgLy8gRW5zdXJlIG9ubHkgb25lIGRlY2ltYWwgcG9pbnRcbiAgICBjb25zdCBkZWNpbWFsUGFydHMgPSBjbGVhblZhbHVlLnNwbGl0KCcuJyk7XG4gICAgaWYgKGRlY2ltYWxQYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICBjbGVhblZhbHVlID0gZGVjaW1hbFBhcnRzWzBdICsgJy4nICsgZGVjaW1hbFBhcnRzLnNsaWNlKDEpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIFNwbGl0IGludG8gaW50ZWdlciBhbmQgZGVjaW1hbCBwYXJ0c1xuICAgIGNvbnN0IHBhcnRzID0gY2xlYW5WYWx1ZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGludGVnZXJQYXJ0ID0gcGFydHNbMF0gfHwgJyc7XG4gICAgY29uc3QgZGVjaW1hbFBhcnQgPSBwYXJ0c1sxXSB8fCAnJztcblxuICAgIC8vIExpbWl0IGRlY2ltYWwgcGFydCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkaWdpdHNcbiAgICBjb25zdCBsaW1pdGVkRGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zbGljZSgwLCB0aGlzLmRlY2ltYWwoKSk7XG5cbiAgICAvLyBSZWNvbnN0cnVjdCB0aGUgdmFsdWVcbiAgICBpZiAobGltaXRlZERlY2ltYWxQYXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbmFsVmFsdWUgPSBpbnRlZ2VyUGFydCArICcuJyArIGxpbWl0ZWREZWNpbWFsUGFydDtcbiAgICB9IGVsc2UgaWYgKGNsZWFuVmFsdWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBhIGRlY2ltYWwgcG9pbnQgYnV0IG5vIGRlY2ltYWwgcGFydCwga2VlcCB0aGUgZGVjaW1hbCBwb2ludFxuICAgICAgZmluYWxWYWx1ZSA9IGludGVnZXJQYXJ0ICsgJy4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFZhbHVlID0gaW50ZWdlclBhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VWYWx1ZUxpbWl0KGZpbmFsVmFsdWUpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1pbnB1dC1tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2lucHV0LW1hc2svc3JjL2Fjb3JleC1jZGstaW5wdXQtbWFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-cdk-input-mask.mjs","sources":["../tmp-esm2022/input-mask/lib/input-mask.directive.js","../tmp-esm2022/input-mask/acorex-cdk-input-mask.js"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, output } from '@angular/core';\nimport { MaskInput } from 'maska';\nimport * as i0 from \"@angular/core\";\nexport class AXInputMaskDirective {\n constructor() {\n this.elm = inject(ElementRef);\n this.maskMode = input('digits');\n this.separator = input('/');\n this.eager = input(false);\n this.onMaskChanged = output();\n this.minValue = input(null);\n this.maxValue = input(null);\n this.decimal = input(0);\n this.#eff = effect(() => {\n if (this.maskaJs)\n this.maskaJs.destroy();\n let mask;\n switch (this.maskMode()) {\n case 'hijriDate':\n mask = [`1###${this.separator()}##${this.separator()}##`];\n break;\n case 'digits':\n mask = ['DF'];\n break;\n case 'decimal':\n mask = [`DX`];\n break;\n case 'thousandsSeparator':\n mask = [`U`];\n break;\n }\n this.maskaJs = new MaskInput(this.elm.nativeElement, {\n mask,\n reversed: this.maskMode() === 'thousandsSeparator' ? true : false,\n tokens: {\n D: { pattern: /-/, optional: true },\n F: { pattern: /[0-9]/, repeated: true },\n X: { pattern: /[.0-9]/, repeated: true },\n U: { pattern: /[-0-9]/, repeated: true },\n },\n postProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n default:\n return value;\n }\n },\n onMaska: (details) => {\n this.onMaskChanged.emit(details);\n },\n eager: this.eager(),\n });\n });\n }\n #eff;\n thousandsSeparatorHandler(value) {\n const thousandsSeparator = this.separator() === '-' ? '_' : this.separator();\n let clearValue;\n const firstChar = value.charAt(0);\n const restOfString = value.slice(1);\n if (firstChar === '-') {\n clearValue = '-' + restOfString.replace(/-/g, '');\n }\n else {\n clearValue = value.replace(/-/g, '');\n }\n const addSeparator = clearValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator);\n return addSeparator;\n }\n hijriMaskHandler(value) {\n const [yearStr, monthStr, dayStr] = value.split(this.separator());\n const year = +yearStr;\n const month = +monthStr;\n const day = +dayStr;\n //Month Logics\n if (!month || !year)\n return value;\n if (month > 12) {\n return `${yearStr}${this.separator()}12`;\n }\n if (month < 1) {\n return `${yearStr}${this.separator()}01`;\n }\n //Day Logics\n if (!day)\n return value;\n if (day < 1) {\n return `${yearStr}-${monthStr}${this.separator()}01`;\n }\n let maxDay = 30;\n if (month <= 6) {\n maxDay = 31;\n }\n else if (month === 12) {\n // Hijri leap year rule: (11 * year + 14) % 30 < 11\n const isKabise = (11 * year + 14) % 30 < 11;\n maxDay = isKabise ? 30 : 29;\n }\n if (day > maxDay) {\n return `${yearStr}${this.separator()}${monthStr}${this.separator()}${maxDay}`;\n }\n return value;\n }\n rangeValueLimit(value) {\n let convertedValue;\n if (this.separator()) {\n convertedValue = +value.split(this.separator()).join('');\n }\n else {\n convertedValue = +value;\n }\n if (this.minValue() && convertedValue < this.minValue()) {\n return this.minValue().toString();\n }\n if (this.maxValue() && convertedValue > this.maxValue()) {\n return this.maxValue().toString();\n }\n return value;\n }\n decimalMaskHandler(value) {\n // Remove any non-digit and non-decimal characters except the first decimal point\n let cleanValue = value;\n let finalValue;\n // Ensure only one decimal point\n const decimalParts = cleanValue.split('.');\n if (decimalParts.length > 2) {\n cleanValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Split into integer and decimal parts\n const parts = cleanValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n // Limit decimal part to the specified number of digits\n const limitedDecimalPart = decimalPart.slice(0, this.decimal());\n // Reconstruct the value\n if (limitedDecimalPart.length > 0) {\n finalValue = integerPart + '.' + limitedDecimalPart;\n }\n else if (cleanValue.includes('.')) {\n // If there's a decimal point but no decimal part, keep the decimal point\n finalValue = integerPart + '.';\n }\n else {\n finalValue = integerPart;\n }\n return this.rangeValueLimit(finalValue);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXInputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.4\", type: AXInputMaskDirective, isStandalone: true, selector: \"[axInputMask]\", inputs: { maskMode: { classPropertyName: \"maskMode\", publicName: \"maskMode\", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: \"separator\", publicName: \"separator\", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: \"eager\", publicName: \"eager\", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: \"minValue\", publicName: \"minValue\", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: \"maxValue\", publicName: \"maxValue\", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: \"decimal\", publicName: \"decimal\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: \"onMaskChanged\" }, exportAs: [\"axInputMask\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXInputMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axInputMask]',\n exportAs: 'axInputMask',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtbWFzay9zcmMvbGliL2lucHV0LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQWNsQyxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS1UsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqQyxhQUFRLEdBQUcsS0FBSyxDQUFtQixRQUFRLENBQUMsQ0FBQztRQUM3QyxjQUFTLEdBQUcsS0FBSyxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLFVBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsa0JBQWEsR0FBRyxNQUFNLEVBQW9CLENBQUM7UUFDM0MsYUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUMvQixhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQy9CLFlBQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBYyxDQUFDO1lBRW5CLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssV0FBVztvQkFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMxRCxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxNQUFNO2dCQUNSLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDYixNQUFNO1lBQ1YsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25ELElBQUk7Z0JBQ0osUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNqRSxNQUFNLEVBQUU7b0JBQ04sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO29CQUNuQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7b0JBQ3ZDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtvQkFDeEMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2lCQUN6QztnQkFDRCxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDckIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzt3QkFDeEIsS0FBSyxXQUFXOzRCQUNkLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN0QyxLQUFLLFFBQVE7NEJBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxLQUFLLFNBQVM7NEJBQ1osT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3hDLEtBQUssb0JBQW9COzRCQUN2QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDL0M7NEJBQ0UsT0FBTyxLQUFLLENBQUM7b0JBQ2pCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0ErR0o7SUE5SkMsSUFBSSxDQStDRDtJQUVLLHlCQUF5QixDQUFDLEtBQWE7UUFDN0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUU3RSxJQUFJLFVBQWtCLENBQUM7UUFFdkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUVyRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRXBCLGNBQWM7UUFDZCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2YsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQzNDLENBQUM7UUFFRCxZQUFZO1FBQ1osSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV2QixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sR0FBRyxPQUFPLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLG1EQUFtRDtZQUNuRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNoRixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxjQUFzQixDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3RDLGlGQUFpRjtRQUNqRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxVQUFrQixDQUFDO1FBRXZCLGdDQUFnQztRQUNoQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRW5DLHVEQUF1RDtRQUN2RCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLHdCQUF3QjtRQUN4QixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxVQUFVLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztRQUN0RCxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEMseUVBQXlFO1lBQ3pFLFVBQVUsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OEdBeEtVLG9CQUFvQjtrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsYUFBYTtpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXNrSW5wdXQgfSBmcm9tICdtYXNrYSc7XG5cbmV4cG9ydCB0eXBlIEFYSW5wdXRNYXNrRXZlbnQgPSB7XG4gIG1hc2tlZDogc3RyaW5nO1xuICB1bm1hc2tlZDogc3RyaW5nO1xuICBjb21wbGV0ZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBWElucHV0TWFza01vZGVzID0gJ2hpanJpRGF0ZScgfCAnZGlnaXRzJyB8ICd0aG91c2FuZHNTZXBhcmF0b3InIHwgJ2RlY2ltYWwnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhJbnB1dE1hc2tdJyxcbiAgZXhwb3J0QXM6ICdheElucHV0TWFzaycsXG59KVxuZXhwb3J0IGNsYXNzIEFYSW5wdXRNYXNrRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBlbG0gPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgbWFza2FKczogTWFza0lucHV0O1xuICBtYXNrTW9kZSA9IGlucHV0PEFYSW5wdXRNYXNrTW9kZXM+KCdkaWdpdHMnKTtcbiAgc2VwYXJhdG9yID0gaW5wdXQ8c3RyaW5nPignLycpO1xuICBlYWdlciA9IGlucHV0KGZhbHNlKTtcbiAgb25NYXNrQ2hhbmdlZCA9IG91dHB1dDxBWElucHV0TWFza0V2ZW50PigpO1xuICBtaW5WYWx1ZSA9IGlucHV0PG51bWJlcj4obnVsbCk7XG4gIG1heFZhbHVlID0gaW5wdXQ8bnVtYmVyPihudWxsKTtcbiAgZGVjaW1hbCA9IGlucHV0KDApO1xuXG4gICNlZmYgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGlzLm1hc2thSnMpIHRoaXMubWFza2FKcy5kZXN0cm95KCk7XG4gICAgbGV0IG1hc2s6IHN0cmluZ1tdO1xuXG4gICAgc3dpdGNoICh0aGlzLm1hc2tNb2RlKCkpIHtcbiAgICAgIGNhc2UgJ2hpanJpRGF0ZSc6XG4gICAgICAgIG1hc2sgPSBbYDEjIyMke3RoaXMuc2VwYXJhdG9yKCl9IyMke3RoaXMuc2VwYXJhdG9yKCl9IyNgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkaWdpdHMnOlxuICAgICAgICBtYXNrID0gWydERiddO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICBtYXNrID0gW2BEWGBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rob3VzYW5kc1NlcGFyYXRvcic6XG4gICAgICAgIG1hc2sgPSBbYFVgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5tYXNrYUpzID0gbmV3IE1hc2tJbnB1dCh0aGlzLmVsbS5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBtYXNrLFxuICAgICAgcmV2ZXJzZWQ6IHRoaXMubWFza01vZGUoKSA9PT0gJ3Rob3VzYW5kc1NlcGFyYXRvcicgPyB0cnVlIDogZmFsc2UsXG4gICAgICB0b2tlbnM6IHtcbiAgICAgICAgRDogeyBwYXR0ZXJuOiAvLS8sIG9wdGlvbmFsOiB0cnVlIH0sXG4gICAgICAgIEY6IHsgcGF0dGVybjogL1swLTldLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICAgICAgWDogeyBwYXR0ZXJuOiAvWy4wLTldLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICAgICAgVTogeyBwYXR0ZXJuOiAvWy0wLTldLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgICBwb3N0UHJvY2VzczogKHZhbHVlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5tYXNrTW9kZSgpKSB7XG4gICAgICAgICAgY2FzZSAnaGlqcmlEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpanJpTWFza0hhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RpZ2l0cyc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZVZhbHVlTGltaXQodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbE1hc2tIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBjYXNlICd0aG91c2FuZHNTZXBhcmF0b3InOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhvdXNhbmRzU2VwYXJhdG9ySGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTWFza2E6IChkZXRhaWxzKSA9PiB7XG4gICAgICAgIHRoaXMub25NYXNrQ2hhbmdlZC5lbWl0KGRldGFpbHMpO1xuICAgICAgfSxcbiAgICAgIGVhZ2VyOiB0aGlzLmVhZ2VyKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgdGhvdXNhbmRzU2VwYXJhdG9ySGFuZGxlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGhvdXNhbmRzU2VwYXJhdG9yID0gdGhpcy5zZXBhcmF0b3IoKSA9PT0gJy0nID8gJ18nIDogdGhpcy5zZXBhcmF0b3IoKTtcblxuICAgIGxldCBjbGVhclZhbHVlOiBzdHJpbmc7XG5cbiAgICBjb25zdCBmaXJzdENoYXIgPSB2YWx1ZS5jaGFyQXQoMCk7XG4gICAgY29uc3QgcmVzdE9mU3RyaW5nID0gdmFsdWUuc2xpY2UoMSk7XG5cbiAgICBpZiAoZmlyc3RDaGFyID09PSAnLScpIHtcbiAgICAgIGNsZWFyVmFsdWUgPSAnLScgKyByZXN0T2ZTdHJpbmcucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8tL2csICcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRTZXBhcmF0b3IgPSBjbGVhclZhbHVlLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIHRob3VzYW5kc1NlcGFyYXRvcik7XG5cbiAgICByZXR1cm4gYWRkU2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWpyaU1hc2tIYW5kbGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBbeWVhclN0ciwgbW9udGhTdHIsIGRheVN0cl0gPSB2YWx1ZS5zcGxpdCh0aGlzLnNlcGFyYXRvcigpKTtcblxuICAgIGNvbnN0IHllYXIgPSAreWVhclN0cjtcbiAgICBjb25zdCBtb250aCA9ICttb250aFN0cjtcbiAgICBjb25zdCBkYXkgPSArZGF5U3RyO1xuXG4gICAgLy9Nb250aCBMb2dpY3NcbiAgICBpZiAoIW1vbnRoIHx8ICF5ZWFyKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0xMmA7XG4gICAgfVxuICAgIGlmIChtb250aCA8IDEpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0wMWA7XG4gICAgfVxuXG4gICAgLy9EYXkgTG9naWNzXG4gICAgaWYgKCFkYXkpIHJldHVybiB2YWx1ZTtcblxuICAgIGlmIChkYXkgPCAxKSB7XG4gICAgICByZXR1cm4gYCR7eWVhclN0cn0tJHttb250aFN0cn0ke3RoaXMuc2VwYXJhdG9yKCl9MDFgO1xuICAgIH1cblxuICAgIGxldCBtYXhEYXkgPSAzMDtcbiAgICBpZiAobW9udGggPD0gNikge1xuICAgICAgbWF4RGF5ID0gMzE7XG4gICAgfSBlbHNlIGlmIChtb250aCA9PT0gMTIpIHtcbiAgICAgIC8vIEhpanJpIGxlYXAgeWVhciBydWxlOiAoMTEgKiB5ZWFyICsgMTQpICUgMzAgPCAxMVxuICAgICAgY29uc3QgaXNLYWJpc2UgPSAoMTEgKiB5ZWFyICsgMTQpICUgMzAgPCAxMTtcbiAgICAgIG1heERheSA9IGlzS2FiaXNlID8gMzAgOiAyOTtcbiAgICB9XG5cbiAgICBpZiAoZGF5ID4gbWF4RGF5KSB7XG4gICAgICByZXR1cm4gYCR7eWVhclN0cn0ke3RoaXMuc2VwYXJhdG9yKCl9JHttb250aFN0cn0ke3RoaXMuc2VwYXJhdG9yKCl9JHttYXhEYXl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJhbmdlVmFsdWVMaW1pdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGNvbnZlcnRlZFZhbHVlOiBudW1iZXI7XG5cbiAgICBpZiAodGhpcy5zZXBhcmF0b3IoKSkge1xuICAgICAgY29udmVydGVkVmFsdWUgPSArdmFsdWUuc3BsaXQodGhpcy5zZXBhcmF0b3IoKSkuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZFZhbHVlID0gK3ZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1pblZhbHVlKCkgJiYgY29udmVydGVkVmFsdWUgPCB0aGlzLm1pblZhbHVlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1pblZhbHVlKCkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhWYWx1ZSgpICYmIGNvbnZlcnRlZFZhbHVlID4gdGhpcy5tYXhWYWx1ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXhWYWx1ZSgpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNpbWFsTWFza0hhbmRsZXIodmFsdWU6IHN0cmluZykge1xuICAgIC8vIFJlbW92ZSBhbnkgbm9uLWRpZ2l0IGFuZCBub24tZGVjaW1hbCBjaGFyYWN0ZXJzIGV4Y2VwdCB0aGUgZmlyc3QgZGVjaW1hbCBwb2ludFxuICAgIGxldCBjbGVhblZhbHVlID0gdmFsdWU7XG4gICAgbGV0IGZpbmFsVmFsdWU6IHN0cmluZztcblxuICAgIC8vIEVuc3VyZSBvbmx5IG9uZSBkZWNpbWFsIHBvaW50XG4gICAgY29uc3QgZGVjaW1hbFBhcnRzID0gY2xlYW5WYWx1ZS5zcGxpdCgnLicpO1xuICAgIGlmIChkZWNpbWFsUGFydHMubGVuZ3RoID4gMikge1xuICAgICAgY2xlYW5WYWx1ZSA9IGRlY2ltYWxQYXJ0c1swXSArICcuJyArIGRlY2ltYWxQYXJ0cy5zbGljZSgxKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvLyBTcGxpdCBpbnRvIGludGVnZXIgYW5kIGRlY2ltYWwgcGFydHNcbiAgICBjb25zdCBwYXJ0cyA9IGNsZWFuVmFsdWUuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBpbnRlZ2VyUGFydCA9IHBhcnRzWzBdIHx8ICcnO1xuICAgIGNvbnN0IGRlY2ltYWxQYXJ0ID0gcGFydHNbMV0gfHwgJyc7XG5cbiAgICAvLyBMaW1pdCBkZWNpbWFsIHBhcnQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGlnaXRzXG4gICAgY29uc3QgbGltaXRlZERlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgdGhpcy5kZWNpbWFsKCkpO1xuXG4gICAgLy8gUmVjb25zdHJ1Y3QgdGhlIHZhbHVlXG4gICAgaWYgKGxpbWl0ZWREZWNpbWFsUGFydC5sZW5ndGggPiAwKSB7XG4gICAgICBmaW5hbFZhbHVlID0gaW50ZWdlclBhcnQgKyAnLicgKyBsaW1pdGVkRGVjaW1hbFBhcnQ7XG4gICAgfSBlbHNlIGlmIChjbGVhblZhbHVlLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBkZWNpbWFsIHBvaW50IGJ1dCBubyBkZWNpbWFsIHBhcnQsIGtlZXAgdGhlIGRlY2ltYWwgcG9pbnRcbiAgICAgIGZpbmFsVmFsdWUgPSBpbnRlZ2VyUGFydCArICcuJztcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxWYWx1ZSA9IGludGVnZXJQYXJ0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJhbmdlVmFsdWVMaW1pdChmaW5hbFZhbHVlKTtcbiAgfVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1pbnB1dC1tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2lucHV0LW1hc2svc3JjL2Fjb3JleC1jZGstaW5wdXQtbWFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/cdk",
3
- "version": "20.1.4",
3
+ "version": "20.1.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",