{"version":3,"file":"mapaxe-ngx-pinch-zoom.mjs","sources":["../../../projects/ngx-pinch-zoom/src/lib/properties.ts","../../../projects/ngx-pinch-zoom/src/lib/touches.ts","../../../projects/ngx-pinch-zoom/src/lib/ivypinch.ts","../../../projects/ngx-pinch-zoom/src/lib/pinch-zoom.component.ts","../../../projects/ngx-pinch-zoom/src/lib/pinch-zoom.component.html","../../../projects/ngx-pinch-zoom/src/lib/pinch-zoom.module.ts","../../../projects/ngx-pinch-zoom/src/public-api.ts","../../../projects/ngx-pinch-zoom/src/mapaxe-ngx-pinch-zoom.ts"],"sourcesContent":["import { Properties } from './interfaces';\r\n\r\nexport const defaultProperties: Properties = {\r\n    transitionDuration: 200,\r\n    doubleTap: true,\r\n    doubleTapScale: 2,\r\n    limitZoom: 'original image size',\r\n    autoZoomOut: false,\r\n    zoomControlScale: 1,\r\n    minPanScale: 1.0001,\r\n    minScale: 0,\r\n    listeners: 'mouse and touch',\r\n    wheel: true,\r\n    wheelZoomFactor: 0.2,\r\n    draggableImage: false,\r\n};\r\n\r\nexport const backwardCompatibilityProperties: any = {\r\n    'transition-duration': 'transitionDuration',\r\n    transitionDurationBackwardCompatibility: 'transitionDuration',\r\n    'double-tap': 'doubleTap',\r\n    doubleTapBackwardCompatibility: 'doubleTap',\r\n    'double-tap-scale': 'doubleTapScale',\r\n    doubleTapScaleBackwardCompatibility: 'doubleTapScale',\r\n    'auto-zoom-out': 'autoZoomOut',\r\n    autoZoomOutBackwardCompatibility: 'autoZoomOut',\r\n    'limit-zoom': 'limitZoom',\r\n    limitZoomBackwardCompatibility: 'limitZoom',\r\n};\r\n","export interface Properties {\r\n    element: HTMLElement;\r\n    listeners?: 'auto' | 'mouse and touch';\r\n    touchListeners?: any;\r\n    mouseListeners?: any;\r\n    otherListeners?: any;\r\n    resize?: boolean;\r\n}\r\n\r\nexport type EventType = undefined | 'touchend' | 'pan' | 'pinch' | 'horizontal-swipe' | 'vertical-swipe' | 'tap' | 'longtap';\r\nexport type TouchHandler = 'handleTouchstart' | 'handleTouchmove' | 'handleTouchend';\r\nexport type MouseHandler = 'handleMousedown' | 'handleMousemove' | 'handleMouseup';\r\n\r\nexport class Touches {\r\n    properties: Properties;\r\n    element: HTMLElement;\r\n    elementPosition: ClientRect;\r\n    eventType: EventType = undefined;\r\n    handlers: any = {};\r\n    startX = 0;\r\n    startY = 0;\r\n    lastTap = 0;\r\n    doubleTapTimeout: any;\r\n    doubleTapMinTimeout = 300;\r\n    tapMinTimeout = 200;\r\n    touchstartTime = 0;\r\n    i: number = 0;\r\n    isMousedown = false;\r\n\r\n    _touchListeners: any = {\r\n        touchstart: 'handleTouchstart',\r\n        touchmove: 'handleTouchmove',\r\n        touchend: 'handleTouchend',\r\n    };\r\n    _mouseListeners: any = {\r\n        mousedown: 'handleMousedown',\r\n        mousemove: 'handleMousemove',\r\n        mouseup: 'handleMouseup',\r\n        wheel: 'handleWheel',\r\n    };\r\n    _otherListeners: any = {\r\n        resize: 'handleResize',\r\n    };\r\n\r\n    get touchListeners() {\r\n        return this.properties.touchListeners ? this.properties.touchListeners : this._touchListeners;\r\n    }\r\n\r\n    get mouseListeners() {\r\n        return this.properties.mouseListeners ? this.properties.mouseListeners : this._mouseListeners;\r\n    }\r\n\r\n    get otherListeners() {\r\n        return this.properties.otherListeners ? this.properties.otherListeners : this._otherListeners;\r\n    }\r\n\r\n    constructor(properties: Properties) {\r\n        this.properties = properties;\r\n        this.element = this.properties.element;\r\n        this.elementPosition = this.getElementPosition();\r\n\r\n        this.toggleEventListeners('addEventListener');\r\n    }\r\n\r\n    destroy() {\r\n        this.toggleEventListeners('removeEventListener');\r\n    }\r\n\r\n    toggleEventListeners(action: 'addEventListener' | 'removeEventListener') {\r\n        let listeners;\r\n\r\n        if (this.properties.listeners === 'mouse and touch') {\r\n            listeners = Object.assign(this.touchListeners, this.mouseListeners);\r\n        } else {\r\n            listeners = this.detectTouchScreen() ? this.touchListeners : this.mouseListeners;\r\n        }\r\n\r\n        if (this.properties.resize) {\r\n            listeners = Object.assign(listeners, this.otherListeners);\r\n        }\r\n\r\n        for (var listener in listeners) {\r\n            const handler: MouseHandler = listeners[listener];\r\n\r\n            // Window\r\n            if (listener === 'resize') {\r\n                if (action === 'addEventListener') {\r\n                    window.addEventListener(listener, this[handler], false);\r\n                }\r\n                if (action === 'removeEventListener') {\r\n                    window.removeEventListener(listener, this[handler], false);\r\n                }\r\n                // Document\r\n            } else if (listener === 'mouseup' || listener === 'mousemove') {\r\n                if (action === 'addEventListener') {\r\n                    document.addEventListener(listener, this[handler], false);\r\n                }\r\n                if (action === 'removeEventListener') {\r\n                    document.removeEventListener(listener, this[handler], false);\r\n                }\r\n                // Element\r\n            } else {\r\n                if (action === 'addEventListener') {\r\n                    this.element.addEventListener(listener, this[handler], false);\r\n                }\r\n                if (action === 'removeEventListener') {\r\n                    this.element.removeEventListener(listener, this[handler], false);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    addEventListeners(listener: string) {\r\n        const handler: MouseHandler = this._mouseListeners[listener];\r\n        window.addEventListener(listener, this[handler], false);\r\n    }\r\n\r\n    removeEventListeners(listener: string) {\r\n        const handler: MouseHandler = this._mouseListeners[listener];\r\n        window.removeEventListener(listener, this[handler], false);\r\n    }\r\n\r\n    /*\r\n     * Listeners\r\n     */\r\n\r\n    /* Touchstart */\r\n\r\n    handleTouchstart = (event: any) => {\r\n        this.elementPosition = this.getElementPosition();\r\n        this.touchstartTime = new Date().getTime();\r\n\r\n        if (this.eventType === undefined) {\r\n            this.getTouchstartPosition(event);\r\n        }\r\n\r\n        this.runHandler('touchstart', event);\r\n    };\r\n\r\n    /* Touchmove */\r\n\r\n    handleTouchmove = (event: any) => {\r\n        const touches = event.touches;\r\n\r\n        // Pan\r\n        if (this.detectPan(touches)) {\r\n            this.runHandler('pan', event);\r\n        }\r\n\r\n        // Pinch\r\n        if (this.detectPinch(event)) {\r\n            this.runHandler('pinch', event);\r\n        }\r\n    };\r\n\r\n    handleLinearSwipe(event: any) {\r\n        //event.preventDefault();\r\n\r\n        this.i++;\r\n\r\n        if (this.i > 3) {\r\n            this.eventType = this.getLinearSwipeType(event);\r\n        }\r\n\r\n        if (this.eventType === 'horizontal-swipe') {\r\n            this.runHandler('horizontal-swipe', event);\r\n        }\r\n\r\n        if (this.eventType === 'vertical-swipe') {\r\n            this.runHandler('vertical-swipe', event);\r\n        }\r\n    }\r\n\r\n    /* Touchend */\r\n\r\n    handleTouchend = (event: any) => {\r\n        const touches = event.touches;\r\n\r\n        // Double Tap\r\n        if (this.detectDoubleTap()) {\r\n            this.runHandler('double-tap', event);\r\n        }\r\n\r\n        // Tap\r\n        this.detectTap();\r\n\r\n        this.runHandler('touchend', event);\r\n        this.eventType = 'touchend';\r\n\r\n        if (touches && touches.length === 0) {\r\n            this.eventType = undefined;\r\n            this.i = 0;\r\n        }\r\n    };\r\n\r\n    /* Mousedown */\r\n\r\n    handleMousedown = (event: any) => {\r\n        this.isMousedown = true;\r\n        this.elementPosition = this.getElementPosition();\r\n        this.touchstartTime = new Date().getTime();\r\n\r\n        if (this.eventType === undefined) {\r\n            this.getMousedownPosition(event);\r\n        }\r\n\r\n        this.runHandler('mousedown', event);\r\n    };\r\n\r\n    /* Mousemove */\r\n\r\n    handleMousemove = (event: any) => {\r\n        //event.preventDefault();\r\n\r\n        if (!this.isMousedown) {\r\n            return;\r\n        }\r\n\r\n        // Pan\r\n        this.runHandler('pan', event);\r\n\r\n        // Linear swipe\r\n        switch (this.detectLinearSwipe(event)) {\r\n            case 'horizontal-swipe':\r\n                event.swipeType = 'horizontal-swipe';\r\n                this.runHandler('horizontal-swipe', event);\r\n                break;\r\n            case 'vertical-swipe':\r\n                event.swipeType = 'vertical-swipe';\r\n                this.runHandler('vertical-swipe', event);\r\n                break;\r\n        }\r\n\r\n        // Linear swipe\r\n        if (this.detectLinearSwipe(event) || this.eventType === 'horizontal-swipe' || this.eventType === 'vertical-swipe') {\r\n            this.handleLinearSwipe(event);\r\n        }\r\n    };\r\n\r\n    /* Mouseup */\r\n\r\n    handleMouseup = (event: any) => {\r\n        // Tap\r\n        this.detectTap();\r\n\r\n        this.isMousedown = false;\r\n        this.runHandler('mouseup', event);\r\n        this.eventType = undefined;\r\n        this.i = 0;\r\n    };\r\n\r\n    /* Wheel */\r\n\r\n    handleWheel = (event: any) => {\r\n        this.runHandler('wheel', event);\r\n    };\r\n\r\n    /* Resize */\r\n\r\n    handleResize = (event: any) => {\r\n        this.runHandler('resize', event);\r\n    };\r\n\r\n    runHandler(eventName: any, response: any) {\r\n        if (this.handlers[eventName]) {\r\n            this.handlers[eventName](response);\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Detection\r\n     */\r\n\r\n    detectPan(touches: any) {\r\n        return (touches.length === 1 && !this.eventType) || this.eventType === 'pan';\r\n    }\r\n\r\n    detectDoubleTap() {\r\n        if (this.eventType != undefined) {\r\n            return;\r\n        }\r\n\r\n        const currentTime = new Date().getTime();\r\n        const tapLength = currentTime - this.lastTap;\r\n\r\n        clearTimeout(this.doubleTapTimeout);\r\n\r\n        if (tapLength < this.doubleTapMinTimeout && tapLength > 0) {\r\n            return true;\r\n        } else {\r\n            this.doubleTapTimeout = setTimeout(() => {\r\n                clearTimeout(this.doubleTapTimeout);\r\n            }, this.doubleTapMinTimeout);\r\n        }\r\n        this.lastTap = currentTime;\r\n\r\n        return undefined;\r\n    }\r\n\r\n    detectTap(): void {\r\n        if (this.eventType != undefined) {\r\n            return;\r\n        }\r\n\r\n        const currentTime = new Date().getTime();\r\n        const tapLength = currentTime - this.touchstartTime;\r\n\r\n        if (tapLength > 0) {\r\n            if (tapLength < this.tapMinTimeout) {\r\n                this.runHandler('tap', {});\r\n            } else {\r\n                this.runHandler('longtap', {});\r\n            }\r\n        }\r\n    }\r\n\r\n    detectPinch(event: any) {\r\n        const touches = event.touches;\r\n        return (touches.length === 2 && this.eventType === undefined) || this.eventType === 'pinch';\r\n    }\r\n\r\n    detectLinearSwipe(event: any) {\r\n        const touches = event.touches;\r\n\r\n        if (touches) {\r\n            if ((touches.length === 1 && !this.eventType) || this.eventType === 'horizontal-swipe' || this.eventType === 'vertical-swipe') {\r\n                return this.getLinearSwipeType(event);\r\n            }\r\n        } else {\r\n            if (!this.eventType || this.eventType === 'horizontal-swipe' || this.eventType === 'vertical-swipe') {\r\n                return this.getLinearSwipeType(event);\r\n            }\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    getLinearSwipeType(event: any) {\r\n        if (this.eventType !== 'horizontal-swipe' && this.eventType !== 'vertical-swipe') {\r\n            const movementX = Math.abs(this.moveLeft(0, event) - this.startX);\r\n            const movementY = Math.abs(this.moveTop(0, event) - this.startY);\r\n\r\n            if (movementY * 3 > movementX) {\r\n                return 'vertical-swipe';\r\n            } else {\r\n                return 'horizontal-swipe';\r\n            }\r\n        } else {\r\n            return this.eventType;\r\n        }\r\n    }\r\n\r\n    getElementPosition() {\r\n        return this.element.getBoundingClientRect();\r\n    }\r\n\r\n    getTouchstartPosition(event: any) {\r\n        this.startX = event.touches[0].clientX - this.elementPosition.left;\r\n        this.startY = event.touches[0].clientY - this.elementPosition.top;\r\n    }\r\n\r\n    getMousedownPosition(event: any) {\r\n        this.startX = event.clientX - this.elementPosition.left;\r\n        this.startY = event.clientY - this.elementPosition.top;\r\n    }\r\n\r\n    moveLeft(index: any, event: any) {\r\n        const touches = event.touches;\r\n\r\n        if (touches) {\r\n            return touches[index].clientX - this.elementPosition.left;\r\n        } else {\r\n            return event.clientX - this.elementPosition.left;\r\n        }\r\n    }\r\n\r\n    moveTop(index: any, event: any) {\r\n        const touches = event.touches;\r\n\r\n        if (touches) {\r\n            return touches[index].clientY - this.elementPosition.top;\r\n        } else {\r\n            return event.clientY - this.elementPosition.top;\r\n        }\r\n    }\r\n\r\n    detectTouchScreen() {\r\n        var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n        var mq = function (query: any) {\r\n            return window.matchMedia(query).matches;\r\n        };\r\n\r\n        if ('ontouchstart' in window) {\r\n            return true;\r\n        }\r\n\r\n        // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n        // https://git.io/vznFH\r\n        var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n        return mq(query);\r\n    }\r\n\r\n    /* Public properties and methods */\r\n    on(event: EventType, handler: Function) {\r\n        if (event) {\r\n            this.handlers[event] = handler;\r\n        }\r\n    }\r\n}\r\n","import { Touches } from './touches';\r\nimport {MouseZoomPoint, PinchZoomProperties, ZoomEvent} from './interfaces';\r\nimport { defaultProperties } from './properties';\r\nimport {EventEmitter} from '@angular/core';\r\n\r\ntype PropertyName = keyof PinchZoomProperties;\r\n\r\nexport class IvyPinch {\r\n    properties: PinchZoomProperties = defaultProperties;\r\n    private onZoomChange: EventEmitter<ZoomEvent>;\r\n    touches: any;\r\n    element: any;\r\n    elementTarget: any;\r\n    parentElement: any;\r\n    i: number = 0;\r\n    public scale: number = 1;\r\n    initialScale: number = 1;\r\n    elementPosition: any;\r\n    eventType: any;\r\n    startX: number = 0;\r\n    startY: number = 0;\r\n    moveX: number = 0;\r\n    moveY: number = 0;\r\n    initialMoveX: number = 0;\r\n    initialMoveY: number = 0;\r\n    moveXC: number = 0;\r\n    moveYC: number = 0;\r\n    lastTap: number = 0;\r\n    draggingMode: boolean = false;\r\n    distance: number = 0;\r\n    doubleTapTimeout: number = 0;\r\n    initialDistance: number = 0;\r\n    events: any = {};\r\n    maxScale!: number;\r\n    defaultMaxScale: number = 3;\r\n\r\n    // Minimum scale at which panning works\r\n    get minPanScale() {\r\n        return this.getPropertiesValue('minPanScale');\r\n    }\r\n\r\n    get fullImage() {\r\n        return this.properties.fullImage;\r\n    }\r\n\r\n    constructor(properties: PinchZoomProperties, onZoomChange: EventEmitter<ZoomEvent>) {\r\n        this.element = properties.element;\r\n        this.onZoomChange = onZoomChange;\r\n\r\n        if (!this.element) {\r\n            return;\r\n        }\r\n\r\n        this.elementTarget = this.element.querySelector('*').tagName;\r\n        this.parentElement = this.element.parentElement;\r\n        this.properties = Object.assign({}, defaultProperties, properties);\r\n        this.detectLimitZoom();\r\n\r\n        this.touches = new Touches({\r\n            element: properties.element,\r\n            listeners: properties.listeners,\r\n            resize: properties.autoHeight,\r\n            mouseListeners: {\r\n                mousedown: 'handleMousedown',\r\n                mouseup: 'handleMouseup',\r\n                wheel: 'handleWheel',\r\n            },\r\n        });\r\n\r\n        /* Init */\r\n        this.setBasicStyles();\r\n\r\n        /*\r\n         * Listeners\r\n         */\r\n\r\n        this.touches.on('touchstart', this.handleTouchstart);\r\n        this.touches.on('touchend', this.handleTouchend);\r\n        this.touches.on('mousedown', this.handleTouchstart);\r\n        this.touches.on('mouseup', this.handleTouchend);\r\n        this.touches.on('pan', this.handlePan);\r\n        this.touches.on('mousemove', this.handlePan);\r\n        this.touches.on('pinch', this.handlePinch);\r\n\r\n        if (this.properties.wheel) {\r\n            this.touches.on('wheel', this.handleWheel);\r\n        }\r\n\r\n        if (this.properties.doubleTap) {\r\n            this.touches.on('double-tap', this.handleDoubleTap);\r\n        }\r\n\r\n        if (this.properties.autoHeight) {\r\n            this.touches.on('resize', this.handleResize);\r\n        }\r\n    }\r\n\r\n    /* Touchstart */\r\n\r\n    handleTouchstart = (event: any) => {\r\n        this.touches.addEventListeners('mousemove', 'handleMousemove');\r\n        this.getElementPosition();\r\n\r\n        if (this.eventType === undefined) {\r\n            this.getTouchstartPosition(event);\r\n        }\r\n    };\r\n\r\n    /* Touchend */\r\n\r\n    handleTouchend = (event: any) => {\r\n        /* touchend */\r\n        if (event.type === 'touchend') {\r\n            this.i = 0;\r\n            this.draggingMode = false;\r\n            const touches = event.touches;\r\n\r\n            // Min scale\r\n            if (this.scale < 1) {\r\n                this.scale = 1;\r\n            }\r\n\r\n            // Auto Zoom Out\r\n            if (this.properties.autoZoomOut && this.eventType === 'pinch') {\r\n                this.scale = 1;\r\n            }\r\n\r\n            // Align image\r\n            if (this.eventType === 'pinch' || (this.eventType === 'pan' && this.scale > this.minPanScale)) {\r\n                this.alignImage();\r\n            }\r\n\r\n            // Update initial values\r\n            if (\r\n                this.eventType === 'pinch' ||\r\n                this.eventType === 'pan' ||\r\n                this.eventType === 'horizontal-swipe' ||\r\n                this.eventType === 'vertical-swipe'\r\n            ) {\r\n                this.updateInitialValues();\r\n            }\r\n\r\n            this.eventType = 'touchend';\r\n\r\n            if (touches && touches.length === 0) {\r\n                this.eventType = undefined;\r\n            }\r\n        }\r\n\r\n        /* mouseup */\r\n        if (event.type === 'mouseup') {\r\n            this.draggingMode = false;\r\n            this.updateInitialValues();\r\n            this.eventType = undefined;\r\n        }\r\n\r\n        this.touches.removeEventListeners('mousemove', 'handleMousemove');\r\n    };\r\n\r\n    /*\r\n     * Handlers\r\n     */\r\n\r\n    handlePan = (event: any) => {\r\n        if (this.scale < this.minPanScale || this.properties.disablePan) {\r\n            return;\r\n        }\r\n\r\n        event.preventDefault();\r\n        const { clientX, clientY } = this.getClientPosition(event);\r\n\r\n        if (!this.eventType) {\r\n            this.startX = clientX - this.elementPosition.left;\r\n            this.startY = clientY - this.elementPosition.top;\r\n        }\r\n\r\n        this.eventType = 'pan';\r\n        this.moveX = this.initialMoveX + (this.moveLeft(event, 0) - this.startX);\r\n        this.moveY = this.initialMoveY + (this.moveTop(event, 0) - this.startY);\r\n\r\n        if (this.properties.limitPan) {\r\n            this.limitPanY();\r\n            this.limitPanX();\r\n        }\r\n\r\n        /* mousemove */\r\n        if (event.type === 'mousemove' && this.scale > this.minPanScale) {\r\n            this.centeringImage();\r\n        }\r\n\r\n        this.transformElement(0);\r\n    };\r\n\r\n    handleDoubleTap = (event: any) => {\r\n        this.toggleZoom(event);\r\n        return;\r\n    };\r\n\r\n    handlePinch = (event: any) => {\r\n        event.preventDefault();\r\n\r\n        if (this.eventType === undefined || this.eventType === 'pinch') {\r\n            const touches = event.touches;\r\n\r\n            if (!this.eventType) {\r\n                this.initialDistance = this.getDistance(touches);\r\n\r\n                const moveLeft0 = this.moveLeft(event, 0);\r\n                const moveLeft1 = this.moveLeft(event, 1);\r\n                const moveTop0 = this.moveTop(event, 0);\r\n                const moveTop1 = this.moveTop(event, 1);\r\n\r\n                this.moveXC = (moveLeft0 + moveLeft1) / 2 - this.initialMoveX;\r\n                this.moveYC = (moveTop0 + moveTop1) / 2 - this.initialMoveY;\r\n            }\r\n\r\n            this.eventType = 'pinch';\r\n            this.distance = this.getDistance(touches);\r\n            this.scale = this.initialScale * (this.distance / this.initialDistance);\r\n            this.moveX = this.initialMoveX - ((this.distance / this.initialDistance) * this.moveXC - this.moveXC);\r\n            this.moveY = this.initialMoveY - ((this.distance / this.initialDistance) * this.moveYC - this.moveYC);\r\n\r\n            this.handleLimitZoom();\r\n\r\n            if (this.properties.limitPan) {\r\n                this.limitPanY();\r\n                this.limitPanX();\r\n            }\r\n\r\n            this.transformElement(0);\r\n        }\r\n    };\r\n\r\n    handleWheel = (event: any) => {\r\n        event.preventDefault();\r\n\r\n        let wheelZoomFactor = this.properties.wheelZoomFactor || 0;\r\n        let zoomFactor = event.deltaY < 0 ? wheelZoomFactor : -wheelZoomFactor;\r\n        let newScale = this.initialScale + zoomFactor;\r\n\r\n        /* Round value */\r\n        if (newScale < 1 + wheelZoomFactor) {\r\n            newScale = 1;\r\n        } else if (newScale < this.maxScale && newScale > this.maxScale - wheelZoomFactor) {\r\n            newScale = this.maxScale;\r\n        }\r\n\r\n        if (newScale < 1 || newScale > this.maxScale) {\r\n            return;\r\n        }\r\n\r\n        if (newScale === this.scale) {\r\n            return;\r\n        }\r\n\r\n        this.getElementPosition();\r\n        this.scale = newScale;\r\n\r\n        /* Get cursor position over image */\r\n        let xCenter = event.clientX - this.elementPosition.left - this.initialMoveX;\r\n        let yCenter = event.clientY - this.elementPosition.top - this.initialMoveY;\r\n\r\n        this.setZoom({\r\n            scale: newScale,\r\n            center: [xCenter, yCenter],\r\n        });\r\n    };\r\n\r\n    handleResize = (_event: any) => {\r\n        this.setAutoHeight();\r\n    };\r\n\r\n    handleLimitZoom() {\r\n        const limitZoom = this.maxScale;\r\n        const minScale = this.properties.minScale || 0;\r\n\r\n        if (this.scale > limitZoom || this.scale <= minScale) {\r\n            const imageWidth = this.getImageWidth();\r\n            const imageHeight = this.getImageHeight();\r\n            const enlargedImageWidth = imageWidth * this.scale;\r\n            const enlargedImageHeight = imageHeight * this.scale;\r\n            const moveXRatio = this.moveX / (enlargedImageWidth - imageWidth);\r\n            const moveYRatio = this.moveY / (enlargedImageHeight - imageHeight);\r\n\r\n            if (this.scale > limitZoom) {\r\n                this.scale = limitZoom;\r\n            }\r\n\r\n            if (this.scale <= minScale) {\r\n                this.scale = minScale;\r\n            }\r\n\r\n            const newImageWidth = imageWidth * this.scale;\r\n            const newImageHeight = imageHeight * this.scale;\r\n\r\n            this.moveX = -Math.abs(moveXRatio * (newImageWidth - imageWidth));\r\n            this.moveY = -Math.abs(-moveYRatio * (newImageHeight - imageHeight));\r\n        }\r\n    }\r\n\r\n    moveLeft(event: any, index: number = 0) {\r\n        const clientX = this.getClientPosition(event, index).clientX;\r\n        return clientX - this.elementPosition.left;\r\n    }\r\n\r\n    moveTop(event: any, index: number = 0) {\r\n        const clientY = this.getClientPosition(event, index).clientY;\r\n        return clientY - this.elementPosition.top;\r\n    }\r\n\r\n    /*\r\n     * Detection\r\n     */\r\n\r\n    centeringImage() {\r\n        const img = this.element.getElementsByTagName(this.elementTarget)[0];\r\n        const initialMoveX = this.moveX;\r\n        const initialMoveY = this.moveY;\r\n\r\n        if (this.moveY > 0) {\r\n            this.moveY = 0;\r\n        }\r\n        if (this.moveX > 0) {\r\n            this.moveX = 0;\r\n        }\r\n\r\n        if (img) {\r\n            this.limitPanY();\r\n            this.limitPanX();\r\n        }\r\n        if (img && this.scale < 1) {\r\n            if (this.moveX < this.element.offsetWidth * (1 - this.scale)) {\r\n                this.moveX = this.element.offsetWidth * (1 - this.scale);\r\n            }\r\n        }\r\n\r\n        return initialMoveX !== this.moveX || initialMoveY !== this.moveY;\r\n    }\r\n\r\n    limitPanY() {\r\n        const imgHeight = this.getImageHeight();\r\n        const scaledImgHeight = imgHeight * this.scale;\r\n        const parentHeight = this.parentElement.offsetHeight;\r\n        const elementHeight = this.element.offsetHeight;\r\n\r\n        if (scaledImgHeight < parentHeight) {\r\n            this.moveY = (parentHeight - elementHeight * this.scale) / 2;\r\n        } else {\r\n            const imgOffsetTop = ((imgHeight - elementHeight) * this.scale) / 2;\r\n\r\n            if (this.moveY > imgOffsetTop) {\r\n                this.moveY = imgOffsetTop;\r\n            } else if (scaledImgHeight + Math.abs(imgOffsetTop) - parentHeight + this.moveY < 0) {\r\n                this.moveY = -(scaledImgHeight + Math.abs(imgOffsetTop) - parentHeight);\r\n            }\r\n        }\r\n    }\r\n\r\n    limitPanX() {\r\n        const imgWidth = this.getImageWidth();\r\n        const scaledImgWidth = imgWidth * this.scale;\r\n        const parentWidth = this.parentElement.offsetWidth;\r\n        const elementWidth = this.element.offsetWidth;\r\n\r\n        if (scaledImgWidth < parentWidth) {\r\n            this.moveX = (parentWidth - elementWidth * this.scale) / 2;\r\n        } else {\r\n            const imgOffsetLeft = ((imgWidth - elementWidth) * this.scale) / 2;\r\n\r\n            if (this.moveX > imgOffsetLeft) {\r\n                this.moveX = imgOffsetLeft;\r\n            } else if (scaledImgWidth + Math.abs(imgOffsetLeft) - parentWidth + this.moveX < 0) {\r\n                this.moveX = -(imgWidth * this.scale + Math.abs(imgOffsetLeft) - parentWidth);\r\n            }\r\n        }\r\n    }\r\n\r\n    setBasicStyles() {\r\n        this.element.style.display = 'flex';\r\n        this.element.style.alignItems = 'center';\r\n        this.element.style.justifyContent = 'center';\r\n        this.element.style.transformOrigin = '0 0';\r\n        this.setImageSize();\r\n        this.setDraggableImage();\r\n    }\r\n\r\n    removeBasicStyles() {\r\n        this.element.style.display = '';\r\n        this.element.style.alignItems = '';\r\n        this.element.style.justifyContent = '';\r\n        this.element.style.transformOrigin = '';\r\n        this.removeImageSize();\r\n        this.removeDraggableImage();\r\n    }\r\n\r\n    setDraggableImage() {\r\n        const imgElement = this.getImageElement();\r\n\r\n        if (imgElement) {\r\n            imgElement.draggable = this.properties.draggableImage;\r\n        }\r\n    }\r\n\r\n    removeDraggableImage() {\r\n        const imgElement = this.getImageElement();\r\n\r\n        if (imgElement) {\r\n            imgElement.draggable = true;\r\n        }\r\n    }\r\n\r\n    setImageSize() {\r\n        const imgElement = this.element.getElementsByTagName(this.elementTarget);\r\n\r\n        if (imgElement.length) {\r\n            imgElement[0].style.maxWidth = '100%';\r\n            imgElement[0].style.maxHeight = '100%';\r\n\r\n            this.setAutoHeight();\r\n        }\r\n    }\r\n\r\n    setAutoHeight() {\r\n        const imgElement = this.element.getElementsByTagName(this.elementTarget);\r\n\r\n        if (!this.properties.autoHeight || !imgElement.length) {\r\n            return;\r\n        }\r\n\r\n        const imgNaturalWidth = imgElement[0].getAttribute('width');\r\n        const imgNaturalHeight = imgElement[0].getAttribute('height');\r\n        const sizeRatio = imgNaturalWidth / imgNaturalHeight;\r\n        const parentWidth = this.parentElement.offsetWidth;\r\n\r\n        imgElement[0].style.maxHeight = parentWidth / sizeRatio + 'px';\r\n    }\r\n\r\n    removeImageSize() {\r\n        const imgElement = this.element.getElementsByTagName(this.elementTarget);\r\n\r\n        if (imgElement.length) {\r\n            imgElement[0].style.maxWidth = '';\r\n            imgElement[0].style.maxHeight = '';\r\n        }\r\n    }\r\n\r\n    getElementPosition() {\r\n        this.elementPosition = this.element.parentElement.getBoundingClientRect();\r\n    }\r\n\r\n    getTouchstartPosition(event: any) {\r\n        const { clientX, clientY } = this.getClientPosition(event);\r\n\r\n        this.startX = clientX - this.elementPosition.left;\r\n        this.startY = clientY - this.elementPosition.top;\r\n    }\r\n\r\n    getClientPosition(event: any, index: number = 0) {\r\n        let clientX;\r\n        let clientY;\r\n\r\n        if (event.type === 'touchstart' || event.type === 'touchmove') {\r\n            clientX = event.touches[index].clientX;\r\n            clientY = event.touches[index].clientY;\r\n        }\r\n        if (event.type === 'mousedown' || event.type === 'mousemove') {\r\n            clientX = event.clientX;\r\n            clientY = event.clientY;\r\n        }\r\n\r\n        return {\r\n            clientX,\r\n            clientY,\r\n        };\r\n    }\r\n\r\n    resetScale() {\r\n        this.scale = 1;\r\n        this.moveX = 0;\r\n        this.moveY = 0;\r\n        this.updateInitialValues();\r\n        this.transformElement(this.properties.transitionDuration);\r\n    }\r\n\r\n    updateInitialValues() {\r\n        this.initialScale = this.scale;\r\n        this.initialMoveX = this.moveX;\r\n        this.initialMoveY = this.moveY;\r\n\r\n        let visibleAreaWidth = this.element.offsetWidth;\r\n        let visibleAreaHeight = this.element.offsetHeight;\r\n        const event = {\r\n            scale: this.initialScale,\r\n            moveX: this.initialMoveX,\r\n            moveY:  this.initialMoveY,\r\n            visibleAreaWidth: visibleAreaWidth,\r\n            visibleAreaHeight: visibleAreaHeight,\r\n        } as ZoomEvent\r\n        this.onZoomChange.emit(event);\r\n    }\r\n\r\n    getDistance(touches: any) {\r\n        return Math.sqrt(Math.pow(touches[0].pageX - touches[1].pageX, 2) + Math.pow(touches[0].pageY - touches[1].pageY, 2));\r\n    }\r\n\r\n    getImageHeight() {\r\n        const img = this.element.getElementsByTagName(this.elementTarget)[0];\r\n        return img.offsetHeight;\r\n    }\r\n\r\n    getImageWidth() {\r\n        const img = this.element.getElementsByTagName(this.elementTarget)[0];\r\n        return img.offsetWidth;\r\n    }\r\n\r\n    transformElement(duration: any) {\r\n        this.element.style.transition = 'all ' + duration + 'ms';\r\n        this.element.style.transform =\r\n            'matrix(' + Number(this.scale) + ', 0, 0, ' + Number(this.scale) + ', ' + Number(this.moveX) + ', ' + Number(this.moveY) + ')';\r\n    }\r\n\r\n    isTouchScreen() {\r\n        const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n\r\n        if ('ontouchstart' in window) {\r\n            return true;\r\n        }\r\n\r\n        // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n        // https://git.io/vznFH\r\n        const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n        return this.getMatchMedia(query);\r\n    }\r\n\r\n    getMatchMedia(query: any) {\r\n        return window.matchMedia(query).matches;\r\n    }\r\n\r\n    isDragging() {\r\n        if (this.properties.disablePan) {\r\n            return false;\r\n        }\r\n\r\n        const imgHeight = this.getImageHeight();\r\n        const imgWidth = this.getImageWidth();\r\n\r\n        if (this.scale > 1) {\r\n            return imgHeight * this.scale > this.parentElement.offsetHeight || imgWidth * this.scale > this.parentElement.offsetWidth;\r\n        }\r\n        if (this.scale === 1) {\r\n            return imgHeight > this.parentElement.offsetHeight || imgWidth > this.parentElement.offsetWidth;\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    detectLimitZoom() {\r\n        this.maxScale = this.defaultMaxScale;\r\n        if (this.properties.limitZoom !== 'original image size' && +this.properties.limitZoom > 0) {\r\n            this.maxScale = +this.properties.limitZoom;\r\n        }\r\n\r\n        if (this.properties.limitZoom === 'original image size' && this.elementTarget === 'IMG') {\r\n            // We are waiting for the element with the image to be available\r\n            this.pollLimitZoomForOriginalImage();\r\n        }\r\n    }\r\n\r\n    pollLimitZoomForOriginalImage() {\r\n        let poll = setInterval(() => {\r\n            let maxScaleForOriginalImage = this.getMaxScaleForOriginalImage();\r\n            if (typeof maxScaleForOriginalImage === 'number') {\r\n                this.maxScale = maxScaleForOriginalImage;\r\n                clearInterval(poll);\r\n            }\r\n        }, 10);\r\n    }\r\n\r\n    getMaxScaleForOriginalImage() {\r\n        let maxScale!: number;\r\n        let img = this.element.getElementsByTagName('img')[0];\r\n\r\n        if (img.naturalWidth && img.offsetWidth) {\r\n            maxScale = img.naturalWidth / img.offsetWidth;\r\n        }\r\n\r\n        return maxScale;\r\n    }\r\n\r\n    getImageElement() {\r\n        const imgElement = this.element.getElementsByTagName(this.elementTarget);\r\n\r\n        if (imgElement.length) {\r\n            return imgElement[0];\r\n        }\r\n    }\r\n\r\n    toggleZoom(event: any = false) {\r\n        if (this.initialScale === 1) {\r\n            if (event && event.changedTouches) {\r\n                if (this.properties.doubleTapScale === undefined) {\r\n                    return;\r\n                }\r\n\r\n                const changedTouches = event.changedTouches;\r\n                this.scale = this.initialScale * this.properties.doubleTapScale;\r\n                this.moveX =\r\n                    this.initialMoveX - (changedTouches[0].clientX - this.elementPosition.left) * (this.properties.doubleTapScale - 1);\r\n                this.moveY =\r\n                    this.initialMoveY - (changedTouches[0].clientY - this.elementPosition.top) * (this.properties.doubleTapScale - 1);\r\n            } else {\r\n                let zoomControlScale = this.properties.zoomControlScale || 0;\r\n                this.scale = this.initialScale * (zoomControlScale + 1);\r\n                this.moveX = this.initialMoveX - (this.element.offsetWidth * (this.scale - 1)) / 2;\r\n                this.moveY = this.initialMoveY - (this.element.offsetHeight * (this.scale - 1)) / 2;\r\n            }\r\n\r\n            this.centeringImage();\r\n            this.updateInitialValues();\r\n            this.transformElement(this.properties.transitionDuration);\r\n        } else {\r\n            this.resetScale();\r\n        }\r\n    }\r\n\r\n    zoomPoint(point: MouseZoomPoint, scale?: number) {\r\n        console.warn('zoomPoint', point, scale);\r\n        let newScale=  scale ?? (this.initialScale + this.properties.stepZoomFactor);\r\n\r\n        if (newScale < 1 || newScale > this.maxScale) {\r\n            return;\r\n        }\r\n\r\n        if (newScale === this.scale) {\r\n            return;\r\n        }\r\n\r\n        /* Get cursor position over image */\r\n        let newCenter = undefined\r\n        if(point){\r\n            let xCenter = point.clientX - this.elementPosition.left - this.initialMoveX;\r\n            let yCenter = point.clientY - this.elementPosition.top - this.initialMoveY;\r\n            newCenter = [xCenter, yCenter];\r\n        }\r\n        console.warn('newScale2', newScale);\r\n        this.getElementPosition();\r\n        this.scale = newScale;\r\n\r\n        this.setZoom({\r\n            scale: newScale,\r\n            center: newCenter\r\n        });\r\n    }\r\n\r\n    stepZoom(mode: 'IN' | 'OUT') {\r\n            let stepZoomFactor =  this.properties.stepZoomFactor ?? 0;\r\n            let zoomFactor = 0\r\n            if(mode === 'OUT') {\r\n                zoomFactor = -stepZoomFactor;\r\n            }\r\n            if(mode === 'IN') {\r\n                zoomFactor = stepZoomFactor;\r\n            }\r\n            let newScale= this.initialScale + zoomFactor;\r\n            console.warn('newScale', newScale);\r\n\r\n            /* Round value */\r\n            if (newScale < 1 + stepZoomFactor) {\r\n                newScale = 1;\r\n            } else if (newScale < this.maxScale && newScale > this.maxScale - stepZoomFactor) {\r\n                newScale = this.maxScale;\r\n            }\r\n\r\n            if (newScale < 1 || newScale > this.maxScale) {\r\n                return;\r\n            }\r\n\r\n            if (newScale === this.scale) {\r\n                return;\r\n            }\r\n\r\n            console.warn('newScale2', newScale);\r\n            this.getElementPosition();\r\n            this.scale = newScale;\r\n\r\n            this.setZoom({\r\n                scale: newScale,\r\n                center: undefined\r\n            });\r\n    }\r\n\r\n    setZoom(properties: { scale: number; center?: number[] }) {\r\n        this.scale = properties.scale;\r\n\r\n        let xCenter;\r\n        let yCenter;\r\n        let visibleAreaWidth = this.element.offsetWidth;\r\n        let visibleAreaHeight = this.element.offsetHeight;\r\n        let scalingPercent = (visibleAreaWidth * this.scale) / (visibleAreaWidth * this.initialScale);\r\n\r\n        if (properties.center) {\r\n            xCenter = properties.center[0];\r\n            yCenter = properties.center[1];\r\n        } else {\r\n            xCenter = visibleAreaWidth / 2 - this.initialMoveX;\r\n            yCenter = visibleAreaHeight / 2 - this.initialMoveY;\r\n        }\r\n\r\n        this.moveX = this.initialMoveX - (scalingPercent * xCenter - xCenter);\r\n        this.moveY = this.initialMoveY - (scalingPercent * yCenter - yCenter);\r\n\r\n        this.centeringImage();\r\n        this.updateInitialValues();\r\n        this.transformElement(this.properties.transitionDuration);\r\n    }\r\n\r\n    alignImage() {\r\n        const isMoveChanged = this.centeringImage();\r\n\r\n        if (isMoveChanged) {\r\n            this.updateInitialValues();\r\n            this.transformElement(this.properties.transitionDuration);\r\n        }\r\n    }\r\n\r\n    destroy() {\r\n        this.removeBasicStyles();\r\n        this.touches.destroy();\r\n    }\r\n\r\n    getPropertiesValue(propertyName: PropertyName) {\r\n        if (this.properties && this.properties[propertyName]) {\r\n            return this.properties[propertyName];\r\n        } else {\r\n            return defaultProperties[propertyName];\r\n        }\r\n    }\r\n}\r\n","import {\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostBinding,\r\n    Input,\r\n    OnDestroy, OnInit, Output,\r\n    SimpleChanges\r\n} from '@angular/core';\r\n\r\nimport {MouseZoomPoint, PinchZoomProperties, ZoomEvent} from './interfaces';\r\nimport { defaultProperties, backwardCompatibilityProperties } from './properties';\r\nimport { IvyPinch } from './ivypinch';\r\n\r\nexport const _defaultComponentProperties: PinchZoomProperties = {\r\n    overflow: 'hidden',\r\n    disableZoomControl: 'auto',\r\n    backgroundColor: 'rgba(0,0,0,0.85)',\r\n};\r\n\r\ntype PropertyName = keyof PinchZoomProperties;\r\n\r\n@Component({\r\n    selector: 'pinch-zoom, [pinch-zoom]',\r\n    exportAs: 'pinchZoom',\r\n    templateUrl: './pinch-zoom.component.html',\r\n    styleUrls: ['./pinch-zoom.component.sass'],\r\n})\r\nexport class PinchZoomComponent implements OnInit, OnDestroy {\r\n    defaultComponentProperties!: PinchZoomProperties;\r\n    private pinchZoom: IvyPinch;\r\n    private _properties!: PinchZoomProperties;\r\n    private zoomControlPositionClass: string | undefined;\r\n    private _transitionDuration!: number;\r\n    private _doubleTap!: boolean;\r\n    private _doubleTapScale!: number;\r\n    private _autoZoomOut!: boolean;\r\n    private _limitZoom!: number | 'original image size';\r\n\r\n    @Input('properties') set properties(value: PinchZoomProperties) {\r\n        if (value) {\r\n            this._properties = value;\r\n        }\r\n    }\r\n\r\n    get properties() {\r\n        return this._properties;\r\n    }\r\n\r\n    // transitionDuration\r\n    @Input('transition-duration') set transitionDurationBackwardCompatibility(value: number) {\r\n        if (value) {\r\n            this._transitionDuration = value;\r\n        }\r\n    }\r\n\r\n    @Input('transitionDuration') set transitionDuration(value: number) {\r\n        if (value) {\r\n            this._transitionDuration = value;\r\n        }\r\n    }\r\n\r\n    get transitionDuration() {\r\n        return this._transitionDuration;\r\n    }\r\n\r\n    // doubleTap\r\n    @Input('double-tap') set doubleTapBackwardCompatibility(value: boolean) {\r\n        if (value) {\r\n            this._doubleTap = value;\r\n        }\r\n    }\r\n\r\n    @Input('doubleTap') set doubleTap(value: boolean) {\r\n        if (value) {\r\n            this._doubleTap = value;\r\n        }\r\n    }\r\n\r\n    get doubleTap() {\r\n        return this._doubleTap;\r\n    }\r\n\r\n    // doubleTapScale\r\n    @Input('double-tap-scale') set doubleTapScaleBackwardCompatibility(value: number) {\r\n        if (value) {\r\n            this._doubleTapScale = value;\r\n        }\r\n    }\r\n\r\n    @Input('doubleTapScale') set doubleTapScale(value: number) {\r\n        if (value) {\r\n            this._doubleTapScale = value;\r\n        }\r\n    }\r\n\r\n    get doubleTapScale() {\r\n        return this._doubleTapScale;\r\n    }\r\n\r\n    // autoZoomOut\r\n    @Input('auto-zoom-out') set autoZoomOutBackwardCompatibility(value: boolean) {\r\n        if (value) {\r\n            this._autoZoomOut = value;\r\n        }\r\n    }\r\n\r\n    @Input('autoZoomOut') set autoZoomOut(value: boolean) {\r\n        if (value) {\r\n            this._autoZoomOut = value;\r\n        }\r\n    }\r\n\r\n    get autoZoomOut() {\r\n        return this._autoZoomOut;\r\n    }\r\n\r\n    // limitZoom\r\n    @Input('limit-zoom') set limitZoomBackwardCompatibility(value: number | 'original image size') {\r\n        if (value) {\r\n            this._limitZoom = value;\r\n        }\r\n    }\r\n\r\n    @Input('limitZoom') set limitZoom(value: number | 'original image size') {\r\n        if (value) {\r\n            this._limitZoom = value;\r\n        }\r\n    }\r\n\r\n    get limitZoom() {\r\n        return this._limitZoom;\r\n    }\r\n\r\n    @Input() disabled!: boolean;\r\n    @Input() disablePan!: boolean;\r\n    @Input() overflow!: 'hidden' | 'visible';\r\n    @Input() zoomControlScale!: number;\r\n    @Input() disableZoomControl!: 'disable' | 'never' | 'auto';\r\n    @Input() backgroundColor!: string;\r\n    @Input() limitPan!: boolean;\r\n    @Input() minPanScale!: number;\r\n    @Input() minScale!: number;\r\n    @Input() listeners!: 'auto' | 'mouse and touch';\r\n    @Input() wheel!: boolean;\r\n    @Input() autoHeight!: boolean;\r\n    @Input() stepZoomFactor!: number;\r\n    @Input() wheelZoomFactor!: number;\r\n    @Input() draggableImage!: boolean;\r\n\r\n    @Output() onZoomChange: EventEmitter<ZoomEvent> = new EventEmitter<ZoomEvent>();\r\n\r\n    @HostBinding('style.overflow')\r\n    get hostOverflow() {\r\n        return this.properties['overflow'];\r\n    }\r\n\r\n    @HostBinding('style.background-color')\r\n    get hostBackgroundColor() {\r\n        return this.properties['backgroundColor'];\r\n    }\r\n\r\n    get isTouchScreen() {\r\n        var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n        var mq = function (query: any) {\r\n            return window.matchMedia(query).matches;\r\n        };\r\n\r\n        if ('ontouchstart' in window) {\r\n            return true;\r\n        }\r\n\r\n        // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n        // https://git.io/vznFH\r\n        var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n        return mq(query);\r\n    }\r\n\r\n    get isDragging() {\r\n        return this.pinchZoom ? this.pinchZoom.isDragging() : undefined;\r\n    }\r\n\r\n    get isDisabled() {\r\n        return this.properties['disabled'];\r\n    }\r\n\r\n    get scale() {\r\n        return this.pinchZoom.scale;\r\n    }\r\n\r\n    get isZoomedIn() {\r\n        return this.scale > 1;\r\n    }\r\n\r\n    get scaleLevel() {\r\n        return Math.round(this.scale / this._zoomControlScale);\r\n    }\r\n\r\n    get maxScale() {\r\n        return this.pinchZoom.maxScale;\r\n    }\r\n\r\n    get isZoomLimitReached() {\r\n        return this.scale >= this.maxScale;\r\n    }\r\n\r\n    get _zoomControlScale() {\r\n        return this.getPropertiesValue('zoomControlScale');\r\n    }\r\n\r\n    constructor(private elementRef: ElementRef) {\r\n        this.defaultComponentProperties = this.getDefaultComponentProperties();\r\n        this.applyPropertiesDefault(this.defaultComponentProperties, {});\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.initPinchZoom();\r\n\r\n        /* Calls the method until the image size is available */\r\n        this.detectLimitZoom();\r\n    }\r\n\r\n    isControl() {\r\n        if (this.isDisabled) {\r\n            return false;\r\n        }\r\n\r\n        if (this.properties['disableZoomControl'] === 'disable') {\r\n            return false;\r\n        }\r\n\r\n        if (this.isTouchScreen && this.properties['disableZoomControl'] === 'auto') {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        let changedProperties = this.getProperties(changes);\r\n        changedProperties = this.renameProperties(changedProperties);\r\n\r\n        this.applyPropertiesDefault(this.defaultComponentProperties, changedProperties);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.destroy();\r\n    }\r\n\r\n    toggleZoom() {\r\n        this.pinchZoom.toggleZoom();\r\n    }\r\n\r\n    zoomPoint(point: MouseZoomPoint, scale?: number) {\r\n        this.pinchZoom.zoomPoint(point, scale);\r\n    }\r\n\r\n    zoomIn() {\r\n        this.pinchZoom.stepZoom('IN');\r\n    }\r\n\r\n    zoomOut() {\r\n        this.pinchZoom.stepZoom('OUT');\r\n    }\r\n\r\n    resetZoom() {\r\n        this.pinchZoom.resetScale();\r\n    }\r\n\r\n    destroy() {\r\n        if (this.pinchZoom) this.pinchZoom.destroy();\r\n    }\r\n\r\n    private initPinchZoom() {\r\n        if (this.properties['disabled']) {\r\n            return;\r\n        }\r\n\r\n        this.properties['element'] = this.elementRef.nativeElement.querySelector('.pinch-zoom-content');\r\n        this.pinchZoom = new IvyPinch(this.properties, this.onZoomChange);\r\n    }\r\n\r\n    private getProperties(changes: SimpleChanges) {\r\n        let properties: any = {};\r\n\r\n        for (var prop in changes) {\r\n            if (prop !== 'properties') {\r\n                properties[prop] = changes[prop].currentValue;\r\n            }\r\n            if (prop === 'properties') {\r\n                properties = changes[prop].currentValue;\r\n            }\r\n        }\r\n        return properties;\r\n    }\r\n\r\n    private renameProperties(properties: any) {\r\n        for (var prop in properties) {\r\n            if (backwardCompatibilityProperties[prop]) {\r\n                properties[backwardCompatibilityProperties[prop]] = properties[prop];\r\n                delete properties[prop];\r\n            }\r\n        }\r\n\r\n        return properties;\r\n    }\r\n\r\n    private applyPropertiesDefault(defaultProperties: PinchZoomProperties, properties: PinchZoomProperties): void {\r\n        this.properties = Object.assign({}, defaultProperties, properties);\r\n    }\r\n\r\n    private detectLimitZoom() {\r\n        if (this.pinchZoom) {\r\n            this.pinchZoom.detectLimitZoom();\r\n        }\r\n    }\r\n\r\n    private getPropertiesValue(propertyName: PropertyName) {\r\n        if (this.properties && this.properties[propertyName]) {\r\n            return this.properties[propertyName];\r\n        } else {\r\n            return this.defaultComponentProperties[propertyName];\r\n        }\r\n    }\r\n\r\n    private getDefaultComponentProperties() {\r\n        return { ...defaultProperties, ..._defaultComponentProperties };\r\n    }\r\n}\r\n","<div class=\"pinch-zoom-content\" [class.pz-dragging]=\"isDragging\">\r\n    <ng-content></ng-content>\r\n</div>\r\n\r\n<!-- Control: one button -->\r\n<div\r\n    class=\"pz-zoom-button pz-zoom-control-position-bottom\"\r\n    [class.pz-zoom-button-out]=\"isZoomedIn\"\r\n    *ngIf=\"isControl()\"\r\n    (click)=\"toggleZoom()\"\r\n></div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PinchZoomComponent } from './pinch-zoom.component';\r\n\r\n@NgModule({\r\n    declarations: [PinchZoomComponent],\r\n    imports: [CommonModule],\r\n    exports: [PinchZoomComponent],\r\n    providers: [],\r\n    bootstrap: [],\r\n})\r\nexport class PinchZoomModule {}\r\n","/*\r\n * Public API Surface of ngx-pinch-zoom\r\n */\r\n\r\nexport * from './lib/interfaces';\r\nexport * from './lib/pinch-zoom.module';\r\nexport * from './lib/pinch-zoom.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEO,MAAM,iBAAiB,GAAe;AACzC,IAAA,kBAAkB,EAAE,GAAG;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,cAAc,EAAE,KAAK;CACxB,CAAC;AAEK,MAAM,+BAA+B,GAAQ;AAChD,IAAA,qBAAqB,EAAE,oBAAoB;AAC3C,IAAA,uCAAuC,EAAE,oBAAoB;AAC7D,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,8BAA8B,EAAE,WAAW;AAC3C,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,mCAAmC,EAAE,gBAAgB;AACrD,IAAA,eAAe,EAAE,aAAa;AAC9B,IAAA,gCAAgC,EAAE,aAAa;AAC/C,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,8BAA8B,EAAE,WAAW;CAC9C;;MCfY,OAAO,CAAA;AAChB,IAAA,UAAU,CAAa;AACvB,IAAA,OAAO,CAAc;AACrB,IAAA,eAAe,CAAa;IAC5B,SAAS,GAAc,SAAS,CAAC;IACjC,QAAQ,GAAQ,EAAE,CAAC;IACnB,MAAM,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,CAAC,CAAC;AACZ,IAAA,gBAAgB,CAAM;IACtB,mBAAmB,GAAG,GAAG,CAAC;IAC1B,aAAa,GAAG,GAAG,CAAC;IACpB,cAAc,GAAG,CAAC,CAAC;IACnB,CAAC,GAAW,CAAC,CAAC;IACd,WAAW,GAAG,KAAK,CAAC;AAEpB,IAAA,eAAe,GAAQ;AACnB,QAAA,UAAU,EAAE,kBAAkB;AAC9B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,QAAQ,EAAE,gBAAgB;KAC7B,CAAC;AACF,IAAA,eAAe,GAAQ;AACnB,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,KAAK,EAAE,aAAa;KACvB,CAAC;AACF,IAAA,eAAe,GAAQ;AACnB,QAAA,MAAM,EAAE,cAAc;KACzB,CAAC;AAEF,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,WAAA,CAAY,UAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAEjD,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;KACjD;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;KACpD;AAED,IAAA,oBAAoB,CAAC,MAAkD,EAAA;AACnE,QAAA,IAAI,SAAS,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,iBAAiB,EAAE;AACjD,YAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACvE,SAAA;AAAM,aAAA;AACH,YAAA,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACpF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACxB,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC7D,SAAA;AAED,QAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAiB,SAAS,CAAC,QAAQ,CAAC,CAAC;;YAGlD,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBACvB,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,iBAAA;;AAEJ,aAAA;AAAM,iBAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,EAAE;gBAC3D,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAChE,iBAAA;;AAEJ,aAAA;AAAM,iBAAA;gBACH,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACjE,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACpE,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,iBAAiB,CAAC,QAAgB,EAAA;QAC9B,MAAM,OAAO,GAAiB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;KAC3D;AAED,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACjC,MAAM,OAAO,GAAiB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;KAC9D;AAED;;AAEG;;AAIH,IAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACzC,KAAC,CAAC;;AAIF,IAAA,eAAe,GAAG,CAAC,KAAU,KAAI;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAG9B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjC,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,SAAA;AACL,KAAC,CAAC;AAEF,IAAA,iBAAiB,CAAC,KAAU,EAAA;;QAGxB,IAAI,CAAC,CAAC,EAAE,CAAC;AAET,QAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACrC,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC5C,SAAA;KACJ;;AAID,IAAA,cAAc,GAAG,CAAC,KAAU,KAAI;AAC5B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAG9B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACxC,SAAA;;QAGD,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;AAE5B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,SAAA;AACL,KAAC,CAAC;;AAIF,IAAA,eAAe,GAAG,CAAC,KAAU,KAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACxC,KAAC,CAAC;;AAIF,IAAA,eAAe,GAAG,CAAC,KAAU,KAAI;;AAG7B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;AACV,SAAA;;AAGD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;AAG9B,QAAA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjC,YAAA,KAAK,kBAAkB;AACnB,gBAAA,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;AACrC,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;gBAC3C,MAAM;AACV,YAAA,KAAK,gBAAgB;AACjB,gBAAA,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM;AACb,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAC/G,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;AACL,KAAC,CAAC;;AAIF,IAAA,aAAa,GAAG,CAAC,KAAU,KAAI;;QAE3B,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,KAAC,CAAC;;AAIF,IAAA,WAAW,GAAG,CAAC,KAAU,KAAI;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACpC,KAAC,CAAC;;AAIF,IAAA,YAAY,GAAG,CAAC,KAAU,KAAI;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,KAAC,CAAC;IAEF,UAAU,CAAC,SAAc,EAAE,QAAa,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtC,SAAA;KACJ;AAED;;AAEG;AAEH,IAAA,SAAS,CAAC,OAAY,EAAA;AAClB,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;KAChF;IAED,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,OAAO;AACV,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AAE7C,QAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEpC,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,IAAI,SAAS,GAAG,CAAC,EAAE;AACvD,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAK;AACpC,gBAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,aAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;AAE3B,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,SAAS,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,OAAO;AACV,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpD,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAClC,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;KAC/F;AAED,IAAA,iBAAiB,CAAC,KAAU,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAC3H,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACjG,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,kBAAkB,CAAC,KAAU,EAAA;QACzB,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAC9E,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjE,YAAA,IAAI,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE;AAC3B,gBAAA,OAAO,gBAAgB,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,kBAAkB,CAAC;AAC7B,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,SAAS,CAAC;AACzB,SAAA;KACJ;IAED,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;KAC/C;AAED,IAAA,qBAAqB,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KACrE;AAED,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KAC1D;IAED,QAAQ,CAAC,KAAU,EAAE,KAAU,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC7D,SAAA;AAAM,aAAA;YACH,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACpD,SAAA;KACJ;IAED,OAAO,CAAC,KAAU,EAAE,KAAU,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC5D,SAAA;AAAM,aAAA;YACH,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACnD,SAAA;KACJ;IAED,iBAAiB,GAAA;QACb,IAAI,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,UAAU,KAAU,EAAA;YACzB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC5C,SAAC,CAAC;QAEF,IAAI,cAAc,IAAI,MAAM,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;;;QAID,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7E,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;KACpB;;IAGD,EAAE,CAAC,KAAgB,EAAE,OAAiB,EAAA;AAClC,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AAClC,SAAA;KACJ;AACJ;;MCjZY,QAAQ,CAAA;IACjB,UAAU,GAAwB,iBAAiB,CAAC;AAC5C,IAAA,YAAY,CAA0B;AAC9C,IAAA,OAAO,CAAM;AACb,IAAA,OAAO,CAAM;AACb,IAAA,aAAa,CAAM;AACnB,IAAA,aAAa,CAAM;IACnB,CAAC,GAAW,CAAC,CAAC;IACP,KAAK,GAAW,CAAC,CAAC;IACzB,YAAY,GAAW,CAAC,CAAC;AACzB,IAAA,eAAe,CAAM;AACrB,IAAA,SAAS,CAAM;IACf,MAAM,GAAW,CAAC,CAAC;IACnB,MAAM,GAAW,CAAC,CAAC;IACnB,KAAK,GAAW,CAAC,CAAC;IAClB,KAAK,GAAW,CAAC,CAAC;IAClB,YAAY,GAAW,CAAC,CAAC;IACzB,YAAY,GAAW,CAAC,CAAC;IACzB,MAAM,GAAW,CAAC,CAAC;IACnB,MAAM,GAAW,CAAC,CAAC;IACnB,OAAO,GAAW,CAAC,CAAC;IACpB,YAAY,GAAY,KAAK,CAAC;IAC9B,QAAQ,GAAW,CAAC,CAAC;IACrB,gBAAgB,GAAW,CAAC,CAAC;IAC7B,eAAe,GAAW,CAAC,CAAC;IAC5B,MAAM,GAAQ,EAAE,CAAC;AACjB,IAAA,QAAQ,CAAU;IAClB,eAAe,GAAW,CAAC,CAAC;;AAG5B,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;KACjD;AAED,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;KACpC;IAED,WAAY,CAAA,UAA+B,EAAE,YAAqC,EAAA;AAC9E,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AAEjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACvB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,MAAM,EAAE,UAAU,CAAC,UAAU;AAC7B,YAAA,cAAc,EAAE;AACZ,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,KAAK,EAAE,aAAa;AACvB,aAAA;AACJ,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB;;AAEG;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,SAAA;KACJ;;AAID,IAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;QAC9B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC/D,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;AACL,KAAC,CAAC;;AAIF,IAAA,cAAc,GAAG,CAAC,KAAU,KAAI;;AAE5B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAG9B,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAClB,aAAA;;YAGD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC3D,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAClB,aAAA;;YAGD,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC3F,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,aAAA;;AAGD,YAAA,IACI,IAAI,CAAC,SAAS,KAAK,OAAO;gBAC1B,IAAI,CAAC,SAAS,KAAK,KAAK;gBACxB,IAAI,CAAC,SAAS,KAAK,kBAAkB;AACrC,gBAAA,IAAI,CAAC,SAAS,KAAK,gBAAgB,EACrC;gBACE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;AAE5B,YAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,aAAA;AACJ,SAAA;;AAGD,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,SAAA;QAED,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACtE,KAAC,CAAC;AAEF;;AAEG;AAEH,IAAA,SAAS,GAAG,CAAC,KAAU,KAAI;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC7D,OAAO;AACV,SAAA;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAClD,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACpD,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAExE,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,SAAA;;AAGD,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAC,CAAC;AAEF,IAAA,eAAe,GAAG,CAAC,KAAU,KAAI;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO;AACX,KAAC,CAAC;AAEF,IAAA,WAAW,GAAG,CAAC,KAAU,KAAI;QACzB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5D,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAExC,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAC9D,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/D,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACtG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAEtG,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,aAAA;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;AACL,KAAC,CAAC;AAEF,IAAA,WAAW,GAAG,CAAC,KAAU,KAAI;QACzB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC;AAC3D,QAAA,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC,eAAe,CAAC;AACvE,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;;AAG9C,QAAA,IAAI,QAAQ,GAAG,CAAC,GAAG,eAAe,EAAE;YAChC,QAAQ,GAAG,CAAC,CAAC;AAChB,SAAA;AAAM,aAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe,EAAE;AAC/E,YAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B,SAAA;QAED,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC1C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;YACzB,OAAO;AACV,SAAA;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;;AAGtB,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC5E,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QAE3E,IAAI,CAAC,OAAO,CAAC;AACT,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7B,SAAA,CAAC,CAAC;AACP,KAAC,CAAC;AAEF,IAAA,YAAY,GAAG,CAAC,MAAW,KAAI;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB,KAAC,CAAC;IAEF,eAAe,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;QAE/C,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE;AAClD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1C,YAAA,MAAM,kBAAkB,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;AACnD,YAAA,MAAM,mBAAmB,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,kBAAkB,GAAG,UAAU,CAAC,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,mBAAmB,GAAG,WAAW,CAAC,CAAC;AAEpE,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AAC1B,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,aAAA;AAED,YAAA,MAAM,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,YAAA,MAAM,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AAEhD,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC;AACxE,SAAA;KACJ;AAED,IAAA,QAAQ,CAAC,KAAU,EAAE,KAAA,GAAgB,CAAC,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC;AAC7D,QAAA,OAAO,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;KAC9C;AAED,IAAA,OAAO,CAAC,KAAU,EAAE,KAAA,GAAgB,CAAC,EAAA;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC;AAC7D,QAAA,OAAO,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KAC7C;AAED;;AAEG;IAEH,cAAc,GAAA;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAClB,SAAA;AAED,QAAA,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;QAED,OAAO,YAAY,KAAK,IAAI,CAAC,KAAK,IAAI,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC;KACrE;IAED,SAAS,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACxC,QAAA,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AACrD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAEhD,IAAI,eAAe,GAAG,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAChE,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,GAAG,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAEpE,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;AAC7B,aAAA;AAAM,iBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AACjF,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAC3E,aAAA;AACJ,SAAA;KACJ;IAED,SAAS,GAAA;AACL,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACtC,QAAA,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAE9C,IAAI,cAAc,GAAG,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9D,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,GAAG,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAEnE,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,aAAa,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;AAC9B,aAAA;AAAM,iBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gBAChF,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,CAAC;AACjF,aAAA;AACJ,SAAA;KACJ;IAED,cAAc,GAAA;QACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,iBAAiB,GAAA;QACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,iBAAiB,GAAA;AACb,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAE1C,QAAA,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AACzD,SAAA;KACJ;IAED,oBAAoB,GAAA;AAChB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAE1C,QAAA,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;AAC/B,SAAA;KACJ;IAED,YAAY,GAAA;AACR,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzE,IAAI,UAAU,CAAC,MAAM,EAAE;YACnB,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YACtC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;YAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;IAED,aAAa,GAAA;AACT,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACnD,OAAO;AACV,SAAA;QAED,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC9D,QAAA,MAAM,SAAS,GAAG,eAAe,GAAG,gBAAgB,CAAC;AACrD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AAEnD,QAAA,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;KAClE;IAED,eAAe,GAAA;AACX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzE,IAAI,UAAU,CAAC,MAAM,EAAE;YACnB,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;YAClC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;AACtC,SAAA;KACJ;IAED,kBAAkB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;KAC7E;AAED,IAAA,qBAAqB,CAAC,KAAU,EAAA;AAC5B,QAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KACpD;AAED,IAAA,iBAAiB,CAAC,KAAU,EAAE,KAAA,GAAgB,CAAC,EAAA;AAC3C,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,IAAI,OAAO,CAAC;QAEZ,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;YAC3D,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACvC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC1C,SAAA;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1D,YAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACxB,YAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,SAAA;QAED,OAAO;YACH,OAAO;YACP,OAAO;SACV,CAAC;KACL;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;KAC7D;IAED,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAChD,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG;YACV,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAG,IAAI,CAAC,YAAY;AACzB,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,iBAAiB,EAAE,iBAAiB;SAC1B,CAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;KACzH;IAED,cAAc,GAAA;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC,YAAY,CAAC;KAC3B;IAED,aAAa,GAAA;AACT,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC,WAAW,CAAC;KAC1B;AAED,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;AACzD,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS;AACxB,YAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KACtI;IAED,aAAa,GAAA;QACT,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,cAAc,IAAI,MAAM,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;;;QAID,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/E,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACpC;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;KAC3C;IAED,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC5B,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAEtC,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YAChB,OAAO,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AAC7H,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AAClB,YAAA,OAAO,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AACnG,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,qBAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE;YACvF,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,qBAAqB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;;YAErF,IAAI,CAAC,6BAA6B,EAAE,CAAC;AACxC,SAAA;KACJ;IAED,6BAA6B,GAAA;AACzB,QAAA,IAAI,IAAI,GAAG,WAAW,CAAC,MAAK;AACxB,YAAA,IAAI,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;AAClE,YAAA,IAAI,OAAO,wBAAwB,KAAK,QAAQ,EAAE;AAC9C,gBAAA,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC;gBACzC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvB,aAAA;SACJ,EAAE,EAAE,CAAC,CAAC;KACV;IAED,2BAA2B,GAAA;AACvB,QAAA,IAAI,QAAiB,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtD,QAAA,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,EAAE;YACrC,QAAQ,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,WAAW,CAAC;AACjD,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACnB;IAED,eAAe,GAAA;AACX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzE,IAAI,UAAU,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACxB,SAAA;KACJ;IAED,UAAU,CAAC,QAAa,KAAK,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE;oBAC9C,OAAO;AACV,iBAAA;AAED,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AAChE,gBAAA,IAAI,CAAC,KAAK;oBACN,IAAI,CAAC,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;AACvH,gBAAA,IAAI,CAAC,KAAK;oBACN,IAAI,CAAC,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;AACzH,aAAA;AAAM,iBAAA;gBACH,IAAI,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACvF,aAAA;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;KACJ;IAED,SAAS,CAAC,KAAqB,EAAE,KAAc,EAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,QAAQ,GAAG,KAAK,KAAK,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAE7E,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC1C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;YACzB,OAAO;AACV,SAAA;;QAGD,IAAI,SAAS,GAAG,SAAS,CAAA;AACzB,QAAA,IAAG,KAAK,EAAC;AACL,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC5E,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3E,YAAA,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,IAAI,CAAC,OAAO,CAAC;AACT,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,SAAS;AACpB,SAAA,CAAC,CAAC;KACN;AAED,IAAA,QAAQ,CAAC,IAAkB,EAAA;QACnB,IAAI,cAAc,GAAI,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,CAAC;QAC1D,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAG,IAAI,KAAK,KAAK,EAAE;YACf,UAAU,GAAG,CAAC,cAAc,CAAC;AAChC,SAAA;QACD,IAAG,IAAI,KAAK,IAAI,EAAE;YACd,UAAU,GAAG,cAAc,CAAC;AAC/B,SAAA;AACD,QAAA,IAAI,QAAQ,GAAE,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAC7C,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;;AAGnC,QAAA,IAAI,QAAQ,GAAG,CAAC,GAAG,cAAc,EAAE;YAC/B,QAAQ,GAAG,CAAC,CAAC;AAChB,SAAA;AAAM,aAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,EAAE;AAC9E,YAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B,SAAA;QAED,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC1C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;YACzB,OAAO;AACV,SAAA;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,IAAI,CAAC,OAAO,CAAC;AACT,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,SAAS;AACpB,SAAA,CAAC,CAAC;KACV;AAED,IAAA,OAAO,CAAC,UAAgD,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAChD,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAClD,QAAA,IAAI,cAAc,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,KAAK,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9F,IAAI,UAAU,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;YACH,OAAO,GAAG,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACnD,OAAO,GAAG,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;QAEtE,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;KAC7D;IAED,UAAU,GAAA;AACN,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAE5C,QAAA,IAAI,aAAa,EAAE;YACf,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC7D,SAAA;KACJ;IAED,OAAO,GAAA;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;KAC1B;AAED,IAAA,kBAAkB,CAAC,YAA0B,EAAA;QACzC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAC1C,SAAA;KACJ;AACJ;;ACntBY,MAAA,2BAA2B,GAAwB;AAC5D,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,kBAAkB,EAAE,MAAM;AAC1B,IAAA,eAAe,EAAE,kBAAkB;EACrC;AAIF,MAMa,kBAAkB,CAAA;AAsLP,IAAA,UAAA,CAAA;AArLpB,IAAA,0BAA0B,CAAuB;AACzC,IAAA,SAAS,CAAW;AACpB,IAAA,WAAW,CAAuB;AAClC,IAAA,wBAAwB,CAAqB;AAC7C,IAAA,mBAAmB,CAAU;AAC7B,IAAA,UAAU,CAAW;AACrB,IAAA,eAAe,CAAU;AACzB,IAAA,YAAY,CAAW;AACvB,IAAA,UAAU,CAAkC;IAEpD,IAAyB,UAAU,CAAC,KAA0B,EAAA;AAC1D,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC5B,SAAA;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;IAGD,IAAkC,uCAAuC,CAAC,KAAa,EAAA;AACnF,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACpC,SAAA;KACJ;IAED,IAAiC,kBAAkB,CAAC,KAAa,EAAA;AAC7D,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACpC,SAAA;KACJ;AAED,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;;IAGD,IAAyB,8BAA8B,CAAC,KAAc,EAAA;AAClE,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;IAED,IAAwB,SAAS,CAAC,KAAc,EAAA;AAC5C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;;IAGD,IAA+B,mCAAmC,CAAC,KAAa,EAAA;AAC5E,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAChC,SAAA;KACJ;IAED,IAA6B,cAAc,CAAC,KAAa,EAAA;AACrD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAChC,SAAA;KACJ;AAED,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;;IAGD,IAA4B,gCAAgC,CAAC,KAAc,EAAA;AACvE,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,SAAA;KACJ;IAED,IAA0B,WAAW,CAAC,KAAc,EAAA;AAChD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,SAAA;KACJ;AAED,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;;IAGD,IAAyB,8BAA8B,CAAC,KAAqC,EAAA;AACzF,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;IAED,IAAwB,SAAS,CAAC,KAAqC,EAAA;AACnE,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;AAEQ,IAAA,QAAQ,CAAW;AACnB,IAAA,UAAU,CAAW;AACrB,IAAA,QAAQ,CAAwB;AAChC,IAAA,gBAAgB,CAAU;AAC1B,IAAA,kBAAkB,CAAgC;AAClD,IAAA,eAAe,CAAU;AACzB,IAAA,QAAQ,CAAW;AACnB,IAAA,WAAW,CAAU;AACrB,IAAA,QAAQ,CAAU;AAClB,IAAA,SAAS,CAA8B;AACvC,IAAA,KAAK,CAAW;AAChB,IAAA,UAAU,CAAW;AACrB,IAAA,cAAc,CAAU;AACxB,IAAA,eAAe,CAAU;AACzB,IAAA,cAAc,CAAW;AAExB,IAAA,YAAY,GAA4B,IAAI,YAAY,EAAa,CAAC;AAEhF,IAAA,IACI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACtC;AAED,IAAA,IACI,mBAAmB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;KAC7C;AAED,IAAA,IAAI,aAAa,GAAA;QACb,IAAI,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,UAAU,KAAU,EAAA;YACzB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC5C,SAAC,CAAC;QAEF,IAAI,cAAc,IAAI,MAAM,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;;;QAID,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7E,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;KACpB;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC;KACnE;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACtC;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC/B;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KACzB;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC1D;AAED,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KAClC;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;KACtC;AAED,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;KACtD;AAED,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACvE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;KACpE;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE,CAAC;;QAGrB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,SAAS,GAAA;QACL,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,SAAS,EAAE;AACrD,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,MAAM,EAAE;AACxE,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAE7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;KACnF;IAED,WAAW,GAAA;QACP,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;KAC/B;IAED,SAAS,CAAC,KAAqB,EAAE,KAAc,EAAA;QAC3C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAC1C;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACjC;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;KAC/B;IAED,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;KAChD;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YAC7B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;KACrE;AAEO,IAAA,aAAa,CAAC,OAAsB,EAAA;QACxC,IAAI,UAAU,GAAQ,EAAE,CAAC;AAEzB,QAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE;YACtB,IAAI,IAAI,KAAK,YAAY,EAAE;gBACvB,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AACjD,aAAA;YACD,IAAI,IAAI,KAAK,YAAY,EAAE;AACvB,gBAAA,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAC3C,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACrB;AAEO,IAAA,gBAAgB,CAAC,UAAe,EAAA;AACpC,QAAA,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;AACzB,YAAA,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE;gBACvC,UAAU,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACrE,gBAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3B,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACrB;IAEO,sBAAsB,CAAC,iBAAsC,EAAE,UAA+B,EAAA;AAClG,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;KACtE;IAEO,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;AACpC,SAAA;KACJ;AAEO,IAAA,kBAAkB,CAAC,YAA0B,EAAA;QACjD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;AACxD,SAAA;KACJ;IAEO,6BAA6B,GAAA;AACjC,QAAA,OAAO,EAAE,GAAG,iBAAiB,EAAE,GAAG,2BAA2B,EAAE,CAAC;KACnE;uGA3SQ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,s0CC5B/B,2VAWA,EAAA,MAAA,EAAA,CAAA,wsIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDiBa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,YAC1B,WAAW,EAAA,QAAA,EAAA,2VAAA,EAAA,MAAA,EAAA,CAAA,wsIAAA,CAAA,EAAA,CAAA;iGAeI,UAAU,EAAA,CAAA;sBAAlC,KAAK;uBAAC,YAAY,CAAA;gBAWe,uCAAuC,EAAA,CAAA;sBAAxE,KAAK;uBAAC,qBAAqB,CAAA;gBAMK,kBAAkB,EAAA,CAAA;sBAAlD,KAAK;uBAAC,oBAAoB,CAAA;gBAWF,8BAA8B,EAAA,CAAA;sBAAtD,KAAK;uBAAC,YAAY,CAAA;gBAMK,SAAS,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;gBAWa,mCAAmC,EAAA,CAAA;sBAAjE,KAAK;uBAAC,kBAAkB,CAAA;gBAMI,cAAc,EAAA,CAAA;sBAA1C,KAAK;uBAAC,gBAAgB,CAAA;gBAWK,gCAAgC,EAAA,CAAA;sBAA3D,KAAK;uBAAC,eAAe,CAAA;gBAMI,WAAW,EAAA,CAAA;sBAApC,KAAK;uBAAC,aAAa,CAAA;gBAWK,8BAA8B,EAAA,CAAA;sBAAtD,KAAK;uBAAC,YAAY,CAAA;gBAMK,SAAS,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;gBAUT,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAGH,YAAY,EAAA,CAAA;sBADf,WAAW;uBAAC,gBAAgB,CAAA;gBAMzB,mBAAmB,EAAA,CAAA;sBADtB,WAAW;uBAAC,wBAAwB,CAAA;;;AEzJzC,MAOa,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EANT,YAAA,EAAA,CAAA,kBAAkB,CACvB,EAAA,OAAA,EAAA,CAAA,YAAY,aACZ,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAInB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YALd,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAKb,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,SAAS,EAAE,EAAE;AAChB,iBAAA,CAAA;;;ACVD;;AAEG;;ACFH;;AAEG;;;;"}