{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/zoom-control/index.ts"],"sourcesContent":["import { CSSProperties, Teleport, VNode } from 'vue'\nimport { computed, defineComponent, getCurrentInstance, nextTick, ref, createCommentVNode, h, reactive, watch } from 'vue'\nimport type {\n  VcCamera,\n  VcComponentInternalInstance,\n  VcZoomEvt,\n  VcBtnTooltipProps,\n  VcReadyObject,\n  VcComponentPublicInstance\n} from '@vue-cesium/utils/types'\nimport usePosition from '@vue-cesium/composables/private/use-position'\nimport { $, getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport { setViewerCamera } from '@vue-cesium/utils/cesium-helpers'\nimport { hMergeSlot } from '@vue-cesium/utils/private/render'\nimport { defaultProps, defaultOptions } from './defaultProps'\nimport type { VcBtnRef } from '@vue-cesium/components/ui'\nimport { VcBtn, VcIcon, VcTooltip } from '@vue-cesium/components/ui'\nimport { useCommon, useLocale } from '@vue-cesium/composables'\nimport useZoomControl from './use-zoom-control'\nimport { kebabCase } from '@vue-cesium/utils/util'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n  ...commonEmits,\n  zoomEvt: (evt: VcZoomEvt) => true\n}\nexport const zoomControlProps = defaultProps\nexport default defineComponent({\n  name: 'VcZoomControl',\n  props: zoomControlProps,\n  emits: emits,\n  setup(props: VcZoomControlProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcZoomControl'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === undefined) {\n      return\n    }\n    const { t } = useLocale()\n    const { $services } = commonState\n    const zoomControlState = useZoomControl(props, ctx, instance, $services)\n    const positionState = usePosition(props, $services)\n    const rootRef = ref<HTMLElement>(null)\n    const zoomInRef = ref<VcBtnRef>(null)\n    const zoomResetRef = ref<VcBtnRef>(null)\n    const zoomOutRef = ref<VcBtnRef>(null)\n    const parentInstance = getVcParentInstance(instance)\n    const hasVcNavigation = parentInstance.proxy?.$options.name === 'VcNavigation'\n    const canRender = ref(hasVcNavigation)\n    const rootStyle = reactive<CSSProperties>({})\n\n    // watch\n    watch(\n      () => props,\n      val => {\n        nextTick(() => {\n          if (!instance.mounted) {\n            return\n          }\n          updateRootStyle()\n        })\n      },\n      {\n        deep: true\n      }\n    )\n    // computed\n    const zoomOutOptions = computed(() => Object.assign({}, defaultOptions.zoomOutOptions, props.zoomOutOptions))\n    const zoomInOptions = computed(() => Object.assign({}, defaultOptions.zoomInOptions, props.zoomInOptions))\n    const zoomResetOptions = computed(() => Object.assign({}, defaultOptions.zoomResetOptions, props.zoomResetOptions))\n    // methods\n    instance.createCesiumObject = async () => {\n      const { viewer } = $services\n      if (props.overrideViewerCamera) {\n        const resetView: VcCamera = props.defaultResetView\n        setViewerCamera(viewer, resetView)\n      }\n\n      return rootRef\n    }\n    instance.mount = async () => {\n      canRender.value = true\n      nextTick(() => {\n        updateRootStyle()\n      })\n      const { viewer } = $services\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'mounted',\n        target: $(rootRef)\n      })\n      return true\n    }\n    instance.unmount = async () => {\n      canRender.value = false\n      const { viewer } = $services\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'unmounted',\n        target: $(rootRef)\n      })\n\n      return true\n    }\n\n    const updateRootStyle = () => {\n      const css: CSSProperties = positionState.style.value\n      rootStyle.left = css.left\n      rootStyle.top = css.top\n      rootStyle.transform = css.transform\n\n      css.flexDirection = props.direction === 'vertical' ? 'column' : 'row'\n      css.background = props.background\n      css.borderRadius = props.borderRadius\n      css.border = props.border\n\n      if (!hasVcNavigation) {\n        const zoomInTarget = $(zoomInRef)?.$el as HTMLElement\n        const zoomResetTarget = $(zoomResetRef)?.$el as HTMLElement\n        const zoomOutTarget = $(zoomOutRef)?.$el as HTMLElement\n        let width = 0\n        let height = 0\n\n        if (zoomInTarget !== void 0) {\n          const zoomInClientRect = zoomInTarget.getBoundingClientRect()\n          if (props.direction === 'horizontal') {\n            width += zoomInClientRect.width\n            height = zoomInClientRect.height > height ? zoomInClientRect.height : height\n          } else {\n            height += zoomInClientRect.height\n            width = zoomInClientRect.width > width ? zoomInClientRect.width : width\n          }\n        }\n\n        if (zoomResetTarget !== void 0) {\n          const zoomResetClientRect = zoomResetTarget.getBoundingClientRect()\n          if (props.direction === 'horizontal') {\n            width += zoomResetClientRect.width\n            height = zoomResetClientRect.height > height ? zoomResetClientRect.height : height\n          } else {\n            height += zoomResetClientRect.height\n            width = zoomResetClientRect.width > width ? zoomResetClientRect.width : width\n          }\n        }\n\n        if (zoomOutTarget !== void 0) {\n          const zoomOutClientRect = zoomOutTarget.getBoundingClientRect()\n          if (props.direction === 'horizontal') {\n            width += zoomOutClientRect.width\n            height = zoomOutClientRect.height > height ? zoomOutClientRect.height : height\n          } else {\n            height += zoomOutClientRect.height\n            width = zoomOutClientRect.width > width ? zoomOutClientRect.width : width\n          }\n        }\n\n        css.width = `${width + 4}px`\n        css.height = `${height + 4}px`\n\n        if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n          const side = positionState.attach.value\n          if ((side.bottom || side.top) && !side.left && !side.right) {\n            css.left = '50%'\n            css.transform = 'translate(-50%, 0)'\n          }\n\n          if ((side.left || side.right) && !side.top && !side.bottom) {\n            css.top = '50%'\n            css.transform = 'translate(0, -50%)'\n          }\n        }\n      }\n      Object.assign(rootStyle, css)\n    }\n\n    const getContent = (options: VcBtnTooltipProps, type) => {\n      let btnRef\n      let tooltipRef\n      let tip\n      let onClick\n      if (type === 'zoomIn') {\n        btnRef = zoomInRef\n        tooltipRef = zoomControlState.zoomInTooltipRef\n        tip = options.tooltip?.tip || t('vc.navigation.zoomCotrol.zoomInTip')\n        onClick = zoomControlState.zoomIn\n      } else if (type === 'zoomOut') {\n        btnRef = zoomOutRef\n        tooltipRef = zoomControlState.zoomOutTooltipRef\n        tip = options.tooltip?.tip || t('vc.navigation.zoomCotrol.zoomOutTip')\n        onClick = zoomControlState.zoomOut\n      } else if (type === 'zoomReset') {\n        btnRef = zoomResetRef\n        tooltipRef = zoomControlState.resetTooltipRef\n        tip = options.tooltip?.tip || t('vc.navigation.zoomCotrol.zoomResetTip')\n        onClick = zoomControlState.zoomReset\n      }\n      const inner: Array<VNode> = []\n\n      inner.push(\n        h(VcIcon, {\n          name: options.icon,\n          size: options.size\n        })\n      )\n      inner.push(h('div', null, options.label))\n      if (options.tooltip) {\n        inner.push(\n          h(\n            VcTooltip,\n            {\n              ref: tooltipRef,\n              ...(options.tooltip as any)\n            },\n            () => h('strong', null, tip)\n          )\n        )\n      } else {\n        inner.push(createCommentVNode('v-if'))\n      }\n\n      const content = h(\n        VcBtn,\n        {\n          class: `vc-${kebabCase(type)}`,\n          ref: btnRef,\n          size: options.size,\n          flat: options.flat,\n          stack: options.stack,\n          round: options.round,\n          dense: true,\n          style: { color: options.color, background: options.background },\n          onClick: onClick\n        },\n        () => hMergeSlot(ctx.slots.default, inner)\n      )\n\n      return content\n    }\n\n    Object.assign(instance.proxy, {\n      zoomIn: () => zoomControlState.zoomIn,\n      zoomOut: () => zoomControlState.zoomOut,\n      zoomReset: () => zoomControlState.zoomReset\n    })\n\n    return () => {\n      if (canRender.value) {\n        const children: Array<VNode> = []\n        children.push(h('li', null, getContent(zoomInOptions.value, 'zoomIn')))\n        if (props.enableResetButton) {\n          children.push(h('li', null, getContent(zoomResetOptions.value, 'zoomReset')))\n        } else {\n          children.push(createCommentVNode('v-if'))\n        }\n        children.push(h('li', null, getContent(zoomOutOptions.value, 'zoomOut')))\n\n        const renderContent = h(\n          'div',\n          {\n            ref: rootRef,\n            class: `vc-zoom-control ${positionState.classes.value} ${props.customClass}`,\n            style: rootStyle\n          },\n          h(\n            'ul',\n            {\n              class: 'vc-list'\n            },\n            children\n          )\n        )\n        return !hasVcNavigation && props.teleportToViewer ? h(Teleport, { to: $services.viewer._element }, renderContent) : renderContent\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport type VcZoomControlEmits = typeof emits\n\nexport type VcZoomControlProps = {\n  /**\n   * Specify the position of the VcZoomControl.\n   * Default value: top-right\n   */\n  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left'\n  /**\n   * An array of two numbers to offset the VcZoomControl horizontally and vertically in pixels.\n   * Default value: [0, 0]\n   */\n  offset?: [number, number]\n  /**\n   * Specify whether to enable the reset button.\n   * Default value: true\n   */\n  enableResetButton?: boolean\n  /**\n   * Specify the zoom amount of zoom in and zoom out.\n   * Default value: 2\n   */\n  zoomAmount?: number\n  /**\n   * Specify the time of the zoom-in and zoom-out process, in seconds.\n   * Default value: 0.5\n   */\n  duration?: number\n  /**\n   * Specify the time to reset to the default camera position, in seconds.\n   * Default value: 1.5\n   */\n  durationReset?: number\n  /**\n   * Specify the reset camera view.\n   * Default value:\n   * {\n   *    position: {\n   *      lng: 105,\n   *      lat: 30,\n   *      height: 19059568.5\n   *    }\n   * }\n   */\n  defaultResetView?: VcCamera\n  /**\n   * Specify whether to override the camera attribute on the vc-viewer during initialization.\n   * Default value: false\n   */\n  overrideViewerCamera?: boolean\n  /**\n   * Specifies the css background of the VcZoomControl.\n   * Default value: #3f4854\n   */\n  background?: string\n  /**\n   * Specifies the css border of the VcZoomControl.\n   * Default value: solid 1px rgba(255, 255, 255, 0.2)\n   */\n  border?: string\n  /**\n   * Specifies the css border radius of the VcZoomControl.\n   * Default value: 100px\n   */\n  borderRadius?: string\n  /**\n   * Specify the direction of the VcZoomControl.\n   * Default value: vertical\n   */\n  direction?: 'vertical' | 'horizontal'\n  /**\n   * Specify the zoom in parameters.\n   */\n  zoomInOptions?: VcBtnTooltipProps\n  /**\n   * Specify the zoom out parameters.\n   */\n  zoomOutOptions?: VcBtnTooltipProps\n  /**\n   * Specify the reset button parameters.\n   */\n  zoomResetOptions?: VcBtnTooltipProps\n  /**\n   * Specify the customClass of the vc-zoom-control.\n   */\n  customClass?: string\n  /**\n   * Specify whether to add to the cesium-viewer node.\n   * Default value: true\n   */\n  teleportToViewer?: boolean\n  /**\n   * Triggers before the VcZoomControl is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcZoomControl is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcZoomControl is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * \tTriggers when the VcZoomControl is operated.\n   */\n  onZoomEvt?: (evt: VcZoomEvt) => void\n}\n\nexport type VcZoomControlRef = VcComponentPublicInstance<VcZoomControlProps>\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;AAsBA,MAAM,KAAQ,GAAA;AAAA,EACZ,GAAG,WAAA;AAAA,EACH,OAAA,EAAS,CAAC,GAAmB,KAAA,IAAA;AAC/B,CAAA,CAAA;AACO,MAAM,gBAAmB,GAAA,aAAA;AAChC,kBAAe,eAAgB,CAAA;AAAA,EAC7B,IAAM,EAAA,eAAA;AAAA,EACN,KAAO,EAAA,gBAAA;AAAA,EACP,KAAA;AAAA,EACA,KAAA,CAAM,OAA2B,GAAK,EAAA;AA/BxC,IAAA,IAAA,EAAA,CAAA;AAiCI,IAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,IAAA,QAAA,CAAS,WAAc,GAAA,eAAA,CAAA;AACvB,IAAA,QAAA,CAAS,eAAe,EAAC,CAAA;AACzB,IAAA,MAAM,WAAc,GAAA,SAAA,CAAU,KAAO,EAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAClD,IAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,MAAA,OAAA;AAAA,KACF;AACA,IAAM,MAAA,EAAE,CAAE,EAAA,GAAI,SAAU,EAAA,CAAA;AACxB,IAAM,MAAA,EAAE,WAAc,GAAA,WAAA,CAAA;AACtB,IAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,KAAO,EAAA,GAAA,EAAK,UAAU,SAAS,CAAA,CAAA;AACvE,IAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AAClD,IAAM,MAAA,OAAA,GAAU,IAAiB,IAAI,CAAA,CAAA;AACrC,IAAM,MAAA,SAAA,GAAY,IAAc,IAAI,CAAA,CAAA;AACpC,IAAM,MAAA,YAAA,GAAe,IAAc,IAAI,CAAA,CAAA;AACvC,IAAM,MAAA,UAAA,GAAa,IAAc,IAAI,CAAA,CAAA;AACrC,IAAM,MAAA,cAAA,GAAiB,oBAAoB,QAAQ,CAAA,CAAA;AACnD,IAAA,MAAM,eAAkB,GAAA,CAAA,CAAA,EAAA,GAAA,cAAA,CAAe,KAAf,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,SAAS,IAAS,MAAA,cAAA,CAAA;AAChE,IAAM,MAAA,SAAA,GAAY,IAAI,eAAe,CAAA,CAAA;AACrC,IAAM,MAAA,SAAA,GAAY,QAAwB,CAAA,EAAE,CAAA,CAAA;AAG5C,IAAA,KAAA;AAAA,MACE,MAAM,KAAA;AAAA,MACN,CAAO,GAAA,KAAA;AACL,QAAA,QAAA,CAAS,MAAM;AACb,UAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACrB,YAAA,OAAA;AAAA,WACF;AACA,UAAgB,eAAA,EAAA,CAAA;AAAA,SACjB,CAAA,CAAA;AAAA,OACH;AAAA,MACA;AAAA,QACE,IAAM,EAAA,IAAA;AAAA,OACR;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiB,QAAS,CAAA,MAAM,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,cAAe,CAAA,cAAA,EAAgB,KAAM,CAAA,cAAc,CAAC,CAAA,CAAA;AAC5G,IAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,MAAM,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,cAAe,CAAA,aAAA,EAAe,KAAM,CAAA,aAAa,CAAC,CAAA,CAAA;AACzG,IAAM,MAAA,gBAAA,GAAmB,QAAS,CAAA,MAAM,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,cAAe,CAAA,gBAAA,EAAkB,KAAM,CAAA,gBAAgB,CAAC,CAAA,CAAA;AAElH,IAAA,QAAA,CAAS,qBAAqB,YAAY;AACxC,MAAM,MAAA,EAAE,QAAW,GAAA,SAAA,CAAA;AACnB,MAAA,IAAI,MAAM,oBAAsB,EAAA;AAC9B,QAAA,MAAM,YAAsB,KAAM,CAAA,gBAAA,CAAA;AAClC,QAAA,eAAA,CAAgB,QAAQ,SAAS,CAAA,CAAA;AAAA,OACnC;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACT,CAAA;AACA,IAAA,QAAA,CAAS,QAAQ,YAAY;AAlFjC,MAAAA,IAAAA,GAAAA,CAAAA;AAmFM,MAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAClB,MAAA,QAAA,CAAS,MAAM;AACb,QAAgB,eAAA,EAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AACD,MAAM,MAAA,EAAE,QAAW,GAAA,SAAA,CAAA;AACnB,MAAA,CAAAA,GAAA,GAAA,MAAA,CAAO,mBAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAA4B,UAAW,CAAA;AAAA,QACrC,MAAM,QAAS,CAAA,WAAA;AAAA,QACf,MAAQ,EAAA,SAAA;AAAA,QACR,MAAA,EAAQ,EAAE,OAAO,CAAA;AAAA,OACnB,CAAA,CAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AACA,IAAA,QAAA,CAAS,UAAU,YAAY;AA/FnC,MAAAA,IAAAA,GAAAA,CAAAA;AAgGM,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAClB,MAAM,MAAA,EAAE,QAAW,GAAA,SAAA,CAAA;AACnB,MAAA,CAAAA,GAAA,GAAA,MAAA,CAAO,mBAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAA4B,UAAW,CAAA;AAAA,QACrC,MAAM,QAAS,CAAA,WAAA;AAAA,QACf,MAAQ,EAAA,WAAA;AAAA,QACR,MAAA,EAAQ,EAAE,OAAO,CAAA;AAAA,OACnB,CAAA,CAAA;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AA3GlC,MAAA,IAAAA,GAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA4GM,MAAM,MAAA,GAAA,GAAqB,cAAc,KAAM,CAAA,KAAA,CAAA;AAC/C,MAAA,SAAA,CAAU,OAAO,GAAI,CAAA,IAAA,CAAA;AACrB,MAAA,SAAA,CAAU,MAAM,GAAI,CAAA,GAAA,CAAA;AACpB,MAAA,SAAA,CAAU,YAAY,GAAI,CAAA,SAAA,CAAA;AAE1B,MAAA,GAAA,CAAI,aAAgB,GAAA,KAAA,CAAM,SAAc,KAAA,UAAA,GAAa,QAAW,GAAA,KAAA,CAAA;AAChE,MAAA,GAAA,CAAI,aAAa,KAAM,CAAA,UAAA,CAAA;AACvB,MAAA,GAAA,CAAI,eAAe,KAAM,CAAA,YAAA,CAAA;AACzB,MAAA,GAAA,CAAI,SAAS,KAAM,CAAA,MAAA,CAAA;AAEnB,MAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,QAAA,MAAM,gBAAeA,GAAA,GAAA,CAAA,CAAE,SAAS,CAAA,KAAX,gBAAAA,GAAc,CAAA,GAAA,CAAA;AACnC,QAAA,MAAM,eAAkB,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,YAAY,CAAA,KAAd,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAA;AACzC,QAAA,MAAM,aAAgB,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,UAAU,CAAA,KAAZ,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAA;AACrC,QAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,QAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,QAAA,IAAI,iBAAiB,KAAQ,CAAA,EAAA;AAC3B,UAAM,MAAA,gBAAA,GAAmB,aAAa,qBAAsB,EAAA,CAAA;AAC5D,UAAI,IAAA,KAAA,CAAM,cAAc,YAAc,EAAA;AACpC,YAAA,KAAA,IAAS,gBAAiB,CAAA,KAAA,CAAA;AAC1B,YAAA,MAAA,GAAS,gBAAiB,CAAA,MAAA,GAAS,MAAS,GAAA,gBAAA,CAAiB,MAAS,GAAA,MAAA,CAAA;AAAA,WACjE,MAAA;AACL,YAAA,MAAA,IAAU,gBAAiB,CAAA,MAAA,CAAA;AAC3B,YAAA,KAAA,GAAQ,gBAAiB,CAAA,KAAA,GAAQ,KAAQ,GAAA,gBAAA,CAAiB,KAAQ,GAAA,KAAA,CAAA;AAAA,WACpE;AAAA,SACF;AAEA,QAAA,IAAI,oBAAoB,KAAQ,CAAA,EAAA;AAC9B,UAAM,MAAA,mBAAA,GAAsB,gBAAgB,qBAAsB,EAAA,CAAA;AAClE,UAAI,IAAA,KAAA,CAAM,cAAc,YAAc,EAAA;AACpC,YAAA,KAAA,IAAS,mBAAoB,CAAA,KAAA,CAAA;AAC7B,YAAA,MAAA,GAAS,mBAAoB,CAAA,MAAA,GAAS,MAAS,GAAA,mBAAA,CAAoB,MAAS,GAAA,MAAA,CAAA;AAAA,WACvE,MAAA;AACL,YAAA,MAAA,IAAU,mBAAoB,CAAA,MAAA,CAAA;AAC9B,YAAA,KAAA,GAAQ,mBAAoB,CAAA,KAAA,GAAQ,KAAQ,GAAA,mBAAA,CAAoB,KAAQ,GAAA,KAAA,CAAA;AAAA,WAC1E;AAAA,SACF;AAEA,QAAA,IAAI,kBAAkB,KAAQ,CAAA,EAAA;AAC5B,UAAM,MAAA,iBAAA,GAAoB,cAAc,qBAAsB,EAAA,CAAA;AAC9D,UAAI,IAAA,KAAA,CAAM,cAAc,YAAc,EAAA;AACpC,YAAA,KAAA,IAAS,iBAAkB,CAAA,KAAA,CAAA;AAC3B,YAAA,MAAA,GAAS,iBAAkB,CAAA,MAAA,GAAS,MAAS,GAAA,iBAAA,CAAkB,MAAS,GAAA,MAAA,CAAA;AAAA,WACnE,MAAA;AACL,YAAA,MAAA,IAAU,iBAAkB,CAAA,MAAA,CAAA;AAC5B,YAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,GAAQ,KAAQ,GAAA,iBAAA,CAAkB,KAAQ,GAAA,KAAA,CAAA;AAAA,WACtE;AAAA,SACF;AAEA,QAAI,GAAA,CAAA,KAAA,GAAQ,CAAG,EAAA,KAAA,GAAQ,CAAC,CAAA,EAAA,CAAA,CAAA;AACxB,QAAI,GAAA,CAAA,MAAA,GAAS,CAAG,EAAA,MAAA,GAAS,CAAC,CAAA,EAAA,CAAA,CAAA;AAE1B,QAAA,IAAI,OAAO,KAAA,CAAM,gBAAqB,KAAA,WAAA,IAAe,MAAM,gBAAkB,EAAA;AAC3E,UAAM,MAAA,IAAA,GAAO,cAAc,MAAO,CAAA,KAAA,CAAA;AAClC,UAAK,IAAA,CAAA,IAAA,CAAK,UAAU,IAAK,CAAA,GAAA,KAAQ,CAAC,IAAK,CAAA,IAAA,IAAQ,CAAC,IAAA,CAAK,KAAO,EAAA;AAC1D,YAAA,GAAA,CAAI,IAAO,GAAA,KAAA,CAAA;AACX,YAAA,GAAA,CAAI,SAAY,GAAA,oBAAA,CAAA;AAAA,WAClB;AAEA,UAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,KAAU,CAAC,IAAK,CAAA,GAAA,IAAO,CAAC,IAAA,CAAK,MAAQ,EAAA;AAC1D,YAAA,GAAA,CAAI,GAAM,GAAA,KAAA,CAAA;AACV,YAAA,GAAA,CAAI,SAAY,GAAA,oBAAA,CAAA;AAAA,WAClB;AAAA,SACF;AAAA,OACF;AACA,MAAO,MAAA,CAAA,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AAAA,KAC9B,CAAA;AAEA,IAAM,MAAA,UAAA,GAAa,CAAC,OAAA,EAA4B,IAAS,KAAA;AAjL7D,MAAA,IAAAA,GAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAkLM,MAAI,IAAA,MAAA,CAAA;AACJ,MAAI,IAAA,UAAA,CAAA;AACJ,MAAI,IAAA,GAAA,CAAA;AACJ,MAAI,IAAA,OAAA,CAAA;AACJ,MAAA,IAAI,SAAS,QAAU,EAAA;AACrB,QAAS,MAAA,GAAA,SAAA,CAAA;AACT,QAAA,UAAA,GAAa,gBAAiB,CAAA,gBAAA,CAAA;AAC9B,QAAA,GAAA,GAAA,CAAA,CAAMA,MAAA,OAAQ,CAAA,OAAA,KAAR,gBAAAA,GAAiB,CAAA,GAAA,KAAO,EAAE,oCAAoC,CAAA,CAAA;AACpE,QAAA,OAAA,GAAU,gBAAiB,CAAA,MAAA,CAAA;AAAA,OAC7B,MAAA,IAAW,SAAS,SAAW,EAAA;AAC7B,QAAS,MAAA,GAAA,UAAA,CAAA;AACT,QAAA,UAAA,GAAa,gBAAiB,CAAA,iBAAA,CAAA;AAC9B,QAAA,GAAA,GAAA,CAAA,CAAM,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAO,EAAE,qCAAqC,CAAA,CAAA;AACrE,QAAA,OAAA,GAAU,gBAAiB,CAAA,OAAA,CAAA;AAAA,OAC7B,MAAA,IAAW,SAAS,WAAa,EAAA;AAC/B,QAAS,MAAA,GAAA,YAAA,CAAA;AACT,QAAA,UAAA,GAAa,gBAAiB,CAAA,eAAA,CAAA;AAC9B,QAAA,GAAA,GAAA,CAAA,CAAM,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAO,EAAE,uCAAuC,CAAA,CAAA;AACvE,QAAA,OAAA,GAAU,gBAAiB,CAAA,SAAA,CAAA;AAAA,OAC7B;AACA,MAAA,MAAM,QAAsB,EAAC,CAAA;AAE7B,MAAM,KAAA,CAAA,IAAA;AAAA,QACJ,EAAE,MAAQ,EAAA;AAAA,UACR,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,MAAM,OAAQ,CAAA,IAAA;AAAA,SACf,CAAA;AAAA,OACH,CAAA;AACA,MAAA,KAAA,CAAM,KAAK,CAAE,CAAA,KAAA,EAAO,IAAM,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AACxC,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAM,KAAA,CAAA,IAAA;AAAA,UACJ,CAAA;AAAA,YACE,SAAA;AAAA,YACA;AAAA,cACE,GAAK,EAAA,UAAA;AAAA,cACL,GAAI,OAAQ,CAAA,OAAA;AAAA,aACd;AAAA,YACA,MAAM,CAAA,CAAE,QAAU,EAAA,IAAA,EAAM,GAAG,CAAA;AAAA,WAC7B;AAAA,SACF,CAAA;AAAA,OACK,MAAA;AACL,QAAM,KAAA,CAAA,IAAA,CAAK,kBAAmB,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,OACvC;AAEA,MAAA,MAAM,OAAU,GAAA,CAAA;AAAA,QACd,KAAA;AAAA,QACA;AAAA,UACE,KAAO,EAAA,CAAA,GAAA,EAAM,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,UAC5B,GAAK,EAAA,MAAA;AAAA,UACL,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,KAAO,EAAA,IAAA;AAAA,UACP,OAAO,EAAE,KAAA,EAAO,QAAQ,KAAO,EAAA,UAAA,EAAY,QAAQ,UAAW,EAAA;AAAA,UAC9D,OAAA;AAAA,SACF;AAAA,QACA,MAAM,UAAA,CAAW,GAAI,CAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,OAC3C,CAAA;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAO,MAAA,CAAA,MAAA,CAAO,SAAS,KAAO,EAAA;AAAA,MAC5B,MAAA,EAAQ,MAAM,gBAAiB,CAAA,MAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,gBAAiB,CAAA,OAAA;AAAA,MAChC,SAAA,EAAW,MAAM,gBAAiB,CAAA,SAAA;AAAA,KACnC,CAAA,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAU,KAAO,EAAA;AACnB,QAAA,MAAM,WAAyB,EAAC,CAAA;AAChC,QAAS,QAAA,CAAA,IAAA,CAAK,EAAE,IAAM,EAAA,IAAA,EAAM,WAAW,aAAc,CAAA,KAAA,EAAO,QAAQ,CAAC,CAAC,CAAA,CAAA;AACtE,QAAA,IAAI,MAAM,iBAAmB,EAAA;AAC3B,UAAS,QAAA,CAAA,IAAA,CAAK,EAAE,IAAM,EAAA,IAAA,EAAM,WAAW,gBAAiB,CAAA,KAAA,EAAO,WAAW,CAAC,CAAC,CAAA,CAAA;AAAA,SACvE,MAAA;AACL,UAAS,QAAA,CAAA,IAAA,CAAK,kBAAmB,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,SAC1C;AACA,QAAS,QAAA,CAAA,IAAA,CAAK,EAAE,IAAM,EAAA,IAAA,EAAM,WAAW,cAAe,CAAA,KAAA,EAAO,SAAS,CAAC,CAAC,CAAA,CAAA;AAExE,QAAA,MAAM,aAAgB,GAAA,CAAA;AAAA,UACpB,KAAA;AAAA,UACA;AAAA,YACE,GAAK,EAAA,OAAA;AAAA,YACL,OAAO,CAAmB,gBAAA,EAAA,aAAA,CAAc,QAAQ,KAAK,CAAA,CAAA,EAAI,MAAM,WAAW,CAAA,CAAA;AAAA,YAC1E,KAAO,EAAA,SAAA;AAAA,WACT;AAAA,UACA,CAAA;AAAA,YACE,IAAA;AAAA,YACA;AAAA,cACE,KAAO,EAAA,SAAA;AAAA,aACT;AAAA,YACA,QAAA;AAAA,WACF;AAAA,SACF,CAAA;AACA,QAAA,OAAO,CAAC,eAAA,IAAmB,KAAM,CAAA,gBAAA,GAAmB,CAAE,CAAA,QAAA,EAAU,EAAE,EAAA,EAAI,SAAU,CAAA,MAAA,CAAO,QAAS,EAAA,EAAG,aAAa,CAAI,GAAA,aAAA,CAAA;AAAA,OAC/G,MAAA;AACL,QAAA,OAAO,mBAAmB,MAAM,CAAA,CAAA;AAAA,OAClC;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}