vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 30.6 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-common/index.ts"],"sourcesContent":["import type { VcReadyObject, VcComponentInternalInstance, VcComponentPublicInstance, VcMittEvents, VcViewerProvider } from '@vue-cesium/utils/types'\nimport { inject, onBeforeUnmount, onUnmounted, WatchStopHandle } from 'vue'\nimport mitt, { Emitter } from 'mitt'\nimport { getObjClassName, isEmptyObj, isFunction } from '@vue-cesium/utils/util'\nimport { mergeDescriptors } from '@vue-cesium/utils/merge-descriptors'\nimport { getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport * as cesiumProps from '@vue-cesium/utils/cesium-props'\nimport { vcKey } from '@vue-cesium/utils/config'\nimport useLog from '../private/use-log'\nimport { useLocale } from '../use-locale'\nimport useEvents from '../use-events'\nimport { isEqual } from 'lodash-unified'\nimport useTimeout from '../private/use-timeout'\nimport { useGlobalConfig } from '../use-global-config'\n\nconst callbackCmpNames = ['Graphics', 'VcEntity', 'Datasource', 'VcOverlayDynamic']\n\nexport default function (props, { emit, attrs }, vcInstance: VcComponentInternalInstance) {\n const logger = useLog(vcInstance)\n const { registerTimeout, removeTimeout } = useTimeout()\n // state\n vcInstance.alreadyListening = []\n vcInstance.removeCallbacks = []\n let unwatchFns: Array<WatchStopHandle> = []\n vcInstance.mounted = false\n const vcMitt: Emitter<VcMittEvents> = mitt()\n vcInstance.vcMitt = vcMitt\n const $services = inject<VcViewerProvider>(vcKey)\n const { t } = useLocale()\n\n if ($services === void 0) {\n console.error(`${vcInstance.cesiumClass} ${t('vc.loadError')}`)\n return\n }\n\n const parentVcInstance = getVcParentInstance(vcInstance)\n const eventsState = useEvents(props, vcInstance, logger)\n vcInstance.children = []\n\n const entityGraphics = {\n billboard: true,\n box: true,\n corridor: true,\n cylinder: true,\n ellipse: true,\n ellipsoid: true,\n label: true,\n model: true,\n tileset: true,\n path: true,\n plane: true,\n point: true,\n polygon: true,\n polyline: true,\n polylineVolume: true,\n rectangle: true,\n wall: true\n }\n\n const globalConfig = useGlobalConfig()\n // methods\n const beforeLoad = async () => {\n emit('beforeLoad', vcInstance)\n\n if (parentVcInstance.nowaiting) {\n return true\n } else {\n await (parentVcInstance.proxy as VcComponentPublicInstance).creatingPromise\n }\n }\n\n const load = async () => {\n // Returns if it is already loaded. 如果已经加载则返回。\n if (vcInstance.mounted) {\n return false\n }\n\n logger.debug(`${vcInstance.cesiumClass}---loading`)\n\n await beforeLoad()\n\n const { Cesium, viewer } = $services\n vcInstance.viewer = viewer\n vcInstance.Cesium = Cesium\n\n // If you call the unload method to unload the component, the Cesium object of the parent component may be unloaded. You need to load the parent component first.\n // 如果调用过 unload 方法卸载组件,父组件的 Cesium 对象可能会被卸载 需要先加载父组件。\n if (!parentVcInstance.cesiumObject && !parentVcInstance.nowaiting) {\n return await (parentVcInstance.proxy as VcComponentPublicInstance)?.load()\n }\n\n setPropsWatcher(true)\n\n return createCesiumObject().then(async cesiumObject => {\n vcInstance.cesiumObject = cesiumObject\n // Load the created Cesium object. 加载创建的 Cesium 对象。\n return mount().then((): VcReadyObject => {\n vcInstance.mounted = true\n parentVcInstance.children.push(vcInstance)\n Object.assign(vcInstance.proxy, {\n cesiumObject: vcInstance.cesiumObject\n })\n // Trigger the component's 'ready' event. 触发该组件的 'ready' 事件。\n const readyObj: VcReadyObject = { Cesium, viewer, cesiumObject, vm: vcInstance }\n emit('ready', readyObj)\n vcMitt.emit('ready', readyObj)\n logger.debug(`${vcInstance.cesiumClass}---loaded`)\n return readyObj\n })\n })\n }\n\n const beforeUnload = async () => {\n await vcInstance.unloadingPromise\n }\n\n // eslint-disable-next-line arrow-parens\n const unload = async () => {\n await beforeUnload()\n\n // If the component has subcomponents, you need to remove the subcomponents first. 如果该组件带有子组件,需要先移除子组件。\n for (let i = 0; i < vcInstance.children.length; i++) {\n const vcChildCmp = vcInstance.children[i].proxy as VcComponentPublicInstance\n await vcChildCmp.unload()\n }\n\n vcInstance.children.length = 0\n // ensure custom events can be emitted after unmount.\n // https://github.com/vuejs/core/issues/5674\n vcInstance.isUnmounted = false\n return vcInstance.mounted\n ? unmount().then(async () => {\n setPropsWatcher(false)\n vcInstance.cesiumObject = undefined\n vcInstance.mounted = false\n vcInstance.removeCallbacks.forEach(removeCallback => {\n removeCallback()\n })\n\n emit('destroyed', vcInstance)\n vcMitt.emit('destroyed', vcInstance)\n\n logger.debug(`${vcInstance.cesiumClass}---unmounted`)\n\n // If the component cannot be rendered without the parent component, the parent component needs to be removed.\n // 如果该组件的渲染和父组件是绑定在一起的,需要移除父组件。\n return vcInstance.renderByParent && !vcInstance.unloadingPromise ? (parentVcInstance.proxy as VcComponentPublicInstance).unload() : true\n })\n : false\n }\n const beforeReload = async () => {\n await vcInstance.reloadingPromise\n }\n\n const reload = async () => {\n await beforeReload()\n\n return unload().then(() => {\n return load()\n })\n }\n\n const mount = async () => {\n eventsState.registerEvents(true)\n return vcInstance.mount?.() || true\n }\n\n const unmount = async () => {\n eventsState.registerEvents(false)\n return vcInstance.unmount?.() || true\n }\n\n const createCesiumObject = async () => {\n logger.debug('do createCesiumObject')\n if (isFunction(vcInstance.createCesiumObject)) {\n return vcInstance.createCesiumObject()\n } else {\n const options = transformProps(props)\n return new Cesium[vcInstance.cesiumClass](options)\n }\n }\n\n const deepWatchHandler = (vueProp, watcherOptions) => {\n let deep = watcherOptions?.deep\n const {\n SampledPositionProperty,\n Appearance,\n DebugAppearance,\n MaterialAppearance,\n PolylineColorAppearance,\n EllipsoidSurfaceAppearance,\n PerInstanceColorAppearance,\n PolylineMaterialAppearance\n } = Cesium\n\n if (vueProp === 'position') {\n // position 要排除 SampledPositionProperty 不然会卡死\n deep = !((vcInstance.proxy as any)[vueProp] instanceof SampledPositionProperty)\n } else if (vueProp === 'appearance' || vueProp === 'depthFailAppearance') {\n // appearance 要排除 Cesium 的类型 不然会卡死\n const value = (vcInstance.proxy as any)[vueProp]\n deep = !(\n value instanceof Appearance ||\n value instanceof DebugAppearance ||\n value instanceof MaterialAppearance ||\n value instanceof PolylineColorAppearance ||\n value instanceof EllipsoidSurfaceAppearance ||\n value instanceof PerInstanceColorAppearance ||\n value instanceof PolylineMaterialAppearance ||\n getObjClassName(value as any).indexOf('Appearance') !== -1\n )\n }\n\n return deep\n }\n\n const setPropsWatcher = register => {\n if (register) {\n if (!vcInstance.cesiumClass || !Cesium[vcInstance.cesiumClass]) {\n return\n }\n\n props &&\n Object.keys(props).forEach(vueProp => {\n let cesiumProp = vueProp\n if (vueProp === 'labelStyle' || vueProp === 'wmtsStyle') {\n cesiumProp = 'style'\n } else if (vueProp === 'bmKey') {\n cesiumProp = 'key'\n }\n // 如果在vue文件中已经监听了该 prop 这儿不再监听了\n // If you have listened to the props in the vue file, you will not add any more listeners here.\n if (vcInstance.proxy?.$options.watch?.[vueProp] || vcInstance.alreadyListening.indexOf(vueProp) !== -1) {\n return\n }\n\n const watcherOptions = vcInstance.proxy?.$options.props[vueProp]?.watcherOptions\n // returns an unwatch function that stops firing the callback\n const unwatch = vcInstance.proxy?.$watch(\n vueProp,\n async (val, oldVal) => {\n // Wait for child components to be created.\n // 等待子组件创建完成。否则在父组件的 `ready` 事件中就改变的属性将不起作用。\n await (vcInstance.proxy as VcComponentPublicInstance).creatingPromise\n const { cesiumObject } = vcInstance\n // Get the writability of the current cesiumobject or the props on its prototype chain to\n // detect whether the component property responds dynamically or reloads the component when the property changes.\n // 通过 cesiumObject 对象或它原型链上的 prop 的可写性,以检测属性改变时组件属性是动态响应还是重载组件。\n const pd = cesiumObject && Object.getOwnPropertyDescriptor(cesiumObject, cesiumProp)\n const pdProto = cesiumObject && Object.getOwnPropertyDescriptor(Object.getPrototypeOf(cesiumObject), cesiumProp)\n const hasSetter = (pd && (pd.writable || pd.set)) || (pdProto && (pdProto.writable || pdProto.set))\n if (hasSetter) {\n // Attributes are writable and directly respond to changes in attributes.\n // 属性可写,直接动态响应属性的改变。\n if (watcherOptions && watcherOptions.cesiumObjectBuilder) {\n const newVal = watcherOptions.cesiumObjectBuilder.call(vcInstance, val, vcInstance.viewer.scene.globe.ellipsoid)\n // If an exclude condition has been defined for the object, such as \"_callback\", Cesium will automatically handle it internally and no longer need to be assigned.\n // 如果对象已经定义了 exclude 条件,如已经定义了“_callback”,Cesium 内部会自动处理的 不用再赋值了。\n if (!(Cesium.defined(cesiumObject[cesiumProp]) && Cesium.defined(cesiumObject[cesiumProp]._callback))) {\n cesiumObject[cesiumProp] = newVal\n }\n } else {\n cesiumObject[cesiumProp] = transformProp(cesiumProp, val)\n }\n return true\n } else {\n // The attribute is not writable, and the property is changed indirectly through reloading the component.\n // 属性不可写,通过重加载组件间接实现改变属性\n if (!isEqual(val, oldVal) || Array.isArray(val)) {\n if (attrs['reload-mode'] === 'once' || attrs['reloadMode'] === 'once' || globalConfig.value.reloadMode === 'once') {\n // If multiple component properties are changed at once, reload only once after the last property has been changed.\n // 如果一瞬间多个组件属性被改变,只在最后一个属性改变完后 reload 一次。\n removeTimeout()\n registerTimeout(() => {\n ;(vcInstance.proxy as VcComponentPublicInstance).reload()\n }, 0)\n } else {\n // If multiple component properties are changed at once, reload them in sequence.\n // 如果一瞬间多个组件属性被改变,只在最后一个属性改变完后 reload 一次。\n vcInstance.reloadingPromise = new Promise((resolve, reject) => {\n ;(vcInstance.proxy as VcComponentPublicInstance)\n .reload()\n .then(() => {\n resolve(true)\n })\n .catch(e => {\n reject(e)\n })\n })\n }\n }\n }\n },\n {\n deep: deepWatchHandler(vueProp, watcherOptions)\n }\n )\n unwatchFns.push(unwatch!)\n })\n } else {\n unwatchFns.forEach(item => item())\n unwatchFns = []\n }\n }\n\n const transformProps = <T>(props: T, childProps?: any) => {\n const options: any = {}\n props &&\n Object.keys(props).forEach(vueProp => {\n let cesiumProp = vueProp\n // The properties of the following Cesium instance objects are HTML or Vue reserved words and require special handling.\n // 以下 Cesium 实例对象的属性是 HTML 或 Vue 保留字,需要特别处理一下。\n if (vueProp === 'labelStyle' || vueProp === 'wmtsStyle') {\n cesiumProp = 'style'\n } else if (vueProp === 'bmKey') {\n cesiumProp = 'key'\n }\n\n if (props[vueProp] === undefined || props[vueProp] === null) {\n return\n }\n\n const className = getObjClassName(props[vueProp])\n\n // 由于 Cesium 1.96+ 版本不太好获取 Cesium 的 className 了,太耗时影响性能,干脆注释\n // className.indexOf('Graphics') === -1 &&\n // 副作用是:通过实体渲染的 point billboard label 等传原生的 Graphics 对象可能会有问题\n // 可传扁平对象来避免此问题。\n if (\n className &&\n // className.indexOf('Graphics') === -1 &&\n entityGraphics[cesiumProp] &&\n (vcInstance.cesiumClass === 'Entity' || vcInstance.cesiumClass.indexOf('DataSource') > 0 || vcInstance.cesiumClass === 'VcOverlayDynamic')\n ) {\n options[cesiumProp] = transformProps(props[vueProp], childProps)\n } else {\n options[cesiumProp] = transformProp(vueProp, props[vueProp], childProps)\n }\n })\n\n return options as T\n }\n\n const transformProp = (prop, value, childProps?) => {\n const className = getObjClassName(value)\n if (\n className &&\n // className.indexOf('Graphics') === -1 &&\n entityGraphics[prop] &&\n (vcInstance.cesiumClass === 'Entity' || vcInstance.cesiumClass.indexOf('DataSource') > 0 || vcInstance.cesiumClass === 'VcOverlayDynamic')\n ) {\n return transformProps(value, childProps)\n } else {\n const cmpName = vcInstance.proxy?.$options.name\n let supportCallbackProperty = false\n if (isFunction(value) && cmpName) {\n callbackCmpNames.forEach(v => {\n if (cmpName.indexOf(v) !== -1) {\n supportCallbackProperty = true\n }\n })\n }\n const propOption = vcInstance.proxy?.$options.props[prop] || childProps?.[prop] || (cesiumProps[prop] && cesiumProps[prop][prop])\n return propOption?.watcherOptions && !isEmptyObj(value)\n ? propOption.watcherOptions.cesiumObjectBuilder.call(vcInstance, value, vcInstance.viewer.scene.globe.ellipsoid)\n : supportCallbackProperty\n ? new Cesium.CallbackProperty(value, false)\n : value\n }\n }\n\n const getServices = () => {\n return mergeDescriptors({}, $services || {})\n }\n\n // lifecycle\n const creatingPromise = new Promise<VcReadyObject | boolean>((resolve, reject) => {\n try {\n let isLoading = false\n if ($services.viewer) {\n isLoading = true\n load()\n .then(e => {\n resolve(e)\n isLoading = false\n })\n .catch(e => {\n emit('unready', e)\n reject(e)\n })\n }\n parentVcInstance.vcMitt.on('ready', () => {\n if (!isLoading && !vcInstance.isUnmounted) {\n load()\n .then(e => {\n resolve(e)\n })\n .catch(e => {\n emit('unready', e)\n reject(e)\n })\n }\n })\n } catch (e) {\n emit('unready', e)\n reject(e)\n }\n })\n logger.debug(`${vcInstance.cesiumClass}---onCreated`)\n onUnmounted(() => {\n logger.debug(`${vcInstance.cesiumClass}---onUnmounted`)\n vcInstance.unloadingPromise = new Promise((resolve, reject) => {\n unload().then(() => {\n logger.debug(`${vcInstance.cesiumClass}---unloaded`)\n resolve(true)\n vcInstance.isUnmounted = true\n vcInstance.unloadingPromise = undefined\n vcMitt.all.clear()\n })\n })\n vcInstance.alreadyListening = []\n })\n\n // expose public methods\n Object.assign(vcInstance.proxy, {\n creatingPromise,\n load,\n unload,\n reload,\n getCreatingPromise: () => creatingPromise,\n getCesiumObject: () => vcInstance.cesiumObject\n })\n\n return {\n $services,\n load,\n unload,\n reload,\n creatingPromise,\n transformProp,\n transformProps,\n unwatchFns,\n setPropsWatcher,\n logger,\n getServices\n }\n}\n"],"names":["Cesium","props"],"mappings":";;;;;;;;;;;;;;;;AAeA,MAAM,gBAAmB,GAAA,CAAC,UAAY,EAAA,UAAA,EAAY,cAAc,kBAAkB,CAAA,CAAA;AAElF,kBAAA,CAAyB,KAAO,EAAA,EAAE,IAAM,EAAA,KAAA,IAAS,UAAyC,EAAA;AACxF,EAAM,MAAA,MAAA,GAAS,OAAO,UAAU,CAAA,CAAA;AAChC,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAc,EAAA,GAAI,UAAW,EAAA,CAAA;AAEtD,EAAA,UAAA,CAAW,mBAAmB,EAAC,CAAA;AAC/B,EAAA,UAAA,CAAW,kBAAkB,EAAC,CAAA;AAC9B,EAAA,IAAI,aAAqC,EAAC,CAAA;AAC1C,EAAA,UAAA,CAAW,OAAU,GAAA,KAAA,CAAA;AACrB,EAAA,MAAM,SAAgC,IAAK,EAAA,CAAA;AAC3C,EAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,EAAM,MAAA,SAAA,GAAY,OAAyB,KAAK,CAAA,CAAA;AAChD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,SAAU,EAAA,CAAA;AAExB,EAAA,IAAI,cAAc,KAAQ,CAAA,EAAA;AACxB,IAAQ,OAAA,CAAA,KAAA,CAAM,GAAG,UAAW,CAAA,WAAW,IAAI,CAAE,CAAA,cAAc,CAAC,CAAE,CAAA,CAAA,CAAA;AAC9D,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,gBAAA,GAAmB,oBAAoB,UAAU,CAAA,CAAA;AACvD,EAAA,MAAM,WAAc,GAAA,SAAA,CAAU,KAAO,EAAA,UAAA,EAAY,MAAM,CAAA,CAAA;AACvD,EAAA,UAAA,CAAW,WAAW,EAAC,CAAA;AAEvB,EAAA,MAAM,cAAiB,GAAA;AAAA,IACrB,SAAW,EAAA,IAAA;AAAA,IACX,GAAK,EAAA,IAAA;AAAA,IACL,QAAU,EAAA,IAAA;AAAA,IACV,QAAU,EAAA,IAAA;AAAA,IACV,OAAS,EAAA,IAAA;AAAA,IACT,SAAW,EAAA,IAAA;AAAA,IACX,KAAO,EAAA,IAAA;AAAA,IACP,KAAO,EAAA,IAAA;AAAA,IACP,OAAS,EAAA,IAAA;AAAA,IACT,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,KAAO,EAAA,IAAA;AAAA,IACP,OAAS,EAAA,IAAA;AAAA,IACT,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA,IAAA;AAAA,IAChB,SAAW,EAAA,IAAA;AAAA,IACX,IAAM,EAAA,IAAA;AAAA,GACR,CAAA;AAEA,EAAA,MAAM,eAAe,eAAgB,EAAA,CAAA;AAErC,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAA,CAAK,cAAc,UAAU,CAAA,CAAA;AAE7B,IAAA,IAAI,iBAAiB,SAAW,EAAA;AAC9B,MAAO,OAAA,IAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,MAAO,iBAAiB,KAAoC,CAAA,eAAA,CAAA;AAAA,KAC9D;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAO,YAAY;AAvE3B,IAAA,IAAA,EAAA,CAAA;AAyEI,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAY,UAAA,CAAA,CAAA,CAAA;AAElD,IAAA,MAAM,UAAW,EAAA,CAAA;AAEjB,IAAA,MAAM,EAAE,MAAA,EAAAA,OAAQ,EAAA,MAAA,EAAW,GAAA,SAAA,CAAA;AAC3B,IAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,IAAA,UAAA,CAAW,MAASA,GAAAA,OAAAA,CAAAA;AAIpB,IAAA,IAAI,CAAC,gBAAA,CAAiB,YAAgB,IAAA,CAAC,iBAAiB,SAAW,EAAA;AACjE,MAAO,OAAA,OAAA,CAAO,EAAiB,GAAA,gBAAA,CAAA,KAAA,KAAjB,IAAsD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA,CAAA;AAAA,KACtE;AAEA,IAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AAEpB,IAAA,OAAO,kBAAmB,EAAA,CAAE,IAAK,CAAA,OAAM,YAAgB,KAAA;AACrD,MAAA,UAAA,CAAW,YAAe,GAAA,YAAA,CAAA;AAE1B,MAAO,OAAA,KAAA,EAAQ,CAAA,IAAA,CAAK,MAAqB;AACvC,QAAA,UAAA,CAAW,OAAU,GAAA,IAAA,CAAA;AACrB,QAAiB,gBAAA,CAAA,QAAA,CAAS,KAAK,UAAU,CAAA,CAAA;AACzC,QAAO,MAAA,CAAA,MAAA,CAAO,WAAW,KAAO,EAAA;AAAA,UAC9B,cAAc,UAAW,CAAA,YAAA;AAAA,SAC1B,CAAA,CAAA;AAED,QAAA,MAAM,WAA0B,EAAE,MAAA,EAAAA,SAAQ,MAAQ,EAAA,YAAA,EAAc,IAAI,UAAW,EAAA,CAAA;AAC/E,QAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACtB,QAAO,MAAA,CAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AAC7B,QAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAW,SAAA,CAAA,CAAA,CAAA;AACjD,QAAO,OAAA,QAAA,CAAA;AAAA,OACR,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,MAAM,UAAW,CAAA,gBAAA,CAAA;AAAA,GACnB,CAAA;AAGA,EAAA,MAAM,SAAS,YAAY;AACzB,IAAA,MAAM,YAAa,EAAA,CAAA;AAGnB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,UAAW,CAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACnD,MAAA,MAAM,UAAa,GAAA,UAAA,CAAW,QAAS,CAAA,CAAC,CAAE,CAAA,KAAA,CAAA;AAC1C,MAAA,MAAM,WAAW,MAAO,EAAA,CAAA;AAAA,KAC1B;AAEA,IAAA,UAAA,CAAW,SAAS,MAAS,GAAA,CAAA,CAAA;AAG7B,IAAA,UAAA,CAAW,WAAc,GAAA,KAAA,CAAA;AACzB,IAAA,OAAO,UAAW,CAAA,OAAA,GACd,OAAQ,EAAA,CAAE,KAAK,YAAY;AACzB,MAAA,eAAA,CAAgB,KAAK,CAAA,CAAA;AACrB,MAAA,UAAA,CAAW,YAAe,GAAA,KAAA,CAAA,CAAA;AAC1B,MAAA,UAAA,CAAW,OAAU,GAAA,KAAA,CAAA;AACrB,MAAW,UAAA,CAAA,eAAA,CAAgB,QAAQ,CAAkB,cAAA,KAAA;AACnD,QAAe,cAAA,EAAA,CAAA;AAAA,OAChB,CAAA,CAAA;AAED,MAAA,IAAA,CAAK,aAAa,UAAU,CAAA,CAAA;AAC5B,MAAO,MAAA,CAAA,IAAA,CAAK,aAAa,UAAU,CAAA,CAAA;AAEnC,MAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAc,YAAA,CAAA,CAAA,CAAA;AAIpD,MAAO,OAAA,UAAA,CAAW,kBAAkB,CAAC,UAAA,CAAW,mBAAoB,gBAAiB,CAAA,KAAA,CAAoC,QAAW,GAAA,IAAA,CAAA;AAAA,KACrI,CACD,GAAA,KAAA,CAAA;AAAA,GACN,CAAA;AACA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,MAAM,UAAW,CAAA,gBAAA,CAAA;AAAA,GACnB,CAAA;AAEA,EAAA,MAAM,SAAS,YAAY;AACzB,IAAA,MAAM,YAAa,EAAA,CAAA;AAEnB,IAAO,OAAA,MAAA,EAAS,CAAA,IAAA,CAAK,MAAM;AACzB,MAAA,OAAO,IAAK,EAAA,CAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,QAAQ,YAAY;AAlK5B,IAAA,IAAA,EAAA,CAAA;AAmKI,IAAA,WAAA,CAAY,eAAe,IAAI,CAAA,CAAA;AAC/B,IAAO,OAAA,CAAA,CAAA,EAAA,GAAA,UAAA,CAAW,UAAX,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,IAAA,CAAA;AAAA,GACjC,CAAA;AAEA,EAAA,MAAM,UAAU,YAAY;AAvK9B,IAAA,IAAA,EAAA,CAAA;AAwKI,IAAA,WAAA,CAAY,eAAe,KAAK,CAAA,CAAA;AAChC,IAAO,OAAA,CAAA,CAAA,EAAA,GAAA,UAAA,CAAW,YAAX,IAA0B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,IAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAA,MAAA,CAAO,MAAM,uBAAuB,CAAA,CAAA;AACpC,IAAI,IAAA,UAAA,CAAW,UAAW,CAAA,kBAAkB,CAAG,EAAA;AAC7C,MAAA,OAAO,WAAW,kBAAmB,EAAA,CAAA;AAAA,KAChC,MAAA;AACL,MAAM,MAAA,OAAA,GAAU,eAAe,KAAK,CAAA,CAAA;AACpC,MAAA,OAAO,IAAI,MAAA,CAAO,UAAW,CAAA,WAAW,EAAE,OAAO,CAAA,CAAA;AAAA,KACnD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,OAAA,EAAS,cAAmB,KAAA;AACpD,IAAA,IAAI,OAAO,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,IAAA,CAAA;AAC3B,IAAM,MAAA;AAAA,MACJ,uBAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,0BAAA;AAAA,MACA,0BAAA;AAAA,MACA,0BAAA;AAAA,KACE,GAAA,MAAA,CAAA;AAEJ,IAAA,IAAI,YAAY,UAAY,EAAA;AAE1B,MAAA,IAAA,GAAO,EAAG,UAAA,CAAW,KAAc,CAAA,OAAO,CAAa,YAAA,uBAAA,CAAA,CAAA;AAAA,KAC9C,MAAA,IAAA,OAAA,KAAY,YAAgB,IAAA,OAAA,KAAY,qBAAuB,EAAA;AAExE,MAAM,MAAA,KAAA,GAAS,UAAW,CAAA,KAAA,CAAc,OAAO,CAAA,CAAA;AAC/C,MAAO,IAAA,GAAA,EACL,iBAAiB,UACjB,IAAA,KAAA,YAAiB,mBACjB,KAAiB,YAAA,kBAAA,IACjB,iBAAiB,uBACjB,IAAA,KAAA,YAAiB,8BACjB,KAAiB,YAAA,0BAAA,IACjB,iBAAiB,0BACjB,IAAA,eAAA,CAAgB,KAAY,CAAE,CAAA,OAAA,CAAQ,YAAY,CAAM,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAE5D;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,kBAAkB,CAAY,QAAA,KAAA;AAClC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAI,CAAC,UAAW,CAAA,WAAA,IAAe,CAAC,MAAO,CAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC9D,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,KAAA,IACE,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,QAAQ,CAAW,OAAA,KAAA;AA/N9C,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAgOU,QAAA,IAAI,UAAa,GAAA,OAAA,CAAA;AACjB,QAAI,IAAA,OAAA,KAAY,YAAgB,IAAA,OAAA,KAAY,WAAa,EAAA;AACvD,UAAa,UAAA,GAAA,OAAA,CAAA;AAAA,SACf,MAAA,IAAW,YAAY,OAAS,EAAA;AAC9B,UAAa,UAAA,GAAA,KAAA,CAAA;AAAA,SACf;AAGA,QAAA,IAAA,CAAA,CAAI,EAAW,GAAA,CAAA,EAAA,GAAA,UAAA,CAAA,KAAA,KAAX,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,KAA3B,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmC,OAAY,CAAA,KAAA,UAAA,CAAW,gBAAiB,CAAA,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAI,CAAA,EAAA;AACtG,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,kBAAiB,EAAW,GAAA,CAAA,EAAA,GAAA,UAAA,CAAA,KAAA,KAAX,mBAAkB,QAAS,CAAA,KAAA,CAAM,aAAjC,IAA2C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA,CAAA;AAElE,QAAM,MAAA,OAAA,GAAA,CAAU,EAAW,GAAA,UAAA,CAAA,KAAA,KAAX,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA;AAAA,UAChC,OAAA;AAAA,UACA,OAAO,KAAK,MAAW,KAAA;AAGrB,YAAA,MAAO,WAAW,KAAoC,CAAA,eAAA,CAAA;AACtD,YAAM,MAAA,EAAE,cAAiB,GAAA,UAAA,CAAA;AAIzB,YAAA,MAAM,EAAK,GAAA,YAAA,IAAgB,MAAO,CAAA,wBAAA,CAAyB,cAAc,UAAU,CAAA,CAAA;AACnF,YAAM,MAAA,OAAA,GAAU,gBAAgB,MAAO,CAAA,wBAAA,CAAyB,OAAO,cAAe,CAAA,YAAY,GAAG,UAAU,CAAA,CAAA;AAC/G,YAAM,MAAA,SAAA,GAAa,OAAO,EAAG,CAAA,QAAA,IAAY,GAAG,GAAU,CAAA,IAAA,OAAA,KAAY,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,GAAA,CAAA,CAAA;AAC9F,YAAA,IAAI,SAAW,EAAA;AAGb,cAAI,IAAA,cAAA,IAAkB,eAAe,mBAAqB,EAAA;AACxD,gBAAM,MAAA,MAAA,GAAS,cAAe,CAAA,mBAAA,CAAoB,IAAK,CAAA,UAAA,EAAY,KAAK,UAAW,CAAA,MAAA,CAAO,KAAM,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AAG/G,gBAAA,IAAI,EAAE,MAAA,CAAO,OAAQ,CAAA,YAAA,CAAa,UAAU,CAAC,CAAK,IAAA,MAAA,CAAO,OAAQ,CAAA,YAAA,CAAa,UAAU,CAAA,CAAE,SAAS,CAAI,CAAA,EAAA;AACrG,kBAAA,YAAA,CAAa,UAAU,CAAI,GAAA,MAAA,CAAA;AAAA,iBAC7B;AAAA,eACK,MAAA;AACL,gBAAA,YAAA,CAAa,UAAU,CAAA,GAAI,aAAc,CAAA,UAAA,EAAY,GAAG,CAAA,CAAA;AAAA,eAC1D;AACA,cAAO,OAAA,IAAA,CAAA;AAAA,aACF,MAAA;AAGL,cAAI,IAAA,CAAC,QAAQ,GAAK,EAAA,MAAM,KAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AAC/C,gBAAI,IAAA,KAAA,CAAM,aAAa,CAAA,KAAM,MAAU,IAAA,KAAA,CAAM,YAAY,CAAA,KAAM,MAAU,IAAA,YAAA,CAAa,KAAM,CAAA,UAAA,KAAe,MAAQ,EAAA;AAGjH,kBAAc,aAAA,EAAA,CAAA;AACd,kBAAA,eAAA,CAAgB,MAAM;AACpB,oBAAA,CAAA;AAAC,oBAAC,UAAA,CAAW,MAAoC,MAAO,EAAA,CAAA;AAAA,qBACvD,CAAC,CAAA,CAAA;AAAA,iBACC,MAAA;AAGL,kBAAA,UAAA,CAAW,gBAAmB,GAAA,IAAI,OAAQ,CAAA,CAAC,SAAS,MAAW,KAAA;AAC7D,oBAAA,CAAA;AAAC,oBAAC,UAAW,CAAA,KAAA,CACV,MAAO,EAAA,CACP,KAAK,MAAM;AACV,sBAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,qBACb,CACA,CAAA,KAAA,CAAM,CAAK,CAAA,KAAA;AACV,sBAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,qBACT,CAAA,CAAA;AAAA,mBACJ,CAAA,CAAA;AAAA,iBACH;AAAA,eACF;AAAA,aACF;AAAA,WACF;AAAA,UACA;AAAA,YACE,IAAA,EAAM,gBAAiB,CAAA,OAAA,EAAS,cAAc,CAAA;AAAA,WAChD;AAAA,SAAA,CAAA;AAEF,QAAA,UAAA,CAAW,KAAK,OAAQ,CAAA,CAAA;AAAA,OACzB,CAAA,CAAA;AAAA,KACE,MAAA;AACL,MAAW,UAAA,CAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA,IAAA,EAAM,CAAA,CAAA;AACjC,MAAA,UAAA,GAAa,EAAC,CAAA;AAAA,KAChB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAIC,MAAAA,EAAU,UAAqB,KAAA;AACxD,IAAA,MAAM,UAAe,EAAC,CAAA;AACtB,IAAAA,UACE,MAAO,CAAA,IAAA,CAAKA,MAAK,CAAA,CAAE,QAAQ,CAAW,OAAA,KAAA;AACpC,MAAA,IAAI,UAAa,GAAA,OAAA,CAAA;AAGjB,MAAI,IAAA,OAAA,KAAY,YAAgB,IAAA,OAAA,KAAY,WAAa,EAAA;AACvD,QAAa,UAAA,GAAA,OAAA,CAAA;AAAA,OACf,MAAA,IAAW,YAAY,OAAS,EAAA;AAC9B,QAAa,UAAA,GAAA,KAAA,CAAA;AAAA,OACf;AAEA,MAAA,IAAIA,OAAM,OAAO,CAAA,KAAM,UAAaA,MAAM,CAAA,OAAO,MAAM,IAAM,EAAA;AAC3D,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,SAAY,GAAA,eAAA,CAAgBA,MAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAMhD,MACE,IAAA,SAAA;AAAA,MAEA,cAAe,CAAA,UAAU,CACxB,KAAA,UAAA,CAAW,gBAAgB,QAAY,IAAA,UAAA,CAAW,WAAY,CAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,CAAK,IAAA,UAAA,CAAW,gBAAgB,kBACvH,CAAA,EAAA;AACA,QAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,cAAA,CAAeA,MAAM,CAAA,OAAO,GAAG,UAAU,CAAA,CAAA;AAAA,OAC1D,MAAA;AACL,QAAA,OAAA,CAAQ,UAAU,CAAI,GAAA,aAAA,CAAc,SAASA,MAAM,CAAA,OAAO,GAAG,UAAU,CAAA,CAAA;AAAA,OACzE;AAAA,KACD,CAAA,CAAA;AAEH,IAAO,OAAA,OAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,CAAC,IAAM,EAAA,KAAA,EAAO,UAAgB,KAAA;AAvVtD,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwVI,IAAM,MAAA,SAAA,GAAY,gBAAgB,KAAK,CAAA,CAAA;AACvC,IACE,IAAA,SAAA;AAAA,IAEA,cAAe,CAAA,IAAI,CAClB,KAAA,UAAA,CAAW,gBAAgB,QAAY,IAAA,UAAA,CAAW,WAAY,CAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,CAAK,IAAA,UAAA,CAAW,gBAAgB,kBACvH,CAAA,EAAA;AACA,MAAO,OAAA,cAAA,CAAe,OAAO,UAAU,CAAA,CAAA;AAAA,KAClC,MAAA;AACL,MAAA,MAAM,OAAU,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,KAAX,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,QAAS,CAAA,IAAA,CAAA;AAC3C,MAAA,IAAI,uBAA0B,GAAA,KAAA,CAAA;AAC9B,MAAI,IAAA,UAAA,CAAW,KAAK,CAAA,IAAK,OAAS,EAAA;AAChC,QAAA,gBAAA,CAAiB,QAAQ,CAAK,CAAA,KAAA;AAC5B,UAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAI,CAAA,EAAA;AAC7B,YAA0B,uBAAA,GAAA,IAAA,CAAA;AAAA,WAC5B;AAAA,SACD,CAAA,CAAA;AAAA,OACH;AACA,MAAA,MAAM,UAAa,GAAA,CAAA,CAAA,EAAA,GAAA,UAAA,CAAW,KAAX,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,SAAS,KAAM,CAAA,IAAA,CAAA,MAAS,UAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,IAAA,CAAA,CAAA,IAAU,YAAY,IAAI,CAAA,IAAK,WAAY,CAAA,IAAI,EAAE,IAAI,CAAA,CAAA;AAC/H,MAAO,OAAA,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,cAAkB,KAAA,CAAC,UAAW,CAAA,KAAK,IAClD,UAAW,CAAA,cAAA,CAAe,mBAAoB,CAAA,IAAA,CAAK,UAAY,EAAA,KAAA,EAAO,WAAW,MAAO,CAAA,KAAA,CAAM,KAAM,CAAA,SAAS,CAC7G,GAAA,uBAAA,GACA,IAAI,MAAO,CAAA,gBAAA,CAAiB,KAAO,EAAA,KAAK,CACxC,GAAA,KAAA,CAAA;AAAA,KACN;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,gBAAiB,CAAA,EAAI,EAAA,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,GAC7C,CAAA;AAGA,EAAA,MAAM,eAAkB,GAAA,IAAI,OAAiC,CAAA,CAAC,SAAS,MAAW,KAAA;AAChF,IAAI,IAAA;AACF,MAAA,IAAI,SAAY,GAAA,KAAA,CAAA;AAChB,MAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,QAAY,SAAA,GAAA,IAAA,CAAA;AACZ,QAAK,IAAA,EAAA,CACF,KAAK,CAAK,CAAA,KAAA;AACT,UAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AACT,UAAY,SAAA,GAAA,KAAA,CAAA;AAAA,SACb,CACA,CAAA,KAAA,CAAM,CAAK,CAAA,KAAA;AACV,UAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA;AACjB,UAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,SACT,CAAA,CAAA;AAAA,OACL;AACA,MAAiB,gBAAA,CAAA,MAAA,CAAO,EAAG,CAAA,OAAA,EAAS,MAAM;AACxC,QAAA,IAAI,CAAC,SAAA,IAAa,CAAC,UAAA,CAAW,WAAa,EAAA;AACzC,UAAK,IAAA,EAAA,CACF,KAAK,CAAK,CAAA,KAAA;AACT,YAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,WACV,CACA,CAAA,KAAA,CAAM,CAAK,CAAA,KAAA;AACV,YAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA;AACjB,YAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,WACT,CAAA,CAAA;AAAA,SACL;AAAA,OACD,CAAA,CAAA;AAAA,aACM,CAAG,EAAA;AACV,MAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA;AACjB,MAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,KACV;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAc,YAAA,CAAA,CAAA,CAAA;AACpD,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAgB,cAAA,CAAA,CAAA,CAAA;AACtD,IAAA,UAAA,CAAW,gBAAmB,GAAA,IAAI,OAAQ,CAAA,CAAC,SAAS,MAAW,KAAA;AAC7D,MAAO,MAAA,EAAA,CAAE,KAAK,MAAM;AAClB,QAAA,MAAA,CAAO,KAAM,CAAA,CAAA,EAAG,UAAW,CAAA,WAAW,CAAa,WAAA,CAAA,CAAA,CAAA;AACnD,QAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AACZ,QAAA,UAAA,CAAW,WAAc,GAAA,IAAA,CAAA;AACzB,QAAA,UAAA,CAAW,gBAAmB,GAAA,KAAA,CAAA,CAAA;AAC9B,QAAA,MAAA,CAAO,IAAI,KAAM,EAAA,CAAA;AAAA,OAClB,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AACD,IAAA,UAAA,CAAW,mBAAmB,EAAC,CAAA;AAAA,GAChC,CAAA,CAAA;AAGD,EAAO,MAAA,CAAA,MAAA,CAAO,WAAW,KAAO,EAAA;AAAA,IAC9B,eAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,oBAAoB,MAAM,eAAA;AAAA,IAC1B,eAAA,EAAiB,MAAM,UAAW,CAAA,YAAA;AAAA,GACnC,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AACF;;;;"}