@galacean/effects-plugin-editor-gizmo 2.7.0-beta.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/define.ts","../src/wireframe.ts","../src/geometry/index.ts","../src/gizmo-vfx-item.ts","../src/gizmo-component.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/constants.ts","../src/util.ts","../src/geometry/geometry.ts","../src/geometry/sphere.ts","../src/geometry/box.ts","../src/geometry/cylinder.ts","../src/geometry/cone.ts","../src/geometry/torus.ts","../src/geometry/plane.ts","../src/geometry/frustum.ts","../src/geometry/direction-light.ts","../src/geometry/point-light.ts","../src/geometry/spot-light.ts","../src/geometry/floor-line-edge.ts","../src/math-utils.ts","../src/mesh.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/raycast.ts","../src/shape.ts","../src/gizmo-loader.ts","../src/index.ts"],"sourcesContent":["import type { GeometryDrawMode, spec } from '@galacean/effects';\n\nexport interface GizmoVFXItemOptions {\n target: string,\n subType: GizmoSubType,\n renderMode?: GeometryDrawMode,\n type: 'editor-gizmo',\n color: spec.vec3,\n size?: number,\n depthTest?: boolean,\n}\n\nexport const GizmoVFXItemType = 'gizmo' as spec.ItemType;\n\n/**\n * Gizmo 类型\n */\nexport enum GizmoSubType {\n particleEmitter = 1,\n modelWireframe = 2,\n box,\n sphere,\n cylinder,\n cone,\n torus,\n sprite,\n plane,\n rotation,\n translation,\n scale,\n viewHelper,\n camera,\n frustum,\n light,\n directionLight,\n pointLight,\n spotLight,\n boundingBox,\n floorGrid,\n}\n","import type { ShaderMacros, Geometry, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, GLGeometry, DestroyOptions, Material, Mesh, math } from '@galacean/effects';\n\nconst { Vector4 } = math;\n\nexport function createParticleWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint16Array(0),\n },\n name: 'testtest',\n });\n\n const { vertex, fragment, macros, name } = mesh.material.props.shader;\n const materialOptions = { ...mesh.material.props };\n const newMacros = [...(macros || [] as ShaderMacros), ['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: name + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = mesh.material.depthTest;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.quad);\n}\n\nexport enum WireframeGeometryType {\n triangle,\n quad,\n}\n\nexport function destroyWireframeMesh (mesh: Mesh) {\n mesh.geometry?.dispose();\n mesh.dispose({ geometries: DestroyOptions.keep });\n}\n\nexport function updateWireframeMesh (originGeometry: Geometry, originMaterial: Material, wireframe: Mesh, type: WireframeGeometryType) {\n wireframe.material.cloneUniforms(originMaterial);\n\n const geometry = originGeometry;\n const wireframeGeometry = wireframe.firstGeometry();\n\n for (const macro of Object.keys(originMaterial.enabledMacros)) {\n wireframe.material.enableMacro(macro, originMaterial.enabledMacros[macro]);\n }\n\n if (type === WireframeGeometryType.triangle) {\n // 线框模式不绘制模型的时候,drawCount 为负数\n const drawCount = Math.abs(geometry.getDrawCount());\n\n if (drawCount !== 0) {\n if (drawCount !== wireframeGeometry.getDrawCount() / 2) {\n const indexData = geometry.getIndexData() as Uint16Array | undefined;\n const data = indexData ? getTriangleIndexData(indexData) : getTriangleIndexDataByCount(drawCount);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n } else if (type === WireframeGeometryType.quad) {\n if (geometry.getDrawCount() / 6 !== wireframeGeometry.getDrawCount() / 8) {\n const data = getQuadIndexData(geometry.getDrawCount() / 6, geometry.getIndexData() as Uint16Array);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n\n return wireframe;\n}\n\nfunction getQuadIndexData (faceCount: number, oid: Uint16Array): Uint16Array {\n const indexData = new Uint16Array(faceCount * 8);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 8;\n const base = i * 4;\n\n indexData[idx] = base;\n indexData[idx + 1] = 1 + base;\n indexData[idx + 2] = 1 + base;\n indexData[idx + 3] = 3 + base;\n indexData[idx + 4] = 3 + base;\n indexData[idx + 5] = 2 + base;\n indexData[idx + 6] = 2 + base;\n indexData[idx + 7] = base;\n }\n\n return indexData;\n}\n\nexport function createModeWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint32Array(0),\n },\n });\n const { vertex, fragment } = mesh.material.shader.shaderData;\n const materialOptions = { ...mesh.material.props };\n\n const newMacros = [['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: (mesh.name ?? 'unamedmesh') + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = true;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.triangle);\n}\n\nfunction getTriangleIndexDataByCount (drawCount: number): Uint32Array {\n const faceCount = drawCount / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const p0 = i * 3;\n const p1 = p0 + 1;\n const p2 = p0 + 2;\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nfunction getTriangleIndexData (oid: Uint16Array): Uint32Array {\n const faceCount = oid.length / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const base = i * 3;\n const p0 = oid[base];\n const p1 = oid[base + 1];\n const p2 = oid[base + 2];\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nexport interface SharedGeometryOptions {\n name?: string,\n drawStart?: number,\n drawCount?: number,\n mode?: GeometryDrawMode,\n index?: { data: Uint8Array | Uint16Array | Uint32Array, releasable?: boolean },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends GLGeometry {\n private readonly source: GLGeometry;\n\n constructor (engine: Engine, options: SharedGeometryOptions) {\n super(engine, { attributes: {}, ...options });\n let indexData = options.index ? options.index.data : options.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this.indices = indexData;\n this.source = options.geometry as GLGeometry;\n this.drawCount = options.drawCount || 0;\n this.drawStart = options.drawStart || 0;\n this.mode = options.mode || 0;\n for (const name in this.source.attributes) {\n this.attributes[name] = { ...this.source.attributes[name] };\n }\n }\n\n override initialize () {\n if (!this.isInitialized) {\n const geometry = this.source;\n\n geometry.initialize();\n //this.indicesBuffer = this._source.indicesBuffer;\n this.buffers = this.source.buffers;\n this.bufferProps = this.source.bufferProps;\n //this.dirtyFlags = this._source.dirtyFlags;\n //this.vaos = this._source.vaos;\n //创建ibo\n if (this.indices) {\n this.indicesBuffer = this.createIndicesBuffer(this.indices);\n }\n this.flush();\n this.initialized = true;\n }\n }\n\n override getAttributeNames (): string[] {\n return this.source.getAttributeNames();\n }\n\n override flush () {\n this.source.flush();\n\n super.flush();\n }\n\n override dispose () {\n // from source geometry\n this.buffers = {};\n this.bufferProps = {};\n super.dispose();\n // @ts-expect-error\n this.source = null;\n }\n}\n","import type { Engine, GeometryDrawMode, spec } from '@galacean/effects';\nimport { Geometry } from '@galacean/effects';\nimport { SphereGeometryData } from './sphere';\nimport { BoxGeometryData } from './box';\nimport type { GeometryData } from './geometry';\nimport { CylinderGeometryData } from './cylinder';\nimport { ConeGeometryData } from './cone';\nimport { TorusGeometryData } from './torus';\nimport { PlaneGeometryData } from './plane';\nimport { FrustumGeometryData } from './frustum';\nimport { DirectionLightData } from './direction-light';\nimport { PointLightData } from './point-light';\nimport { SpotLightData } from './spot-light';\nimport { FloorLineEdgeGeometryData } from './floor-line-edge';\n\n/**\n * 几何体类型\n */\nexport enum GeometryType {\n Box,\n Sphere,\n Cylinder,\n Cone,\n Torus,\n Frustum,\n Sprite,\n Plane,\n DirectionLight,\n SpotLight,\n PointLight,\n FloorGrid,\n}\n\n/**\n * 几何体参数\n */\nexport interface MeshOption {\n size: any,\n color?: spec.vec3,\n renderMode: GeometryDrawMode,\n depthTest?: boolean,\n name?: string,\n alpha?: number,\n}\n\n/**\n * 合并多个几何体数据\n * @param geometries - 几何体数据数组\n * @returns 合并后的几何体数据\n */\n// export function combineGeometries (geometries: GeometryData[]): GeometryData {\n// const points: number[] = [];\n// const indices: number[] = [];\n// const uvs: number[] = [];\n// const normals: number[] = [];\n\n// for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n// const geometryData = geometries[i];\n// if (geometryData) {\n// points.push(...geometryData.points);\n// uvs.push(...geometryData.uvs);\n// normals.push(...geometryData.normals);\n// geometryData.indices.forEach(index => indices.push(index + indicesBase));\n// indicesBase += geometryData.points.length;\n// }\n// }\n\n// return {\n// points,\n// indices,\n// uvs,\n// normals,\n// };\n// }\n\n/**\n * 创建几何体对象\n * @param type - 几何体类型\n * @param size - 几何体尺寸\n * @param renderMode - 绘制模式:`gl.TRIANGLES`、`gl.LINES`\n * @returns\n */\nexport function createGeometry (engine: Engine, type: GeometryType, size: Record<string, any>, renderMode?: GeometryDrawMode): Geometry {\n let geometryData: GeometryData;\n\n switch (type) {\n case GeometryType.Sphere:\n geometryData = new SphereGeometryData(size.radius, size.widthSegments, size.heightSegments);\n\n break;\n case GeometryType.Cylinder:\n geometryData = new CylinderGeometryData(size.radius, size.radius, size.height);\n\n break;\n case GeometryType.Cone:\n geometryData = new ConeGeometryData(size.radius, size.height);\n\n break;\n case GeometryType.Torus:\n geometryData = new TorusGeometryData(size.radius, size.tube, size.radialSegments, size.tubularSegments, size.arc);\n\n break;\n case GeometryType.Sprite:\n case GeometryType.Plane:\n geometryData = new PlaneGeometryData(size.width, size.height);\n\n break;\n case GeometryType.Frustum:\n geometryData = new FrustumGeometryData(size.position, size.rotation, size.fov, size.aspect, size.near, size.far);\n\n break;\n case GeometryType.DirectionLight:\n geometryData = new DirectionLightData(size.radius, size.length, size.segments4, size.linesNumber, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.PointLight:\n geometryData = new PointLightData(size.range, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.SpotLight:\n geometryData = new SpotLightData(size.range, size.spotAngle, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.FloorGrid:\n geometryData = new FloorLineEdgeGeometryData(size.sideLength, size.parts);\n\n break;\n default:\n geometryData = new BoxGeometryData(size.width, size.height, size.depth);\n\n break;\n }\n const result = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: new Float32Array(geometryData.points),\n },\n a_Normal: {\n size: 3,\n data: new Float32Array(geometryData.normals),\n },\n a_UV1: {\n size: 2,\n data: new Float32Array(geometryData.uvs),\n },\n },\n indices: {\n data: new Uint16Array(geometryData.indices),\n },\n mode: renderMode,\n drawCount: geometryData.indices.length,\n });\n\n return result;\n}\n","import { math } from '@galacean/effects';\n\nexport type Ray = math.Ray;\nexport type TriangleLike = math.TriangleLike;\ntype Vector3 = math.Vector3;\n\nconst { Vector3, Ray } = math;\n\n/**\n * 包围盒类型\n */\nexport enum BoundingType {\n box,\n sphere,\n triangle,\n line\n}\n\n/**\n * 线条包围盒类型\n */\nexport interface GizmoItemBoundingLine {\n type: BoundingType.line,\n // 线条包围盒两端点\n points: [Vector3, Vector3],\n // 射线与线条距离阈值\n width: number,\n}\n\n/**\n * 立方体包围盒类型\n */\nexport interface GizmoItemBoundingBox {\n type: BoundingType.box,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围盒的xyz长度,当type为box时生效\n size: Vector3,\n}\n\n/**\n * 球体包围盒类型\n */\nexport interface GizmoItemBoundingSphere {\n type: BoundingType.sphere,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围球的半径,当type为sphere时生效\n radius: number,\n}\n\n/**\n * 三角数组包围盒类型\n */\nexport interface GizmoItemBoundingTriangle {\n type: BoundingType.triangle,\n triangles: TriangleLike[],\n backfaceCulling?: boolean,\n}\n\nexport type GizmoItemBounding =\n | GizmoItemBoundingBox\n | GizmoItemBoundingSphere\n | GizmoItemBoundingTriangle\n | GizmoItemBoundingLine\n ;\n","import type { GeometryDrawMode, HitTestCustomParams, Renderer, Texture, VFXItem } from '@galacean/effects';\nimport { Mesh } from '@galacean/effects';\nimport { HitTestType, ParticleSystemRenderer, RendererComponent, Transform, assertExist, effectsClass, glContext, math, serialize, spec } from '@galacean/effects';\nimport type { GizmoVFXItemOptions } from './define';\nimport { GizmoSubType } from './define';\nimport { iconTextures, type EditorGizmoPlugin } from './gizmo-loader';\nimport type { GizmoItemBounding, Ray, TriangleLike } from './gizmo-vfx-item';\nimport { BoundingType, type GizmoItemBoundingSphere } from './gizmo-vfx-item';\nimport { computeOrthographicOffCenter } from './math-utils';\nimport { createMeshFromSubType } from './mesh';\nimport { intersectRayLine } from './raycast';\nimport { createMeshFromShape } from './shape';\nimport { moveToPointWidthFixDistance } from './util';\nimport { WireframeGeometryType, createModeWireframe, updateWireframeMesh } from './wireframe';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Vector2, Vector3, Matrix4, Quaternion } = math;\nconst constants = glContext;\n\n@effectsClass('GizmoComponent')\nexport class GizmoComponent extends RendererComponent {\n gizmoPlugin: EditorGizmoPlugin;\n targetItem: VFXItem;\n needCreateModelContent: boolean;\n target: string;\n subType: GizmoSubType;\n size: any;\n contents?: Map<Mesh, Transform>;\n boundingMap: Map<string, GizmoItemBounding> = new Map();\n hitBounding?: { key: string, position: Vector3 };\n wireframeMesh: Mesh;\n @serialize()\n coordinateSpace: CoordinateSpace = CoordinateSpace.Local;\n\n color: spec.vec3;\n renderMode!: GeometryDrawMode;\n depthTest?: boolean;\n mat = Matrix4.fromIdentity();\n wireframeMeshes: Mesh[] = [];\n\n mesh: Mesh | null = null;\n\n override onStart (): void {\n this.item.getHitTestParams = this.getHitTestParams;\n for (const item of this.item.composition?.items ?? []) {\n if (item.id === this.target) {\n this.targetItem = item;\n }\n }\n const targetItem = this.targetItem;\n\n if (!targetItem) {\n\n return;\n }\n const composition = this.item.composition;\n\n for (const plugin of composition?.pluginSystem.plugins ?? []) {\n if (plugin.name === 'editor-gizmo') {\n this.gizmoPlugin = plugin as EditorGizmoPlugin;\n }\n }\n const gizmoPlugin = this.gizmoPlugin;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (targetItem.type === '7' || !gizmoPlugin) {\n return;\n }\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n this.createParticleContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n case GizmoSubType.modelWireframe:\n this.needCreateModelContent = true;\n this.createModelContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n case GizmoSubType.box:\n case GizmoSubType.sphere:\n case GizmoSubType.cylinder:\n case GizmoSubType.cone:\n case GizmoSubType.torus:\n case GizmoSubType.sprite:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.floorGrid:\n this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);\n\n break;\n case GizmoSubType.camera:\n case GizmoSubType.light:\n this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.rotation:\n case GizmoSubType.scale:\n case GizmoSubType.translation:\n this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);\n\n break;\n case GizmoSubType.viewHelper:\n this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.boundingBox:\n this.createBoundingBoxContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n default:\n break;\n }\n composition?.loaderData.gizmoItems.push(this.item);\n }\n\n override onUpdate (dt: number): void {\n this.updateRenderData();\n }\n\n override render (renderer: Renderer): void {\n // The material of the 3D plugin is updated during the render phase. In order to obtain the correct value, it is kept consistent here.\n if (this.subType === GizmoSubType.modelWireframe) { // 模型线框\n if (this.wireframeMesh && this.targetItem) {\n //@ts-expect-error TODO 和 3D 类型解耦\n const pMesh = this.targetItem.getComponent(RendererComponent)?.content;\n const meshes = pMesh.subMeshes;\n const wireframeMeshes = this.wireframeMeshes;\n\n if (meshes?.length > 0) {\n wireframeMeshes[0].worldMatrix.copyFrom(pMesh.matrix);\n updateWireframeMesh(meshes[0].geometry.geometry, meshes[0].material.effectMaterial, wireframeMeshes[0], WireframeGeometryType.triangle);\n }\n }\n }\n }\n\n updateRenderData () {\n const item = this.item;\n const gizmoSubType = this.subType;\n\n if (gizmoSubType === GizmoSubType.particleEmitter) { // 粒子发射器\n if (this.targetItem && this.mesh) {\n this.mat = this.targetItem.transform.getWorldMatrix();\n this.mesh.material.setMatrix('u_model', this.mat);\n }\n if (this.wireframeMesh && this.targetItem) {\n const particle = this.targetItem.getComponent(ParticleSystemRenderer);\n\n if (particle) {\n updateWireframeMesh(particle.particleMesh.mesh.geometry, particle.particleMesh.mesh.material, this.wireframeMesh, WireframeGeometryType.quad);\n this.wireframeMesh.worldMatrix = particle.particleMesh.mesh.worldMatrix;\n }\n }\n } else { // 几何体模型\n if (this.targetItem) {\n if (this.contents) { // 组合几何体\n // const targetTransform = this.targetItem.transform.clone();\n\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldScale = new Vector3(1, 1, 1);\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldScale,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3();\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n const center = targetTransform.position;\n\n for (const [mesh, transform] of this.contents) {\n let worldMat4: Matrix4;\n\n transform.parentTransform = targetTransform;\n const position = new Vector3();\n\n transform.assignWorldTRS(position);\n // 物体和中心点在屏幕空间上投影的距离\n let distanceToCneter = 100;\n let theta = 1;\n\n if (gizmoSubType === GizmoSubType.viewHelper) {\n // 正交投影只需要计算物体在XY平面上的投影与中心点的距离\n if (mesh.name === 'sprite') {\n distanceToCneter = position.toVector2().distance(center.toVector2());\n theta = (this.boundingMap.get('posX') as GizmoItemBoundingSphere).radius;\n }\n // 将物体挂到相机的transform上\n const fov = 30; // 指定fov角度\n const screenWidth = item.composition!.renderer.getWidth();\n const screenHeight = item.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const cameraModelMat4 = item.composition!.camera.getInverseViewMatrix();\n const padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n let localMat: Matrix4;\n\n localMat = transform.getWorldMatrix();\n const worldTransform: Transform = new Transform({\n valid: true,\n });\n\n worldTransform.cloneFromMatrix(localMat);\n worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);\n localMat = worldTransform.getWorldMatrix();\n worldMat4 = cameraModelMat4.clone().multiply(localMat);\n // 正交投影到屏幕上\n const proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n mesh.material.setMatrix('_MatrixP', proMat5);\n } else {\n if (gizmoSubType === GizmoSubType.rotation) {\n const cameraPos = item.composition!.camera.position || [0, 0, 0];\n\n mesh.material.setVector3('u_cameraPos', cameraPos);\n mesh.material.setVector3('u_center', center);\n }\n worldMat4 = transform.getWorldMatrix();\n // TODO 计算物体和中心点在屏幕空间上投影的距离 distanceToCneter\n }\n mesh.material.setMatrix('u_model', worldMat4);\n\n // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题\n if (distanceToCneter < theta) {\n if (distanceToCneter < theta * 0.5) {\n mesh.material.setVector2('u_alpha', new Vector2(0, 0));\n } else {\n mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));\n }\n }\n }\n }\n if (this.mesh) { // 基础几何体\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n if (gizmoSubType === GizmoSubType.light || gizmoSubType === GizmoSubType.camera) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3(0, 0, 0);\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n\n this.mesh.material.setMatrix('u_model', targetTransform.getWorldMatrix());\n }\n }\n }\n }\n\n /**\n * 获取默认绘制模式\n * @returns 绘制模式常量\n */\n getDefaultRenderMode (): GeometryDrawMode {\n let result: GeometryDrawMode;\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n case GizmoSubType.modelWireframe:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.floorGrid:\n result = constants.LINES;\n\n break;\n default:\n result = constants.TRIANGLES;\n\n break;\n }\n\n return result;\n }\n\n /**\n * 获取默认尺寸\n * @returns 几何体尺寸\n */\n getDefaultSize () {\n let result = {};\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.box:\n result = { width: 1, height: 1, depth: 1 };\n\n break;\n case GizmoSubType.sphere:\n result = { radius: 1 };\n\n break;\n case GizmoSubType.cylinder:\n result = { radius: 1, height: 1 };\n\n break;\n case GizmoSubType.cone:\n result = { radius: 1, height: 1 };\n\n break;\n default:\n result = {};\n\n break;\n }\n\n return result;\n }\n\n createModelContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const modelComponent = item.getComponent(RendererComponent);\n //@ts-expect-error TODO 和 3D 类型解耦\n const psubMesh = modelComponent.content.subMeshes[0];\n const engine = item.composition?.renderer.engine;\n\n assertExist(engine);\n\n if (psubMesh) {\n this.targetItem = item;\n this.wireframeMeshes = [];\n\n const originMesh = Mesh.create(\n engine,\n {\n geometry: psubMesh.geometry.geometry,\n material: psubMesh.material.effectMaterial,\n priority: 3000,\n });\n const mesh = this.wireframeMesh = createModeWireframe(engine, originMesh, this.color);\n\n this.wireframeMeshes.push(mesh);\n meshesToAdd.push(mesh);\n }\n }\n\n createParticleContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const shape = (item as any).props.content.shape;\n const engine = this.item.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape && shape.type) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color });\n\n meshesToAdd.push(mesh);\n }\n }\n\n /**\n * 创建 BoundingBox 几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n */\n createBoundingBoxContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const gizmoItem = this.item;\n const shape = {\n shape: 'Box',\n width: this.size.width,\n height: this.size.height,\n depth: this.size.depth,\n center: this.size.center,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color, depthTest: this.depthTest });\n\n meshesToAdd.push(mesh);\n }\n }\n\n /**\n * 创建基础几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n * @param subType - GizmoSubType 类型\n */\n createBasicContent (item: VFXItem, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n color: this.color,\n renderMode: this.renderMode,\n depthTest: this.depthTest,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n const mesh = this.mesh = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Mesh;\n\n this.targetItem = item;\n meshesToAdd.push(mesh);\n }\n\n /**\n * 创建组合几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n * @param subType - GizmoSubType 类型\n * @param iconTextures - XYZ 图标纹理(viewHelper 专用)\n */\n createCombinationContent (item: VFXItem, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n renderMode: this.renderMode,\n };\n\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.contents = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Map<Mesh, Transform>;\n for (const mesh of this.contents.keys()) {\n meshesToAdd.push(mesh);\n }\n this.targetItem = item;\n }\n\n override fromData (data: any): void {\n super.fromData(data);\n const item = this.item;\n\n item.duration = 999;\n const {\n target, subType, renderMode, size, depthTest,\n color = [255, 255, 255],\n } = data.options as GizmoVFXItemOptions;\n\n this.target = target;\n this.subType = subType;\n this.renderMode = renderMode || this.getDefaultRenderMode();\n this.size = size || this.getDefaultSize();\n this.depthTest = depthTest;\n\n const [r, g, b] = color;\n\n this.color = [r / 255, g / 255, b / 255];\n if (data) {\n item.transform = new Transform(data.transform);\n }\n }\n\n /**\n * 射线检测算法\n * @returns 包含射线检测算法回调方法的参数\n */\n private getHitTestParams = (): void | HitTestCustomParams => {\n const item = this.item;\n const boundingMap = this.boundingMap;\n\n if (boundingMap.size > 0) {\n const boundingKeys = boundingMap.keys();\n let worldMat4: Matrix4;\n\n worldMat4 = this.transform.getWorldMatrix();\n const targetItem = this.targetItem;\n\n if (targetItem) {\n //const targetTransform = this.targetItem.transform.clone();\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n const gizmoSubType = this.subType;\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (\n gizmoSubType === GizmoSubType.rotation ||\n gizmoSubType === GizmoSubType.scale ||\n gizmoSubType === GizmoSubType.translation ||\n gizmoSubType === GizmoSubType.camera ||\n gizmoSubType === GizmoSubType.light\n ) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || [0, 0, 0];\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n worldMat4 = targetTransform.getWorldMatrix();\n } else {\n worldMat4 = targetTransform.getWorldMatrix();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = item;\n\n return {\n type: HitTestType.custom,\n /**\n * 自定义射线检测算法\n * @param ray 射线参数\n * @param pointInCanvas 屏幕坐标\n * @returns\n */\n collect (ray: Ray, pointInCanvas: Vector2): Vector3[] | void {\n const hitPositions = [];\n const gizmoComponent = self.getComponent(GizmoComponent);\n\n gizmoComponent.hitBounding = undefined;\n for (const key of boundingKeys) {\n const bounding = boundingMap.get(key);\n const center = new Vector3();\n const worldCenter = new Vector3();\n\n if (bounding?.type === BoundingType.box || bounding?.type === BoundingType.sphere) {\n if (bounding?.center) {\n center.copyFrom(bounding?.center);\n }\n worldMat4.projectPoint(center, worldCenter);\n }\n let position: Vector3 | undefined;\n\n switch (bounding?.type) {\n case BoundingType.box: // 立方体包围盒\n {\n const boxHalfSize = bounding.size.clone().multiply(0.5);\n const boxMax = center.clone().add(boxHalfSize);\n const boxMin = center.clone().subtract(boxHalfSize);\n\n position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n }\n\n break;\n case BoundingType.sphere: // 球体包围盒\n\n // viewHelper 使用了正交投影,使用屏幕投影点计算\n if (gizmoComponent.subType === GizmoSubType.viewHelper) {\n // 计算正交投影矩阵\n const viewMat4 = self.composition!.camera.getViewMatrix();\n const fov = 30; // 指定fov角度\n const screenWidth = self.composition!.renderer.getWidth();\n const screenHeight = self.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n // 将包围盒挂到相机的 transform 上\n const cameraModelMat4 = self.composition!.camera.getInverseViewMatrix();\n const localTransform = new Transform({\n valid: true,\n });\n\n localTransform.cloneFromMatrix(worldMat4);\n const pos = localTransform.position;\n const padding = gizmoComponent.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n\n localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);\n const localMat4 = localTransform.getWorldMatrix();\n const modelMat4 = cameraModelMat4.clone().multiply(localMat4);\n\n modelMat4.projectPoint(center, worldCenter);\n\n // 包围球中心点正交投影到屏幕上\n const vpMat4 = proMat4.clone().multiply(viewMat4);\n const mvpMat4 = vpMat4.clone().multiply(modelMat4);\n const screenCenter = mvpMat4.projectPoint(center, new Vector3());\n // const screenCenterX = screenCenter.x;\n // const screenCenterY = screenCenter.y;\n\n // 包围球上的点正交投影到屏幕上\n const radius = bounding.radius;\n const up = new Vector3(\n localMat4.elements[1],\n localMat4.elements[5],\n localMat4.elements[9],\n ).normalize();\n\n const point = up.clone().multiply(radius);\n\n point.add(center);\n\n const screenPoint = mvpMat4.projectPoint(point, new Vector3());\n // const screenPointX = screenPoint.x;\n // const screenPointY = screenPoint.y;\n\n // 计算正交投影到屏幕上的包围球的半径\n const screenCenter2 = screenCenter.toVector2();\n const screenPoint2 = screenPoint.toVector2();\n const screenRadius = screenCenter2.distance(screenPoint2);\n\n if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {\n position = worldCenter;\n }\n } else {\n position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());\n }\n\n break;\n case BoundingType.triangle: {// 三角数组包围盒\n const { triangles, backfaceCulling } = bounding;\n const tmpPositions: Vector3[] = [];\n let tmpPosition;\n\n for (let j = 0; j < triangles.length; j++) {\n const triangle = triangles[j];\n const worldTriangle: TriangleLike = {\n p0: worldMat4.projectPoint(triangle.p0 as Vector3, new Vector3()),\n p1: worldMat4.projectPoint(triangle.p1 as Vector3, new Vector3()),\n p2: worldMat4.projectPoint(triangle.p2 as Vector3, new Vector3()),\n };\n\n tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);\n if (tmpPosition) {\n tmpPositions.push(tmpPosition);\n }\n }\n // 仅保存距离相机最近的点\n if (tmpPositions.length > 0) {\n let lastDistance: number;\n\n tmpPositions.forEach(item => {\n const distance = ray.origin.distanceSquared(item);\n\n if (!lastDistance || distance < lastDistance) {\n lastDistance = distance;\n position = item;\n }\n });\n }\n\n break;\n }\n case BoundingType.line: {// 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中\n const { points, width } = bounding;\n\n position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4, self.composition!.camera);\n\n break;\n }\n default:\n break;\n }\n if (position) {\n hitPositions.push(position);\n // 缓存距离相机最近的 BoundingKey\n if (gizmoComponent.hitBounding) {\n const distance = ray.origin.distanceSquared(position);\n const lastDistance = ray.origin.distanceSquared(gizmoComponent.hitBounding.position);\n\n if (distance < lastDistance) {\n gizmoComponent.hitBounding.key = key;\n gizmoComponent.hitBounding.position = position;\n }\n } else {\n gizmoComponent.hitBounding = {\n key,\n position,\n };\n }\n }\n }\n if (hitPositions.length === 0) {\n gizmoComponent.hitBounding = undefined;\n }\n\n return hitPositions;\n },\n behavior: spec.InteractBehavior.NOTIFY,\n };\n }\n };\n}\n\nexport enum CoordinateSpace {\n Local,\n World\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { glContext } from '@galacean/effects';\n\n// 坐标轴默认颜色\nexport const color = {\n xAxisColor: [216 / 255, 178 / 255, 76 / 255],\n yAxisColor: [38 / 255, 149 / 255, 235 / 255],\n zAxisColor: [134 / 255, 74 / 255, 245 / 255],\n};\nexport const renderMode = glContext.TRIANGLES;\n// 坐标轴默认图标\nexport const axisIconMap: Map<string, string> = new Map();\n\naxisIconMap.set(\n 'light', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'camera', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAC8CAYAAAG1TvQ9AAABYWlDQ1BrQ0dDb2xv\n clNwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bAC\n KIv64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+w\n hYTUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6Sg\n YGRiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbe\n SAYG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAA\n AAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAALygAwAEAAAAAQAAALwAAAAAo32wHAAAIEBJREFUeAHtXQuUHEW5np\n 6Z3SQbQ5A3CGYDgXCuYA4YIldAbwIERXlcDwQUIe4VzRFibsLuzqIiiQdRdjcJOYEo0SAheo8QQEVeciEGRa6QRBEOcLheMIk\n QHvKQGMK+Zqbv99V0TXpmume6Z6Znemb/Omfm76qu+uuvr/+urudfkYi4eiNgUICVK1fuNTAwuLNMYXb29CT2dkurMujt7TMZ\n wTCMv4Pw58mZpnmMFfFZZKKvc9P29fVv0hnk3vHmY9r89EREp45DihO0R9P169fH5syZk9J+rxTC/hf4fR5wR5ApEIncEc1Pj\n BtPb926LUmp+vv7F+ffd/MzPpnzPhhPITXNyPkFGSD8WN6kS6fNJerC89++e+FZGIlE4kWdpCADRtA37dc6zI0ybk/Pl3bl34\n /nB9Dvh7FTentYQQnsN6tx3TgZ9Pb2/9mpxFUsgTmNqorfH+wZVS2DGTNOaLEYn8iMdCZRvBSvaE8ldObMmUlq37hxY8eSD+o\n 1k36D1QLfXAb6Vc++vr678baeXSyteqkQ8XlEnMqI5Ti/gpWTh6QRBBoJgZxmSjmCF3upDHslhLriGR8ZTMUHXVVmrhlYVWm2\n lvPBPLJ8+fJxTN/Xt+xMezq0OibT71glI1G29WBPlH99xRVXDDDMNNMzSLWgaHH8ldcFzBk4MpJ8mpQJvDlzsS3+cDRqTGM6x\n xaDN4YFsV4H9gcxdNWqVe97993djrCkrWSvFyR3DTC+rRnboxRIjkgxe4RKrgswr4RZftpGYG46tqarJjlV0aaOCqEqMTe+DW\n 7byJEZQA1VK7kqzFEnvQwtm4wfKkLjBWbS0hI/Mltx4a36Snd39494w4tD/2kMujiDjJthWpiq4ioXQl0Noa4pZC0hgoAg0CA\n IqHrALmtf3/XHRyIjy9HH4bhLm/1eFa9fR623AbXc5YsWLXqnXL5KeDSI9kG75a1ymVQjnVstW4y3gWbeLLTGNtgiPQ5G/2rz\n B3aJkbA02rbZp++3AAYYJMEg2zTyy6DSktk/84YR/VYi0fUdO0+Mo9yAxu98exhU7p5EovtsjilmBbdHsF+DAUYrzIN1GBI/j\n MSna3+1KGSJI69fI68z9vAsbIEj3lksdMkmRwaZPYKTKRKfZkdsT0aVXrFFt0dwDPHsQsPgQGoDf+973/gJ9hwKWtf2m7wGym\n 9C2P0KwyM/yw+r1I+8tk+cuNeR8+bNG/HCq6TwUI/9yWjZsmXTUqnUya2trXcuXLjQR5/EixiZOKie13oVnClKCq+z7uzsfAr\n X/IXGldT50EjqIEhDC+9ZbRwKHkCQGm1QfUjUNFswCVIwNWTPNGTCRzgwrWTCyzvdXh2jMI/u3v3eVrvwIVMb41pdp0+e3D4G\n VedLWlgU5hRU2ZdofywW/UQcn+RVGHm6XAdef/317WjpbdP+IGlf39KVyDubRTQa+b72zJkzZxjXH9R+J6oaRWjfbECpZjlFq\n F1YbFZPT+dGP/llW3RMhLmKT+LxPOCHQYVxB8ePbzt0/vz5dW2OV1gGSS4ICAKCgCAgCDQZAjnNA5aNK5zQRLgYbZ0jAiprGq\n 3Fp9G178MYTUWd+KzwaJz9EgKfE5DArmwxtHEu5jzudo1Q5IbVquz7C9A+ski8QG+hAF9DAW70mwmG+5ZdYJqp2/IT4tH6mU/\n PT17Eb7YAqKn5ESZPbo+jDe9r5R+G+3IFHzOm9aCgxmXsAi9dunRuKpVeq8O2bdvGtvzHtd8LzesGGlfWQnAK1tXVdSvIP7SQ\n eBqn6GsnisIevXHjxpw+d46ntTW+2ilhUGHoVK+D0P/pxh+jdIclk6m/4P5YPKXIpk2b1aJQdGD2YwcmT/hWtazMiRn7trFYb\n PeCBQvecLpfZphjfqiuj0Gh/gzBHUewMYrwJvIzcoR3EgCMPo3Jh3uHhzn2OaJKjgV1h6EQLzvFryQMqnEyEH4U+ZVkg6HwNX\n k6n5uGk9sUPDc0EsGEd3ZIIv9eJX4K7pQe6rWGQyL2ewj7fFHhBwaGMCvh7PBE/s35TvVCMSzTR6ExcvblfK74oI4rqjYYRxm\n b3jOskpMeidVazJzAKnmAag8E7ivFrqjw+FBdgZmKi52YgDmmX6rrgPSX0d5Z45VrUbVBXYy32rgmn5lhxH19TPLTu/n9CE4e\n RZFnhJ6e7qtBrsaA1CWgu4H4XQwPgyspvBYSQq/T12GhRdUmLEK6ySHCuyETdLggHzTCbvxDhTznoHp7l57rJmx+eKiEzwiX/\n gULwdZsvrD5/hAKbxUBrVkWAh/H2flCa7/nj5ROUE2KdUJo5hZvu6NT8iAKwZ1vHbi2u9frijw2B+WIw+YvhkEutUuorxHzFn\n 2dodEldRU+V5iMD+M3N2c6HtGvOt23woZ7erpuyhF+aGhoUpEEVb8FtXHNj8KxEFCXBfaM4b8D4WMYlqPz6PD+D8Im2iMHe22\n eZ+Pv2O1Bg5C9OcceHYXfhl87flx+tRfGLN+Kx2Mfxr6MHQwLwqGjfQL6q5vsvKHrX7H7vVyrTi2rJC+Rg4oD3UhhRVWOFnjJ\n S+k89GiKl8hBxIHgZjmCU5ac4QR8EP6IKgnLcWvjANoy6HRXbXKTXAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQcAfAjnDBvak3\n AEA/7W1HEaw51+D60GMt9zY1jbuunrsOsgBHmAfgQLfB7ALFq7VAIi6ZcEBL4wdLa6lOYgs8OHYqFM37FXGHCo1zejpfjcLlS\n O1trL2AhK3uzGAQG9DI67Esrj7gxzwdsu/GuFcaDY8PPzhdDp9Fd5oZRnOjS8nlDgv43a/GuFYg7v0RvueOjtTAP5PWFOYVqs\n 9dva8g7629vN9zSWfNMA/GOD/3eV+xcGYgUj/uxsXTOl8rBlBZ3kxFbAA6zFhAiFnLkxDEcUEH98KT2vcVqxYceDwcHIepsIu\n Ar+jNBPQ91BTPBKJxFYlEp3328IjWLgdOcQeYL8eM2bMdru/2a7xTd2O8js6gHio4w0EwhzKlJGR1JUA9RLEaxka4oZXR9cG/\n mdGIqkzOXGPuaenWlpis1Bdv+17zs2RPQKxNHpv2Gb5LgS5EN7363iorp6HgEuDrjN1fkHQ3t7l0w0j+U0Adw7KZ6CcKhu3h+\n YugzmN9mvQejy5YuCxEAYfLHMzlnW3OmUIQY+GgGvwxPnaboKx1pNoT9Upbq3Dii8zMRdC5sUZmZI0rAzn8nrYBM+0jMzfgE5\n D2Q+w3bJf3pyzUMJ+x8s1N8cAdJrMcATdgceMzZu3vEP7jw73ah6Uv0QmTwBPay4A8ADWPN/APQRc2MEJcNDZ2E3BPpGjw0Oc\n WqHGp/Ex8eegBeNhnOUcpCrYzeSPU31iA2g2rVeOHz9+5WWXXfaPcqWoEHjzQWR8lp/M+Srio73BT5p6xoW8L6GK6Y/H42u0M\n dVqyFMR8FiesQqrfF7FKh9PC+ihKa+giXostvW8XQ3hg+VBk6zdS4LKoyLgKRS2YfwchIbbPsqPKKqSnEMRoDH8Iv0EgC9iM4\n ppxOUt5KsEEDQXn0D6YyvhMZrSVtSqGU1AVbusAny1EfXIT4D3CFS1ownw1UbUIz8B3iNQ1Y4mwLsj+jn0UT6L5nF2ls49qv8\n 7Fbfj/WfZKCnMo1Ip8y5MiSp7DuiqPIlN+5yXvacaJRDgPaNoHgdLCb/KjKurRJvQE1+M3ntZhgYEeM/AF0ScgZ76A/pBoIf+\n GCbKF2OiXI1DYUtcsRHbtABfgKcOMK7FaMcLAPdbCDlch7pRfAtOwkzTw/pB6MkSp/h4U3LNCDlFGsVhSVQja1F+/iKrV69u2\n blzVwdGKr8BkCcxrByHN2P7/vvv9xlY7uVaEmf7+FgO0exvhGv5gEvOLJllfP2HAJu/CA4fbN269W+X4q3gg/hAqYcALd8Fnh\n fpjzMz/hN+jhatOXOOe72lmDbifc6CoTqgXRgXZxAXVzcnY9KZJp6zZp5h2+tETPJ8BGeoHYoHMogHshXW+B90Mp7mdA5Hfma\n Pw2TcuU6J8yM2ih/t87mYsrwFwDi20aGdj6Ka+XiQ5VEZuxkWdMoYrwsX+QS20Mcpz8rDeICgcTiABi3pnp08uX0aNDpVMmYF\n EbJPnEfnJJPJx/EVP7ICfg2dFKvHyjKJWU6hs8DrxDzpenBwCHYKa2/MVMtQY7oTgM/FR+/uWuZbALw9c9aB/f0rjsMH/ixcz\n 8TreigoT/5ps8drgGuaqXgD1eSroM+hHPdiRdcDlZyw1QBlFhEFAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBA\n QBQUAQEAQEAUFAEBAEBIHqIlB0lQGz6uu7/nhZZVBd0MnNFXgxf1h9sO0cC4CXBU12eIK7jtlZ0+4klvE9gmV8WGQ/ahwOHDU\n umD17dvqhhx76Xa1KnQWeaydhGpCgH1WrzEOUD0/VmnnGGbPfAvibaiFXdrslToK6YzQvWCXYKP+K3t5lWKoYvFN1vCzTzgG6\n Jsu049hSEtu6ddt1OVnnebDYczRZWv3Q9u3bvwgIbs6DoareODL5BDi2F+H6eGtrS8PvCIFVqCGUcTN+55TaEYIV0XMRL1Dga\n VH0s26gQ9P/CdA/10zbcFhWWJW6FS2ZG93Kjbr+JFiccjNd6JbMVzg2n5kz3FJAgO82q4nbeDzaMzKS/gLKnjVOasMBChmdDv\n /9tjBPl+wHYbfkIXhrhqZPn/6Sm41NAu+6VRCL9+/1lFsDRqJFPdgW3oDyn+csvulq+jc/vt228MDAYLY5vmnT5vfQN3rE0bY\n wXrkDkXk+L+VHVbPD8UaTBGJL5A681W7uILcbOhzbKw9LJtMJ2Ba+FGHoiBW4rG1hGKO4B6czdOjTGfBKOW8uJgvs0czZZFvA\n tvEDXMsHXLgH2NGhszkFb8samH18EUo7H5GcQM9JC35n7d49sIEdVd5wZZ6TyoeHzdMdO3YchowmwEjma2hNvOEjeaij4oN7D\n N6Qr6OzeQEAjxV5W1zKYU7DkMxNuDmnasBra9roE2StadOQAl6xprGmDaCVNW0XVD0Fg8f5qPdPqgrw0IRPY/v9j6AF3BGY46\n D5ypo2HsCFY8eO6cAb8HJOhBB70N4/GcaCropEkmdktNv9g+CnGGjCd2THavwktMcF6DRjDmurhaDb4+EBnIYv/l0bN4bHYgg\n AUEMmdjn3XJsLUYc/inKdsSes9BUaJCnEegjUdfc7PuonVwQ8DzwB6D9FRsWM4tilnbFly5Zv2gPqeQ0AiqmwJzPmNvmH8RjX\n 4EFNpRlzXJ9uu5d3aXywIuAHB0fOBUdfZm1R1G582UNhPz4PjbK80GxtP/4IGJ74Mn5o6WAHdlvbX90Y4u0fV1Edj9N0TnVj7\n haOTGk//qO4/4hbnEYIh0bvgnmUH+CtWdbd3eVarbiVpSLgkflBRV9Wt1wjkZKdE/ek9b0DDa+/4X4A/045wEPr36kvfGXl/j\n rKu9w09/lBIvElaHtlriKNB4A0XX6xHxH41Uez8o9+0tQzLuR9CR/McJ2YEI1Gb0erZgkewH7ewTHXN0JvFoBvxzjWdyZOnHC\n rZY/MexE9xKyoVYNx7Tdh64V2yzw5vKo4qiLOsY3QO1Sha3E62pogQGfhKwKeDDJHVRjX4JI2YYq51zE0dKEcV5GBqGLgyQaH\n mFwNzf8YXs9n8pFHGPqHxjoc1vgvicQV6AmKIwIVfVztEOozQjBGPQ3t9Gm4NwG/1zB1+Ptmmzq0l7vc66oBrwXo7OzkSWj8i\n SuCQFWqmiL85ZYLAgK8CzBBBwvwQSPswl+AdwEm6GABPmiEXfgL8C7ABB0swAeNsAt/Ad4FmKCDBfigEXbhL8C7ABN0sAAfNM\n Iu/AV4F2AQHOiRcwK8K/A8ci6NI+eWPtnbu5TLWKrqBPiScJoY4k7/AquD/4RVc2eVjO4xggDvEShMeOOsP/NXWHC6mWtFPSd\n ziSjAuwDjFoy52Ol4APfiaLkn8BA+6RavVLgAXwoh9/v6kMU/4AHMdo/mfEeAd8bFT+iJeAsexDL032NXeHZJo5xuWQTCzDJt\n 1wXD3KbjeWoUa4tgeCP1MLSfE/o/xq6RmUWyfsMz4yJMGvYWl2m7L0E0enHf87GiGgTwOwXX+Lk+0AjWFz0jVY1GrJCqY0Vnz\n DhhKpauXIrb2wqjlBeCPbR3CvAlsOMGYSxduXnvvSceZRjReZmlfSUSFbnN9AccsO9aAb4ISPZbXMqHJX0/bG+fhA3E0a8CwJ\n fs9z1eD+PtuaSjo2MwCgYpt0RykG4hMjzHtaen6yY8gCl4AJcDP0+bsFGv7wLo52HJ4+/IFRpvYk2js8OXx3W7vXOKxgpFq6Z\n Y+V4rVhrrAXwfS86PAKgLsLL4Baf4eDDc4nYHFuser08vZjy0avjEnPftj4ykPoM4zzoxbPQw7sPCPtxsu7uwPMYrhWGFIVhy\n TnMsN/DnfIJxi+MJxgQeNrhMx6Oj8aS+gY3DtzejBQ/YIOgFWE6WO4hu2jDSW3jhx2H54uOIz19Jhzqee1SdHaoamAAZ+RmtU\n zjHaMxQGgqCsrmu04fCPYZqwfeGMj9oxCdNmvRbbIPfhkTtLglPBPjPYUTuylgsdj/Wt3v6mLjwqlsw9+SisYDN0OmrMM5+dj\n FBUC/fWux+Ne4ZZCLG4HKgrIkxOAV8Bvz+DahaZuWIMMo8bFqjV3l6T0/nxqCLnu1AxeOx81G3/V/QGYaZP8q/sBagE4Ms8Nb\n epE8h8/8NMzhByMa2Njo3V+ODemMQ/J14ZqsafVOMOmskgqUFwOvsrGmtazHMebwOazI6iLd7FYw9fE/bCatl+VyBpxD42Br9\n /SuOE8P9tXwkkpcgIAgIAoKAICAICAKCgCAgCAgCgoAgIAgIAoKAICAICAKCgCAgCAgCgoAgIAgIAoKAICAICAKCgCAgCAgCg\n oAgIAgIAoKAICAICAKCgCAgCAgCgoAgIAgIAoKAICAICAKCgCAgCAgCgkC5CBTdRO+FaV/f9cq6ATfaMz423s/MpDMOtfwHZ/\n yRNosKCQYBfWb0G2QPGySvWtk8l6HGvaQtLbEHSGFZ7h3S0eZ8K7zNOv21BKuJzXk0qy4MsmB4IZQxnra2cdfRXw+TJcy31q6\n kwtNQEIUaHBxaR4oa/BxScU2DwE6WBBapYAIyEoFVqrtJm9W5Kjxq8iOsQt9Hipp8arOCIOVSNb46WABGqhYTDyj+Nc2IS4HC\n w7TxPixoMplUFnGh6Ec2Y8GlTMURQI3/NcaopR3C4hJV526BwuMMnQ1kPdpNrFYH3sblQhOzGT2Ink5aK6unQSOWVXgacc4UM\n HVbNTMFcNr0t6bVZC+8sgiYLZlL43BSVFiWPxuh3At1SMPkye04WDISwakQrseYlJtBLdPF169fH2OGMBeveuvlZg7Ffptp0Q\n a8kpRm5Ukb1bQ8ZW9ER5P4lJtm8UlpGp8UTdOi5vEZx8V9iOHbt2//onX/Zos2JImjIJ+wJG8vswSqrd/a2qLO8124cKHreTp\n l8pdkPhCwjoVhis1WMjWqljmIgy+AeQvD8QXIft2teEUJ4s+1IjS0whs4fFqNx5pm+vKiJc67iRr9nwxqaYmrT10zHpGTV+Sm\n 8OJ5r2RB8LxVp9RHodTEFjqzaiIRndmGbKLivCdzho9CZ6PiE/ldekTRs5A0xEU8Hu2hoCMj6S9YArudeZVfHnWKBs5KmW7dU\n E3W/EjV9ut5IDTRDiFvfGl4sFlk+vTpL5HysEtSr44KX+xYO1c+mKJWU9WuEeRGKBFAn2qAgvX2Zkbj8PzP8yeo8ymE/ngUxt\n ZnuQ0PJ+fxLhT7ItKBgUEcGlroNm3a/B5DMV/0SOZubBVpItFZ9EXkiX4HZhKYGeLxH02aHR6jSrQQIoDjftTzw5farzvIbwK\n n+Dh28jCG42TFBOnQ0PClpHBjM6Tkv1qbBfnPzMRMKYph9Xvox5KJDtL8JRNxvElqlIY3/bjW1lZfnxI/vCVuTRAo6/lBX1BJ\n +neY0JzCVDiPVo3i4VDFSzJcqjZ8qthBPrWIcffugQ0MQL6zSK3DzHhYbridHjbdsWOHqhFQoAmUGKf+vkaKUQm1OpDX4sKDA\n E48PYbSoAb+OmkymVLzPAhRFWwZXxay8eFMNZiCFQM3WYnmkIZO4XEo8t4UDCc3q04x5gcupB8up3OF+yoQn7DneYHx/6WkGD\n 1o6GEzlqERXW/vctWZxTLxb1J+KLQaDkUF5Wv4s9plhxznkyfa+ieRhkbhUSN8mgKh0/IjUkCm19FnvC7/APRoFduMrCHFC6B\n eEJwPr9pw+AK87JJUgitAAOP6JzN5KmVelWGTPIN0T83tv3OQ4RPMP947pQ91V3goujUjmD2VvbWSIuMFOI3p0bu/i3Tjxo3q\n zfY7fMW0zeygAFbN61cxzYXEBYq+uBb4YHAkxXzwXH9DCr9qqsB/AP1eHTrp6gWtm8LrKXAo5k8toStSdIeCz2DYli1b1CcWl\n 992iDNqg6AAStP31MieoZjoOWZ5EYeZDK/jukxy8zrSnp7Ei6S6goTcT9Hv3RkfZNy6Kfzg4IhaigAZjvUutP+YAKabqdBb7y\n PV49C8Fld/BFBjq3kBqLhqko4d26qek1tTFAdK/5VSv/vubl/C44swjgnqpvCY2j7Vl8RlRkZBxzNpKpX6qMXiEYsKqQMCqLl\n 3ZbKN/oAUX5plpN3dXX8nDdrVTeFR8INYuDI+qeViovIrN7GkKw8B1OB6Fa1awzN+/HhFL7vssn+Ux7GyVPVU+Hcoeq0UHjW9\n yq8yuCS1BwTUallUaMsZ1zT3UTV5IvElq2b3wCHAKHVTeCjgE1a5Lg6wfOzVq14+hin/GGQ+o5U38FWLuKDa/cQAE4KqLR7Wv\n lLdFD4ajd5OgLA+ewkpXoD9SKvvzPXkKTOy1UEWCr49w8n4DunEiRNuJZ03b94Iadhd3RS+q6vrTYKDCQy1Og7jumrcvFqA4Z\n P6CnmhxplfLZ7CRzVB1xKHnp4uVZM3GiZ1U3gNFBT/57zGctVrMmGmHjdX6691PB9UtSGh6mrGVS8a8pFeojYxAnVXeI1tT0/\n 31bzGxMJ9pOjMqhoETR21CIlhTg6fWD1V+BPej8dji0hF0YmCuHwEQqPwWjAs/tKdWTUhhXXTaioZ4+iKIt4EK65aLYm9tL+n\n X/bSWqgIKYpA6BQ+X9rOzk49haxpfhTxCwKeESi3new5A4koCIQJAVH4MD0NkSVwBEThA4dYMggTAqLwYXoaIkvgCIjCBw6xZ\n BAmBEThw/Q0RJbAERCFDxxiySBMCIjCh+lpiCyBIyAKHzjEkkGYEBCFD9PTEFkCR0AUPnCIJYMwIRD6tTRhAktkUQh8jv/Yx/\n A0KdY6/YLUtmqV3tA6UfjQPpqwCmYeRcn0hh0csKAW9fX2Ll3CcGwM+SVpWJ0ofFifTMPIlTFaih0MqqbHRp4nKXo0mj3vVZm\n vDktxROHD8iSaRg7zOBYlnY78ihRGTLeQosmzhBT7HdQGH17Xw4nC1wP1UZQndq4pq8LYuXYvi93b27eJFHuOlW3KRCLxa/pr\n 5UTha4W05KMRUDY/8SI8wAC8AI+T2l6A/6Y/KCcKHxSywtcrAicyIl6AB0lh7vyxjD+qvgA4AXwD/doNDQ2Va3Q3TR6i8BrJU\n UbLN5cdSVpQBaI7aPqclOGfepgUfYBHrfx+TIqTRGZafr9EnRQTiNB+JZH4tUegfHPZRi+lRfoXSFEzf4sU7vAMqe4/+J9icb\n SoNlLhLx80mZ5hClF4f7hJbFSyBAGdzbWkOHDip6Swwz+XFJbkriKFa1f/IfnD+bJ3UhRR+JA8kEYVw3ayys0sw+rVq9eR7ty\n 5q4MU34BvqH/TnKS8Nf7TpgH333/ftcxaFL7GD6DZs7PZmPwhy4pTGNeSbt36t/8gRVNIvwCH0R+gGybvaNS4hLSjo2OQNI43\n IMULdBZipF4djgKXl8UrWOGMV9bzg76oJo3XIs2ZM0cpHuLfxDR4AVTnEy/ApfTbXoAP0F+pQ1tdmeWGnBeRF0w5/s7OE4U2L\n VuMkUPsN0pd4wXRAord9VJghfA+Rmms5+e7E6gsvpVbJNsL8H3ywFlfqik0ODj4Ffoh1wJSXE3J0OL/UGyrAGamjR6Pqy8ITC\n 2qTnV+aii8PkLe9KXwOFH5MxazZ/OZij+8COCsq3GUDufcnlqelIayylxe2sJUMGM+ZIXeYKcwsajG52Fi8SOZ8OihpNBv1TR\n BhbuVfphaVOP3Xk0tUuHVVC/eqBPIwKvDp0O9SThI+HamWbRo0TavaSVe/RBIJtNqWBESvN+nFGrixjDSam2Mz7S+o2PZsZqB\n RUJNffNwSmDAWu8s3sBw0ganCB7ClEBjxrSey7he3zQPfCVKFRHA+vW5ZIfnfAspakiD1KtDBacmgDAc+XGvacIYLz5p0qTfU\n jAc8b7NErDdol6J+vQMD488xwR4ga4kjcVi95OiLbWDVFxtENDn32JQ4cPMMZ1Oq3HxVCp9diUSoK18ayXpw5I2+5b39S27gE\n KZZuq2agoHoPRxhJpWk73wyiJgtmQujcNJUYNb/myEci9UH23y5PZpZIBOpxrVK5dZvdNlFV4LgsU7qmkDwFRTR4cLHV0IoKJ\n Sio0ZytNZcizi2tgMCKDTmutwgsb5DEkmk6ptjrUMR+bGEN9oQABt9oUsZyLRHIqun1lBDa9vYJXaEdb1faRQ/Kn6ntDmQ0CP\n Z0PRF7N02Jl0TfOVEmOSpQqFTtBejDM4OLSOFE2dc0jFNQ0CO1kSTMGrURwo+t1NUzKHgpRU+Pw0qPk/aYVdS4qa//j8OOIPN\n QJq4gY1+SpK2dbW9j3S+fPnv0Xa7M63wmtA9Dhuf/8KtWkXSyzO4j2Ez8zEMdTMGPwHW2naLCokGATUxBBYq40OaKK8amWjho\n vxMVd7SltaYmprHSYKZUlIMM9BuAoCgoAgIAgIAoKAICAICAKCgCAgCAgCgoAgIAgIAoKAICAICAKCgCAgCAgCgoAgIAgIAoK\n AICAICAKCgCAgCAgCgoAgUEcE/h/4WiPpwxa/owAAAABJRU5ErkJggg==`\n);\naxisIconMap.set(\n 'posX', `data:image/png;base64,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\n RK5CYII=`\n);\naxisIconMap.set(\n 'posY', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posZ', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAFO2NT0AAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGagAwAEAAAAAQAAAGYAAAAAoo8/3AAAE29JREFUeAHtPQt4HVWZ58y9\n ucm9N2mTPtK00CJ12fISV6XlUYG2LKBJUyhs9bN+KuBiYakr8mqSFRfETUKpFhV1QbHih/ioFpomUVRarK3V0mUFu0CXLrWUU\n po0aZr0PnNnzv5nkjPfnLnnzJ2ZO/fmpu39vmTO+c//PP+c92MQ8vDDVprW+hixwmi8pTtq4BqBtobYbkLQeSICBmOECgPkIq\n B4TAtdEovQhF8evpw+uN8N07Zy8SAXg4gZ4Xd9N6Fjmf+zoiBDvawUAFACMxOGIyWiaooIKKGQyI6AEmXZxDKCPSnS3An3oVn\n hq2gQIYzjhp/MOTiSKv5PfWUQUZRchFnOpUQMSMPcD1SSpnGINhFH6gFSZ3N3tJHxMYhy2UMJmIo6kRMCJoUSSv3EkOjT+mZg\n OymiNwMjvFz4GlHuIgIKJ4g8LSSiBOdEb6Q4wl8W0ZH0X3XEcytvFhLQjMjKPfOLyqjMGSHMPTMCI2JPBeN/pWHHzoVcG27uj\n oQ4IhpZdyOpONQTT9Cw+cfeBAYzJDGA6NnaEI8hQiKiNB2mKDe3dIbXSdMhQSgIGN8BjNfaEdqlWa2huJygfAVYhZsFGoJkr/\n quwVYrvTB+4YQWIXx6bSR80w9xUi+Aoz4QIsoYUGT2js4OLxHSUuDoi5L9gkspTAnHMwfQc32f1CF277aJJLvqNyeKwsyK66f\n 9Hhxs5LwIlYNl1V1cqinSfeQGlFB7deZUiKsfRn8ZEQTlAGnaD2TEzAqn2WTl09IV/YBhe1t9bBN0axZbkZgQK9wa51pWUyJ7\n xQ1BLE32mrN0p09znUVpsgQxRl4F0lq0qSvyLcaHPaWCGAJ7tjcmlmuq9mMW15/gZJr/HGwsIzmtaW9IXqMR9dcyJcEPBNqOr\n KbQjC8V0ro43oY00mRGzhVmb5YVTyjEq/NHmOOnW7ojI3XSqLQsIfkJGBWDcAyysJJZxOWlHwIoY+jkRKGwd2cJ8UsAYwy1yU\n dZ2MgumRAnjVtYqUXnVf4z48k96csw0rBJRmcUe39C+vYazCYG/04qhCLplsisMLhIAqwyzVVjK61LyWQJD1uwUwGUiYJTiV/\n ZchMkMgGLJn1PkJoNUuB1m5sNlkOYgGhgOqopmyNHNKVw5cQEFwZ3H3/MgH9kys+McK6AYyFQSaI9sZHaPpejrUIV8Eq7FSiK\n P9OzUAe7FUCJHL3CzA/XTP4JqgyeJtLBFpYzu5iA6uBZngRgjNfrJR4CWwkhWbMeu48/bmg4kHnD6LoaQFNAlo3NXZGP6ZZA4\n AoTvhFMa4NG2GOgl9IZFWT7tan3acOZVzwyE5KxltIQQrFgBPA3GCydIaRwCWQCKBknhAJA0NsgyP0rRIlHf2YBFJT1drV0RU\n 4PBvGHGYHbp1UApc+yxMy0rSG+H966WWaYLBwIotNWdUTfEaXbCjETtNbHt0HrPd8Mwwr+fHNn5FEzTBR2LERELILR9klJJW+\n D2n2JTQ3/KlRnHVhRnmjuqNgr4uMFlpcx7fWxH2gI3eRFsIyGVkCy+kFGw+CujFl7HalOpONHGXExnkpZ8IKmjeUj01k5BDoy\n BmbEu2CCuz4Hr8ImY7wfaoz32AmxNaYkjLBqj/FBWg1awTQuNGYsXieRcnYwWqff2xHZbsbJqvzp6LHY5cKskNNwJkO2wZuzy\n 4zPeQYS10HZuNGMkCvM+lG58Jyk08HPP06WTjgJWUDt9xbUfno/wjAm12SBkBMAn++7RZZkCx8mgyimHuJwFkz6Dppcdj4Hcx\n KB+Z5HYL7ni4YxXkd7ToRZcTYcXgAjdGihRn9hZQqqn7qBRT09ad9GN6a9PvElDWkPeuLigmhP7Clk7n1T0qW1W6AzEHDBRYa\n Kt+vd/mIYYi1bZ0U/ji6ovF2mmQc4ma8b44HSMcmvj3wCysZBDl823uGQPEQKZgwdwD3f91lOpasm/whNCL6Hg/kZYca8CkzP\n 9Yux9ZWqCsxCV095yi/2Uj66MTgYuJZk1DekWA4T/nvoa+jN+EYOu1CvFCcEInTMY1TNbfVxDcYfRtyKbBfXyDB6pudKDuX8y\n lvRnOhyDlbIiFE1MyFe2prO3iUopQ0wFtDZU9D1014w4sUIXDIvUrbwfpzJ8oQbg14aXIP2JTp81Ve2LiUTYh6rZxlDidwYJB\n NSDDj0yaAng2EWfuSX1Wum4JFpD/z0KE7pPTDep5cRkyFUSaFnzNpDxXAcKoaoGTaW4ZGMFmuQ0xhGRpdtwJ/GqgqDF+VJPdE\n VmZ1LlmNjzIzooAjGPR8ywwoQ7oUyMc1cJnLJ8GSMlWl7Q3ytRsgdVribOCi9/uK54eW0inVDd8Li+uIZc+60LY4vhZHX9TCn\n S3e2TDCn6WGM0yC0iyC8saUr/GRWeh6AvI35+TIS2BtL/Ajmhz33XeAVe0EJhJes6sBDediSu2qWMW9dmvx7nNJ2Q7VdJsPxA\n seBwDXNmyp+44nWLdFjjSTSryYG/DbCqkdZQJl9z6bwPivcLi7sAcgIoAH9RZ8ah63O/npDJG9Y1d6EJoCOsxz/HJcZWH5Kwf\n KTvqfRMXefECdGI1W3r8fHc7HLaQx9rag3cjEqdHogGDh7VUfFHjs5tq/Z15eRSaVgCDVAzaivQ+N8qSdjttxPgslYvM+OuNh\n p0MvYDpvNpGuSUs/s2BkfLrayTuTBrjm6yCosHkJjoLC/6YTxWOG0NSTSItlZxjzUGLsOaq0zRcilAyPB1obEf1r1yTJGVdEz\n VqSSjBNtBbmfcPqzSUBdX2gUfwoNomPd34TJjP7h3Y7xcyHa7cwW0ba/GKfzvtNZGmcMGPJxluDk2Zd+Bb2V9NSNErJ3awwME\n Ose+xwpW/E41isrw01Qhz8slFDiwL6D8ZeYioZnoA6/mwGdPuleueqgs71yVp4DGb4xV9zvph9hSZCx1KbX199eRiqPxeJ5jS\n WsytrFXzz21azXM685aSXQ0NJZ0a2/ZoPxxFfshPuZ1pPelWVIw9T8KlBM1DVUx5EyQ1BekxFOjVVJEv3h6J0c+oUTmlCFMpm\n DuY1ARXAOpdGNgVpM2D1wyzQX/rM9V3MoU0MfQGeE/dvFMuIZTkRhIht7+PnDAC5Hl9d8wzdhtIevfHMZmeobRwmjHQMtKEP4\n IdF1tb+VYHsDpxPJxUosHpd2qb2x5aneSf0BvZPaxgEbp3ZycT8iUG5mwpIAmuEHMxGPYTKEdgz8G5d0UfUDKKRkT6dxSJ4iZ\n AY1xo8dBULxHT0NHLyu/GJ0evlCDuZXBCYVAwpUZMIdovkKefbwVRyLII6g+dWrOZifEVhyOqSgEPLdmK1H70AqSnG6Xlub+0\n gHR+A2EkAHlVUbIm+7pbPD3w/nLnrTRt9PR10y1fVZDDsRwrSQQp7ztZ1Jav1o12AbJ2x+dTsqUwq/8HbXxsgBX43p6r2OM+S\n 0iitQXbnt7BCHn29ENwZqtCfzZfTM4UUcizJchS6e+CAHK1gEo8OUt25MOcZ8Y+BS6pb+FbAVjl/wWlLb5ZJLHuhYaabUujF3\n dkboWNrTb2/8lzAP8BpHe22tf0NpjrEkwk7U68ZQHFjw+YkEVwqOa4fRy0N8Z/HymkdQEFdIaQqQ0Mt4cl1/tzszrFuxGNN8n\n m5HnKFAZOrdm/ARKtPwDI3AcdoX6XO8/EDfFDOE6swZA4da540XQ3Q9cdiYM6NxY3aGGQHn9O5zugHV7SvBZPjxhDK+rbkLcy\n dGuDLDhMBxpjjMtIdZvBSfoj003GvGlIZtHhEWLsWnEo1Ui/QSGkMR6aY0EcFYw2D49dGm9fiYSA+pMfQkXEDBF4mIxgym4Lu\n auyukYwlhmTEr296YOk9TM/5N9ZuZuwgrWPlUU1f4KTuSnMZQYv0EeiquN0x2zAqVBh3hC5u7ov+Vi78jYxgTWL85ABOGwiNS\n DMfXJ2wagk1z5U55SsuMiAE0qjOLVY5gS/FNbgyh+rryjNnA9sWx2zUNPWqG+RGGxnAtNA38hLRDxp6NYfxXN6Y/qKrDv4LFw\n 1oGc//ESRRQlrVsqshrdjBvY8yKr64ndSqOPwAw2DyHppjTuDDcbQfxjlAw8ODdG8tdbfbh+Fgivhpj4V3QKJ0jP55J1eC0Wg\n WnGqoIxpWKplViBdZNiAILZzCdSgJDqFwdOjMQPvSx9VgtqEI+My85x+grksnUAqxpi6AVWIgJfn/hlo/wAdizvhljZXMIkef\n zmT3w2S/eK2Y/FFlTnzgjg8lKWOf+JPDjhll+8PfKAxqHBNA+C8eLvtO0Kcyvxnhl6pKuqCVmTWPq7GFVvR+WT5fBTiNXXQ+X\n dvmOTidHoGQ90NRVUZTZwII7hm730jT8DRiCF3Sp0XdP2DCkJQqq2NbZ0YrV0HalbVA9JxXEMW2NsblEwz8r/f13nvPNINSdh\n PEXmjrD3zOAPgR8cwzdZ/unnfEnoN/8aR/0Gp8sMNodCKBrZHcIuTEqb8fQ/R2peKITqqpL3Ag+kXFhsuIIbEZoWNUZ2enVTs\n +O0Y+caInfnXKIPOvBQUexErysaVP5/8ixxCmeHANHNZ88qasscV7KoRi/XhEJz79zPe6XI/Eprhwz2qhvG6ujQLzq4y8GHYU\n mmDx7yInmjh1DD5nBCPwGJ0xP4chzAMZDbyMcvsC61GelyOmY0bbktRNpHGLNhKLHMdYCGF1i1zmwHX3Tkbp+pvQEGhwW3Qki\n gTDroWrkz3D09F9EyRQmLTH0tDJKa68VcupEdKRBpmix4V6uivOio6KglU2d0W9baYUlhk4u0iPkhXSKVZGTNU5X6OA4481W+\n 7McQy8nSCNtBzT0vp7rtwou9biS/emjgqlMiPYEXXE0C8iqyuBG4R/nc2OEmXmphVWSQi/0r0TW421WPT844R50Ztj4DJY1uS\n BxcETPxfMip7HLXLjdZa2NycVIVZcXRPIYM30j/nP0ypD9uv6U0PvQZXAcyfM5xDxspGvzO3YmHgEWKykbrsRAL+EvsL79/jz\n 4lxxpTH0HbYZN1mlNuIVL11fBZeiKmkfRpLJzxlz/IIpMv7cbv2uUGHprD9HICeWUPw18GR1MvWCb2e+NXI/+oaoopzht9WCJ\n oxtAVhiOoVcpscTx/nw3tQP9caAJTIIKQvKj36a5cvL3Ubki3NkpoSoKmPphhVGVwSZ5WtYLcSCvKNZQIcNaDG3pvxUNqfttZ\n c6beB+aWcGffrMlKHaigi/VS4w+mEyp49oprx5fh16LrbPNwtrQhejDNWugYc0aJdjSFT1RQ3N1x+BhMkNe6IuuliuBg5l9UE\n pugzPSdN+d+BeAczsLJ30XTQy+V4xQYlBYx5kx4hhC6sabY2j7sf3ovehw+s+22ToHPjV3ftUKW5zSSyR1I47BuBemX0pPP4l\n GB5LPo53HHpCkjoArA6ejRZMfR2W40havFBNhaaBXd0wgoBxSYdKm1H/0JuvN/Z9DcfVdW1Uvqf4PNKP8MlucUk7UMDqkO2ZW\n KLRnb0ZNl/LK5MtD30R747+wzc/p5fPRpdX8YXBbghJNxER5xeguw7m4DbAYtrTUdD06/Dr6/dGVSCXyfXVBHEWLJj2GqoInw\n J5COD3Q3Bmu1EsMdQa9hxf+l4xjNJJBW49+AfUN/9X2XTm38rPwKfnP2OKMs8QO2BvAX8IEM8tvgXNmjrUh+xKb0EuDD9uqMT\n E4Gy2ALnAQl/ThV1sbRImhsuB59JyNUWIokqLgL2kaeVJEUAxYQjuCNsM3npKa/OJU6LGg+TUPo2mhecVQqbgyMP4pO/xktDF\n MA2hrtkBbs4DFi/XcdawN7U/aXz8zs+JKNG/ivxdLpSLLwUklGq5jJ5m5EkM1odeia2riMDinKHVED9wNtH3gLvgguvzAV0iZ\n iK6EjzBHAnVFzqwiioOzjswpVGpWiaHA1Q2JyzJE20rDhfpl4EQe7W0NDP+vrYia4DloVnjsJhzrQhfBt5QL3Oxi1NrSFeUu9\n hE6huZUW2PyaqKqz9nmWh6JhfhiUB7qSEndfoVIykiSAD0w4dFm6TQr/SACfI5vsYTfKbAPOQBOeVR23lzqGCqXHmujH3gABv\n RM4qmfjzlAbzIAp3xexlJalZkJYEtTaG888TJM2Zxthp8Ke8gBuCOjDAU+dE9X+W47akeOYQzaFydu0TTtcRY/9XSZAxhvgPs\n +HG3Md+UYqoZ+Dj8e3wFzOOe7VOukRYdBcQxhcoWTK3FYJrl2DCN8aElyjqaq22yv82DIJ+kTHAIXduBP57psSZQ9nh3DmNGv\n 1sBqIpzBRDUMdrI/qUPgFoO7WzojX/eaF3k7hgmmX+GBebbnTuYOgl5lIeWf7O5VY/mV6+mbY5ggmMrB0Em4F0rQV2GmOmvKh\n +GdUE9o1JVI+GbzlEq+9vnuGLNCbQ2khqAkLCmSW6Ak2Y6ZzHTjIQxtx7YgCtyWq9vr1ZaCOsasFP1gEnxn6FaA3QeladzNRk\n I1lYKZRbj9IvzlXOcnzXZ7DRfNMVYF6beT+g8mP0WQ9sUS7Xr3UkeElMha803CVjsKFR8zx4gMotee7NiVuhppWj2sri6CklX\n 47ff63e14C9wM/hslXLHBz3ZCZKNTWEk5xonS9IqUZCIxR0H4LOgFVkNdXwVtGPwh+qTfRkjBagbc7oeHiEKGIH0QafhvoaC2\n 585nw29DfFxsoPt/xVRTYe71KyQAAAAASUVORK5CYII=`\n);\naxisIconMap.set(\n 'negX', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmCAYAAAFKLQTJAAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGSgAwAEAAAAAQAAAGYAAAAAdrOvGwAAFQlJREFUeAHtXQuQXFWZPufc\n 7nEmT8Agj4INBOZBpXZlTdx1A7VA5LFMpicJbuQRXB5qMLggYkG5taJZQKVgRVxZeVgVoJSUGCVJ98xoDAmCEFclSm1VypkMJ\n LI8IhjekEnSfe/Z77895/a5957uPv2Y6Z5kbtXMef3n/8///+d9/nOasSo+rucZ7E8tZq5cr8cpf1dvXwAbeAbTPTIPwD+uAA\n uu3Ex+lVFQYDCTeoVcxkwZCvEKsU8pHyiWwcc2+k9u5jx5qk9Jjy7l51z2S5l9VgxlUn8sBainSSnupLAA96/qCTZ+0ZXKnGk\n DmIfJSzHgCRL5gE1mErufqXP6/KRkcqB0pjwVgvEz8bNW5RjnP2WMEgqJBMCl9yEVp5Qb1AgCoE8pMB/K/3cYP7O9N/OEHleR\n P0TFRIGwqSKRP8hQAA5XI+Gxdk/Ie1VGPwMBQ7FPcMZvpgTzJzc7iZkzeTHM0UwOZwlXyo2jigwXIwpMYVeyHLmjGchr91WXI\n cHlcXb4USTOxYqcZA+Vy4B6t4ZgArHmM5RiXm4Oam5Bk+EKmEeSr5hO4sTWgEI+gbGhdOoXIH2OCiu3gFCrGiox6j7fv7Qj62\n aHovF6WEeoxyt/UP9UBLmFGqPFcrbTcdh1bo6/T7Foul1MyrtRD0M4OOfPd6YyJ2s5wwAh5JztYJKv1IHL+wuy5py905nqm0l\n 5glKECBTtxcuTyUMUiJEoQ9UEnO9FRMoWVWm4AiGxI5O6VgHXjwBhLNRr9CvyG4rIWLnCSfK/HwvkkEowxoR0kidWYLM24nmd\n QOv7fCKEbMxrlyoxJiKr0cCuUGFdeYU4s08w7x88xm9VqXovEHCiEsl9oe+Sw0e8d97Q42z9OnKVx0hEJeou5jQDUsrz9Tj03\n l/v6sl8JRTXqEBZTgbTqV2YbJxQtIBc3NqVSt9UNB0JRYmEa1spFKNpnL3Qleo7wQQZIzKcSX0EA/62KDC68NvQrW9S8cj4eQ\n xWF6iwcssqfjDTezuT3g0qA/jchu7+xiBc1FPoDAkkSijgZHhgyUluLvdcAU9lLV867GjuyodVfp1QMEmphQAh5i77M7qQsxU\n RXac+ET2iklauECpXSi7Rdu5S4R39qR7yB5yMJrysAKp2PZZReT1X+n6BKY0/k8on8H9RALW4mN926/mxmpEX6xH18GMivV/h\n Gcr09AfiAvUnVUI9XbSt7oAI2sfqeiLXcRWIiMRf9IR6+gtEuDe/noh1XAERyG7MxoWACIbdpE69Xn4hnHMErcnqhVDhQfcSt\n PqOng2Pifbuh99RiWolXAhX58Mw/dd6Tl9coHxREMnlLYG/Kk+h21c9sU8EU/xHAnySLcCOSNCbBvFWHvkLBYbG/XTBr3xw9d\n 4YI+HbqHGxkU8Dj3gLHFCC4oL8waBFAfp0QhQWnK32JA8GI4oLf/InCB+ux+kEKD5GhCKjhCjO6uMsjcnE4iiskYgCqoRYtPQ\n KB7kliSjAwYHUQp5jmzAsBI0XNXJny7RZc08868F9Cq6Ya0WkWOZovHxmRXJ49+6VGE960eYWouLE8KNwL2HXKi0FX9PVnQ5q\n YBRXpeEYIVsEGPCuR0G/ZQtvBcf57sNaDms/+rwf+FsFVnlGgSpiBFOOvVB9WyUEaoIV4uqunvQ9NjjKMrKjr3eF53n3lUKGq\n rQdlejfuMxvupSCjaZhLtiNCeGXovF6GJ2g19mbcfS4qL8oI0N9vZdJz3swmkGFk0L2ZD0xosL1crHzdK30ZKxbIvxoXxKjRd\n AZ6DSNjBTrrgTjmzzGbtMRjJVfONzxXC8YmnQ6YOhuMHRNKE4PDGWWfphOB/Q48mOMfAmHAJdF48cjjGo7BYoI1giKJqqbi+q\n WKIRHfeiFPo5e6DGVoFxI5hLPrfwAQ+Wvn+ufTgRbTgqvGsD8+iblMsfMhDi3OZigYvNuTGpeVQwodzDTs9tPpX+mNoF6+CWs\n L2PVTCFonBuecVE5HM7niV0/W3KCqVDNyQTmC4z/c7S8tDkjDmTd+6MJ0MY3o3HNEkY3+6apLOhRZWwvGPPdrSbgZo4T2MJ6L\n VpAwZzQxDya3oxhaITH9h5wpndpMxa2VJn8kd3Ua6G7M5z6l0I1PmkYLz6D85fQVha65d/44whGyS3RYmCWq22uRVMbF44yQS\n XB6d/HfEYw1MekD1UdhY7g9sYV2UQ5PoZw7iwiSJ8R8qihnvzBJ9k89Nwbg3CDPJjrnWLa5RFcXNeZ2uAbVsRmvzi3wLanbDG\n U+b/QbjYY4sc4Kq4FItiSFF1zzk8PKeIxRigBi6lFWEz1KSDdxb7KTzDOWK3a9HyV+JNCiKznBkcmet5iaxIjIyojlrZPodGf\n psIxl7N7MQ6tjcVXETFq+LEeWYsupafOapty/IK1xsVcSUZUeWw3GmhJKjlby5l4RErvbZU/5gr2UezTXomJU0csLRrBeRYmT\n aaqHoK0YkTPMdiXupd58io9rt5+EkirmD5rds8a47zKRK9iRqJIyALBk/I70fjKwvwZJ9Ha3d69dswOHyorTwOha9aIXvbBgd\n 7T0EouQf3vxYrzOD2N/NTj4P8WEE23H3PMPXz+/dkoTLXhmhnBofAtOPSq4RSH/ynpJM47adG6HdUyQfmqYuTPGz819a0Dbw1\n D8sfUQjyal5bX2ObxTTajaeXCFTOCxf6fUEFml0NcU7rDl3QtylQ0i7BmZLCvdyXzvO/VVMAKMqMLHsFkdoptFitGYPnyHI7U\n TiqH1G/Mkq/DVHSz9NhgFN5JyKmeyxdgtvBJaHVONN0Uph2S9lTm96Y0Pa4sI5imwAq0cPiiZ1Z+bF5/CyO6PwtVcTYuNq+ng\n qFvohBzS8Fj6nVVR086tkmi5ynJiHnlWMguPP45T7DhQkwNPlr7+MuGIji4uAPWQkVNZIoygvkVBmxzr8YF34Cqg2l9fb+k8N\n qyHjfOuokSF+Lyzp70QyaqRkbABJ23zjBlkA5fTqY0prS6xXF5D7RjnFA6icTJ7d3rn4/SClaIKgFMfLcYE8IR5445E1QQGNX\n SEYYqk+6G7ZkKKSGNDA8sn+Hm3jZOv9Ejne3bGhXyjrkPncxXUcAzYoRw1oip/bF6fEgjXs5s1YimkhpvJqiQGEtuprMZvcC+\n HzMKOsvR4wNGyJILEoif08HaC1LZq2caT3+xA6bogVTAiLIWixRyP9MsyiJp4xakwyYTMbTnYBvLZySqJpUJoyoO/hv/jR42v\n RwtCTql4ITNZ0Sy7M+jQHQ6pC52RNMaEUaPeYWJLp22UXy+akl2dAxIMmPGGNw4RaDqQ6481lZ3ZPb9gIogyBzXVBYs5bBR11\n yf4DJm0IwO6mIqJd0suCVaXHR5/dG4ZgiXOg4UaDAh81MqsCfFA81QcNsy0Dlo0P3qmTBuWO8n6fnGw49B8skonWzO7TUyEgV\n sqjCXMRsvmJUsmniMeDLYgVcCRg36qwnHiMfF64qBgiuPnXCM4HAHNSn8YahwJhwjWKt8MMyGH3pl4jHCc3PijPCJxwjGvQVR\n RtAlq5vB4ST0AjG7qDBEA0OcnxWlLpIyjevB/DfRBDDyqWhc04QNNxLa/ymzne45x3bSTYfyzcBIqQvcgq4tNEMhbcqQlSxmw\n ID24Vtt+L0WdkhitueIC+5o2BAZDxhU+aOidERixlKKG+1+nU9EAaL3QKLp4x4uYk6i7sD4jCgziGjhsGhZE41rRNjvRQ37wv\n SOgSrPqEagGth1qEjlkirzdiAqpjEuBJo2Ue5Mpb+v4gNGOlJp4xEzBqC7FXBD3PxNpsBQWZUBbfgi5Sc3YIQCZKhCbvwzG7b\n E4eodAxt5w0iOPcgDoRtVIBtihKxt0J3FFi754hWuUNW7uCZ8qNJ01etaU1rn9HlTo/FoBvGv1NlIEnfysjAdiueqXwx2S1Z6\n ksXse4kCTq96cHoV2xwJaUQVpdjVBkon8yO6969g6+2i7j9ajAlYHDxgYoLKYGSEEsikiFzTl3+8QPaRaZIpvao4LpeRlRzGr\n 5mm/FTlcZRwpSmN4oxVSwEPD1zzATe3Kzbqq/RR900u5dWSi9ci8VZBVKPl0EDRAvpI8CQSmDBWNUWkJCMKCM9PHLC6B0tPuJ\n Adscd+p/JGXQxiMyXzLsSVpGUYH4rWCJUPVc3KGsKKEUIKi4cN6ArHdXe+Tcw4wtZmy5oRYobe6tjnvbvHRpIEX/Un+H14huN\n zleSviBGFeDidOsNl8pcqXC8XDXoTzDbOrQZfVYwoQsMDy450c/tg8SDnq7hqXKzuvtCRytR0bl8TI3qhdz1+eev+91//Cnqw\n izE/m6On6X5IHb0324jTyv/s6s74iyI9vVp/3RiptgCV5pOPr8KrC9tbR95PJrMHRpIt09xELptIEp5EMpc98J6TS7a0ZdumZ\n rNHsrn7/BftKiXSQPimUQgGdL5zYPG8rMcW4oAGf+x09PaxuWFdZMUZ3Wl+CvOaLUnBtszp3rANm0nYeG381xCF0MRHei9cBi\n Vcib/YDa9GioV2+fC3movZD7V3f3f/eJdlXBTySiY15T3JvggTu+uggFnjzWQt9KCcPWg7d03j7NvHpjKxs/FacJvyjplCBje\n mTuQHGOy+5CIT4YkaBwX144rQNV3nZXaNBQ91VQjZrMHc6/uYGH9yLAqr4XwTU7M3YG85Agb2Yu/AvxeDdU0bBoIpSGtD2hGA\n P1zLU3cvZlo/xm7tZ9VGZz0I1EUhuI11Ae7urME0sR5HQwfA2FbYsD6JpeOzJe8EVSEBWptixnoqXpT4R2Snc6+WKtCEsmD9u\n h94L8GWyKOhhCoCNSkEhvI3wVD+5iroBlmE8I/KHsYW2fYgsgEeIXwz8OWeV+MkQ4iv4hGXmIWSLUtVKWRHpucGbN3ETo3siP\n I9WFCRYfIv7eAbBMXZmSjjSqx6q5qE4J7mjR2pvjsqLX1FChnKLO6WzKXdoIo2FtHXvoetzDtgRo+5/8T78GjO6diiuwFj47S\n KSs9ZjjNncbHzMxMuK4XI7ctahnaObIUicIfa/gPy3zLu/AfGgXKbrfZIGwiJcaKVSfdrmDj8XUXFwFuqnXPaFvC5a2l8LPmV\n VQhaxVIp3coGKy7S2CA2nt+VLM1ESsQGHO4qVrRvjJcDLkBrWVeKzZIKwWb1XWgVXyiFQE/D/ao/YHD8cjNZbevlq7efzoQwG\n bkN98P+1ho3Z9/BU4axU3OVv6hCoIynoYyYOZTKqLuY9qEpin/FIjB2S0iHO1j9WCyehP03+kkAuyk0Z1uhlNNM8sBaKv7htu\n GvbZWB3L/GvuD5h6oySHrEO8mAZEHhsh8qui9jA2CsheCAcAsonGWAjUdJthqHhA/HEw7hGCmXY1p/pZUEOH8cp7oLddhQCxn\n qS91pqwzMs2+fVIYuylE/KqgvG0NSLAoVfyjTG3o2NWghaELnY56N4z+rD8d7jXhtx6psTQLkP/Z5rU1hsE7rxpnvzwjWbyFS\n rhKYKVh2Pfznk8qwEvMGyAmyKv+R7EkHBOn/G85sux6DeNmdUWiSrGQq3g4oX6SDFuKOUZmVZhCy93UAKNxwW0W3SL5WOkc+V\n XJ+vw3cJExBArYyIx2QLsRz/X84BxO38ns0nP8fBvzHC6QmfVYSIJmR7Mp+chrpAq3DbvmPxd+TZXFOAhSRgPxVkYRQNOkCr6\n /i4Tebz5WxKz422SZhMLR77H+s5ABdYFCXx9oAoy+syuzVBvfBDmMvO7rJKvnRNgIRwnvDBm4SJi4Ba9lBF7T++EschSHGSxo\n t0w2Qk1FRCVjKjnQBQ3q+O5rfGPbcqo4yjbgOtUhL2ZEu8FQV+18b+eDugN3gb4PsEIOxlh10ARMmnraSD5dWZyNWuA41IEvZ\n kS5w5XN2P5b3bjkZ4fDlFPRvFZ2pl8N5KKSTzEh25XglHZAu8BN7MCgucvU4igTL+89E4ybDpSXgcUuZQQekC39zccoH22DYB\n Uvcch8eeYRJzBXlwCbT8xLwZeWZH8YMy4gfyOtgdLfXfzNesKvDQOYQTDAvhX1VZWYwZlQHdSzJiGRlxSRkr97tDw6oKCOeH/\n 4RzocvtEHiMP5FDDxWMzQbfAcTjMPY3+Dy4rdteMJA/gh+HeUiBet3WSrQ0dO6HJuIO1W4lOsTtJw9lMJz0KVBJvbKYDtJ5ro\n MQgrhfK3bMaftFCjlZR2oqF8yjD3y00XTD7kEyMKXSXnGIeOX8rJeG5rhhroshebFrcva3t+z7znbjUc0u1fxhvcKl8v3FI5D\n yXUkn+YJeT+6+6Ps+OavTJ3VerIaN/Q8RoUoALyzsQlz6LNVuLzLfwiYB8rDHVQQmHVaDt5gGy3jMTz7gUNB8xfqsqIglBFLe\n XRLtp+8FBrehOneGbY5Jioc8Ui8VqQMwW8upQySRckWooQ1PHDBcW6OfrVVmt4+VGAhFzUBjYvdV6+ffQohb2QA77JAaFeBOS\n vZ5YvKX3cSyVPbux99qVzRK0CKl0L6Urfijd9/L4c0mg7F4DE+dgvMLe22+qMIGhzGFfYjcUHpJghrbsVFEfzreCgk9g5hMTw\n VKYSQ0EsKO97dtg5GdT3FkJaKh3KewL7N9wCzpxRcE6TNAo9XQ0BVdb/gsa9j+ryllb4kUbFClKD8X4lw31lva3qq8ukuujVq\n MY84QvTnXFl+60bPXGd/wuEtructAtoL0R0dWTV62Os6zowl1d7MrVohqsBkSzTU9/v/xuWVit7vUfl1l8YdjDnP4uRsk+OJp\n 8dqGk3TVFd4p+FA6BxsrJ5a2Xigl1jzc3FvZ89HPs/5KuzBVv/VrBCd9PBA6mOuK38Esc7W4+vm5+xdCPFFKOxFnD2/AWGOSE\n +MYMazl2hg/2gKHo9ug1LbPC6PAOzxgD0e5ZletzLoiDh7wXH4Re3dGTurEj1vEX9dFaLTwE+tXI7Ntdtrav46wibxUzeLO/Q\n 3dizKPDgWRRozheiFhWX9RzFJvBMr2dP1+Inix07EU2hl18NC/XdjXeZxUUiUiaHMEmzf576MGVcKjCai6Q0N+1eZWQavb93W\n mVr/2/EuS0MUYmJyR9/SU5jMfgLPtC3E2L4AXV09nukwkfLj0PXsx9puKwzTtjCe/GlHz7o/FgUex4SmUUg5np95ZkVy5mt7j\n hK57DGu5Id5Dn6o2ZOt6M/buMRAjg+PimKQlyN4HHqfcNmIw+VbXiK5++0PzXp1fh1//7VcWWtJ/3+2rdRgE9SSwwAAAABJRU\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negY', `data:image/png;base64,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\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negZ', `data:image/png;base64,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`\n);\n","import { Texture, noop } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\n\ntype Vector3 = math.Vector3;\n\n/**\n * 下载图片\n * @param imageUrl - 图片url\n * @returns 图片对象\n */\nexport async function createImage (imageUrl: string): Promise<HTMLImageElement> {\n const image = new Image();\n\n image.src = imageUrl;\n\n return new Promise<HTMLImageElement>((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n image.onerror = reject;\n });\n}\n\n/**\n * 创建 Texture 对象\n * @param engine - engine 对象\n * @param image - 图片对象\n * @returns 纹理\n */\nexport function createTexture (engine: Engine, image: HTMLImageElement, hookDestroy?: boolean): Texture {\n\n const texture = Texture.create(engine, { image });\n\n if (hookDestroy) {\n texture.dispose = noop;\n }\n\n return texture;\n}\n\n/**\n * 移动到距离目标点指定距离的位置\n * @param targetPos - 目标点\n * @param currentPos - 当前点\n * @returns 指定点\n */\nexport function moveToPointWidthFixDistance (targetPos: Vector3, currentPos: Vector3): Vector3 {\n const vecCameraItem = currentPos.clone().subtract(targetPos);\n\n const normalVecCameraItem = vecCameraItem.clone().normalize();\n const scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);\n\n const vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);\n const vecItemScaler = vecScalerItem.clone().multiply(-1);\n\n return currentPos.clone().add(vecItemScaler);\n}\n","/**\n * 基础几何数据[抽象类,不可以直接用来初始化]\n */\nexport abstract class GeometryData {\n points: number[] = [];\n uvs: number[] = [];\n normals: number[] = [];\n indices: number[] = [];\n\n /**\n * 构件 XY 平面圆(圆心为(0, 0, z))\n * @param radius - 圆半径\n * @param z - z 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXYPlaneCircle (\n radius: number,\n z: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 XZ 平面圆(圆心为(0, y, 0))\n * @param radius - 圆半径\n * @param y - y 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXZPlaneCircle (\n radius: number,\n y: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const z = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 YZ 平面圆(圆心为(x, 0, 0))\n * @param radius - 圆半径\n * @param x - x 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createYZPlaneCircle (\n radius: number,\n x: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const z = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class SphereGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param widthSegments\n * @param heightSegments\n * @param phiStart\n * @param phiLength\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n widthSegments = 8,\n heightSegments = 6,\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI,\n ) {\n super();\n\n // 限制至少需要分为六块以保持形状\n widthSegments = Math.max(3, Math.floor(widthSegments));\n heightSegments = Math.max(2, Math.floor(heightSegments));\n\n const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI);\n const grid = [];\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow = [];\n const v = iy / heightSegments;\n\n let uOffset = 0;\n\n if (iy == 0 && thetaStart == 0) {\n uOffset = 0.5 / widthSegments;\n } else if (iy == heightSegments && thetaEnd == Math.PI) {\n uOffset = - 0.5 / widthSegments;\n }\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n\n // point\n const x = - radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n const y = radius * Math.cos(thetaStart + v * thetaLength);\n const z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\n this.points.push(x, y, z);\n\n // normal\n const normal = new Vector3(x, y, z).normalize();\n\n this.normals.push(...normal.toArray());\n\n // uv\n this.uvs.push(u + uOffset, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n // indices\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || thetaStart > 0) { this.indices.push(a, b, d); }\n if (iy !== heightSegments - 1 || thetaEnd < Math.PI) { this.indices.push(b, c, d); }\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\n// 面造型未单独抽离, 整个包围盒只接受一个材质\nexport class BoxGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param depth\n */\n constructor (width = 1, height = 1, depth = 1) {\n super();\n\n let numberOfVertices = 0;\n\n buildPlane(2, 1, 0, - 1, - 1, depth, height, width, this.points, this.uvs, this.normals, this.indices); // px\n buildPlane(2, 1, 0, 1, - 1, depth, height, - width, this.points, this.uvs, this.normals, this.indices); // nx\n buildPlane(0, 2, 1, 1, 1, width, depth, height, this.points, this.uvs, this.normals, this.indices); // py\n buildPlane(0, 2, 1, 1, - 1, width, depth, - height, this.points, this.uvs, this.normals, this.indices); // ny\n buildPlane(0, 1, 2, 1, - 1, width, height, depth, this.points, this.uvs, this.normals, this.indices); // pz\n buildPlane(0, 1, 2, - 1, - 1, width, height, - depth, this.points, this.uvs, this.normals, this.indices); // nz\n\n function buildPlane (u: number, v: number, w: number, uDir: number,\n vDir: number, width: number, height: number, depth: number,\n points: number[], uvs: number[], normals: number[], indices: number[]) {\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n const point: spec.vec3 = [0, 0, 0];\n let vertexCounter = 0;\n\n for (let iy = 0; iy < 2; iy++) {\n const y = iy * height - heightHalf;\n\n for (let ix = 0; ix < 2; ix++) {\n const x = ix * width - widthHalf;\n\n point[u] = x * uDir;\n point[v] = y * vDir;\n point[w] = depthHalf;\n\n points.push(...point);\n\n point[u] = 0;\n point[v] = 0;\n point[w] = depth > 0 ? 1 : - 1;\n\n normals.push(...point);\n\n uvs.push(ix);\n uvs.push(1 - iy);\n\n vertexCounter += 1;\n }\n }\n\n for (let iy = 0; iy < 1; iy++) {\n for (let ix = 0; ix < 1; ix++) {\n const a = numberOfVertices + ix + 2 * iy;\n const b = numberOfVertices + ix + 2 * (iy + 1);\n const c = numberOfVertices + (ix + 1) + 2 * (iy + 1);\n const d = numberOfVertices + (ix + 1) + 2 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n numberOfVertices += vertexCounter;\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class CylinderGeometryData extends GeometryData {\n /**\n *\n * @param radiusTop\n * @param radiusBottom\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radiusTop = 1,\n radiusBottom = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n radialSegments = Math.floor(radialSegments);\n heightSegments = Math.floor(heightSegments);\n\n let index = 0;\n const indexArray: number[][] = [];\n const halfHeight = height / 2;\n\n generateTorso(this.points, this.uvs, this.normals, this.indices);\n\n if (openEnded === false) {\n if (radiusTop > 0) { generateCap(true, this.points, this.uvs, this.normals, this.indices); }\n if (radiusBottom > 0) { generateCap(false, this.points, this.uvs, this.normals, this.indices); }\n }\n\n function generateTorso (points: number[], uvs: number[], normals: number[], indices: number[]) {\n // this will be used to calculate the normal\n const slope = (radiusBottom - radiusTop) / height;\n\n for (let y = 0; y <= heightSegments; y++) {\n const indexRow = [];\n const v = y / heightSegments;\n\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n\n for (let x = 0; x <= radialSegments; x++) {\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n const px = radius * sinTheta;\n const py = - v * height + halfHeight;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n const normal = new Vector3(sinTheta, slope, cosTheta).normalize();\n\n normals.push(...normal.toArray());\n\n uvs.push(u, 1 - v);\n\n indexRow.push(index++);\n }\n indexArray.push(indexRow);\n }\n\n for (let x = 0; x < radialSegments; x++) {\n for (let y = 0; y < heightSegments; y++) {\n const a = indexArray[y][x];\n const b = indexArray[y + 1][x];\n const c = indexArray[y + 1][x + 1];\n const d = indexArray[y][x + 1];\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n }\n\n function generateCap (top: boolean, points: number[], uvs: number[], normals: number[], indices: number[]) {\n const centerIndexStart = index;\n\n const radius = (top === true) ? radiusTop : radiusBottom;\n const sign = (top === true) ? 1 : - 1;\n\n for (let x = 1; x <= radialSegments; x++) {\n points.push(0, halfHeight * sign, 0);\n normals.push(0, sign, 0);\n uvs.push(0.5, 0.5);\n\n index++;\n }\n\n const centerIndexEnd = index;\n\n for (let x = 0; x <= radialSegments; x++) {\n\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n const px = radius * sinTheta;\n const py = halfHeight * sign;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n normals.push(0, sign, 0);\n\n const uvU = (cosTheta * 0.5) + 0.5;\n const uvV = (sinTheta * 0.5 * sign) + 0.5;\n\n uvs.push(uvU, uvV);\n\n index++;\n }\n\n for (let x = 0; x < radialSegments; x++) {\n const c = centerIndexStart + x;\n const i = centerIndexEnd + x;\n\n if (top === true) {\n indices.push(i, i + 1, c);\n } else {\n indices.push(i + 1, i, c);\n }\n }\n }\n }\n}\n","import { CylinderGeometryData } from './cylinder';\n\n/**\n *\n */\nexport class ConeGeometryData extends CylinderGeometryData {\n /**\n *\n * @param radius\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength);\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class TorusGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param tube\n * @param radialSegments\n * @param tubularSegments\n * @param arc\n */\n constructor (\n radius = 1,\n tube = 0.4,\n radialSegments = 64,\n tubularSegments = 64,\n arc = Math.PI * 2,\n ) {\n super();\n\n radialSegments = Math.floor(radialSegments);\n tubularSegments = Math.floor(tubularSegments);\n\n for (let j = 0; j <= radialSegments; j++) {\n for (let i = 0; i <= tubularSegments; i++) {\n\n const u = i / tubularSegments * arc;\n const v = j / radialSegments * Math.PI * 2;\n\n const px = (radius + tube * Math.cos(v)) * Math.cos(u);\n const py = (radius + tube * Math.cos(v)) * Math.sin(u);\n const pz = tube * Math.sin(v);\n\n this.points.push(px, py, pz);\n\n const cx = radius * Math.cos(u);\n const cy = radius * Math.sin(u);\n const p = new Vector3(px, py, pz);\n const c = new Vector3(cx, cy, 0);\n const normal = p.subtract(c).normalize();\n\n this.normals.push(...normal.toArray());\n\n this.uvs.push(i / tubularSegments);\n this.uvs.push(j / radialSegments);\n }\n }\n\n for (let j = 1; j <= radialSegments; j++) {\n for (let i = 1; i <= tubularSegments; i++) {\n const a = (tubularSegments + 1) * j + i - 1;\n const b = (tubularSegments + 1) * (j - 1) + i - 1;\n const c = (tubularSegments + 1) * (j - 1) + i;\n const d = (tubularSegments + 1) * j + i;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n *\n */\nexport class PlaneGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param widthSegments\n * @param heightSegments\n */\n constructor (\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n ) {\n super();\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n\n this.points.push(x, - y, 0);\n this.normals.push(0, 0, 1);\n this.uvs.push(ix / gridX);\n this.uvs.push(1 - (iy / gridY));\n }\n }\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = (ix + 1) + gridX1 * (iy + 1);\n const d = (ix + 1) + gridX1 * iy;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Euler, Vector3, Matrix4 } = math;\n\n/**\n *\n */\nexport class FrustumGeometryData extends GeometryData {\n /**\n *\n * @param position\n * @param rotation\n * @param fov\n * @param aspect\n * @param near\n * @param far\n */\n constructor (\n position: spec.vec3,\n rotation: spec.vec3,\n fov: number,\n aspect: number,\n near: number,\n far: number,\n ) {\n super();\n\n const fovY = fov / 180 * Math.PI;\n const ratio = aspect;\n const halfY = far * Math.tan(fovY / 2);\n const halfX = halfY * ratio;\n const point1 = new Vector3(halfX, halfY, far);\n const point2 = new Vector3(-halfX, halfY, far);\n const point3 = new Vector3(-halfX, -halfY, far);\n const point4 = new Vector3(halfX, -halfY, far);\n const matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4());\n const result1 = matrix.transformPoint(point1).add(position);\n const result2 = matrix.transformPoint(point2).add(position);\n const result3 = matrix.transformPoint(point3).add(position);\n const result4 = matrix.transformPoint(point4).add(position);\n\n this.points.push(\n ...position,\n ...result1.toArray(), ...result2.toArray(),\n ...result3.toArray(), ...result4.toArray()\n );\n this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 方向光造型数据\n * lines\n */\nexport class DirectionLightData extends GeometryData {\n /**\n * 构造函数\n * @param radius - 圆半径\n * @param length - 光线长度\n * @param segments - 圆精度\n * @param linesNumber - 光线数量\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n radius = 1,\n length = 2,\n segments = 64,\n linesNumber = 8,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n this.createXYPlaneCircle(radius, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n const start = segments % linesNumber / 2;\n const step = segments / linesNumber;\n\n for (let i = 0; i < linesNumber; i++) {\n const index = start + i * step;\n const x = this.points[3 * index];\n const y = this.points[3 * index + 1];\n const z = -length;\n\n this.points.push(x, y, z);\n this.indices.push(index, segments + i);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 点光源造型数据\n * lines\n */\nexport class PointLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光照范围\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n this.createXYPlaneCircle(range, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.createXZPlaneCircle(range, 0, segments, thetaStart, thetaLength, segments, this.points, this.indices);\n this.createYZPlaneCircle(range, 0, segments, thetaStart, thetaLength, 2 * segments, this.points, this.indices);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 聚光灯造型数据\n * lines\n */\nexport class SpotLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光线范围\n * @param spotAngle - 光线范围[角度]\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n spotAngle = 30,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n const angle = spotAngle / 2 / 180 * Math.PI;\n const radius = range * Math.tan(angle);\n\n this.createXYPlaneCircle(radius, -range, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.points.push(0, 0, 0);\n const step = segments / 4;\n const start = segments % 4 / 2;\n\n for (let i = 0; i < 4; i++) {\n this.indices.push(segments, start + i * step);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 地板线边框造型数据\n * lines\n */\nexport class FloorLineEdgeGeometryData extends GeometryData {\n /**\n *\n * @param sideLength\n * @param parts\n */\n constructor (sideLength = 12, parts = 6) {\n super();\n\n let index = 0;\n\n const z = 0;\n const end = sideLength / 2;\n const start = -sideLength / 2;\n\n for (let i = 0; i <= parts; i++) {\n const v = start + i * sideLength / parts;\n\n this.points.push(v, start, z, v, end, z, start, v, z, end, v, z);\n this.indices.push(index, index + 1, index + 2, index + 3);\n index += 4;\n }\n }\n}\n","import { math } from '@galacean/effects';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\n\nconst { Matrix4, Vector2 } = math;\n\nexport function distanceOfPointAndLine (point: Vector2, line: [Vector2, Vector2]): { distance: number, isInLine: boolean } {\n //三角形三个边长\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n\n AC.subtractVectors(point, line[0]);\n BC.subtractVectors(point, line[1]);\n AB.subtractVectors(line[1], line[0]);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n let isInLine = false;\n\n if (l1 <= lengthAB && l2 <= lengthAB) {\n isInLine = true;\n }\n\n return {\n distance,\n isInLine,\n };\n}\n\nexport function projectionOfPointAndLine (point: Vector2, line: [Vector3, Vector3]): Vector3 {\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n const line0 = line[0].toVector2();\n const line1 = line[1].toVector2();\n\n AC.subtractVectors(point, line0);\n BC.subtractVectors(point, line1);\n AB.subtractVectors(line1, line0);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n\n const worldAB = line[1].clone().subtract(line[0]);\n\n const worldAP = worldAB.clone().multiply(l1 / (l1 + l2));\n\n const worldP = line[0].clone().add(worldAP);\n\n return worldP;\n}\n\nexport function computeOrthographicOffCenter (\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number\n) {\n let a = 1.0 / (right - left);\n let b = 1.0 / (top - bottom);\n let c = 1.0 / (far - near);\n\n const tx = -(right + left) * a;\n const ty = -(top + bottom) * b;\n const tz = -(far + near) * c;\n\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n\n return new Matrix4(\n a,\n 0.0,\n 0.0,\n 0.0,\n //\n 0.0,\n b,\n 0.0,\n 0.0,\n //\n 0.0,\n 0.0,\n c,\n 0.0,\n //\n tx,\n ty,\n tz,\n 1.0,\n );\n}\n","import type { Engine, Geometry, spec } from '@galacean/effects';\nimport { glContext, Material, Mesh, Texture, Transform, math } from '@galacean/effects';\nimport type { MeshOption } from './geometry';\nimport { createGeometry, GeometryType } from './geometry';\nimport { GizmoSubType } from './define';\nimport type { GizmoItemBounding } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { color, renderMode } from './constants';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype TriangleLike = math.TriangleLike;\nconst { Vector2, Vector3, Matrix4 } = math;\n\n/**\n * 根据 gizmoSubType 类型创建几何体 Mesh\n * @param subType - gizmoSubType 类型\n * @param boundingMap - 包围盒 Map\n * @param iconTexture - 图标纹理\n * @param options - 几何体参数\n * @returns 基础几何体 Mesh | 组合几何体 Map<Mesh, Transform>\n */\nexport function createMeshFromSubType (\n engine: Engine,\n subType: GizmoSubType,\n boundingMap: Map<string, GizmoItemBounding>,\n iconTexture?: Map<string, Texture>,\n options?: MeshOption\n): Mesh | Map<Mesh, Transform> {\n let result: Mesh | Map<Mesh, Transform>;\n\n if (!options) {\n options = { size: 0, renderMode: WebGLRenderingContext['TRIANGLES'] };\n }\n\n switch (subType) {\n case GizmoSubType.sprite:\n result = createSpriteMesh(engine, options);\n\n break;\n case GizmoSubType.camera:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('camera') : undefined, boundingMap);\n\n break;\n case GizmoSubType.light:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('light') : undefined, boundingMap);\n\n break;\n case GizmoSubType.translation:\n result = createTranslationMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.scale:\n result = createScaleMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.viewHelper:\n result = createViewHelperMesh(engine, options, boundingMap, iconTexture as Map<string, Texture>);\n\n break;\n case GizmoSubType.rotation:\n result = createRotationMesh(engine, options, boundingMap);\n\n break;\n default:\n result = createBasicMesh(engine, subType, options);\n\n break;\n }\n\n return result;\n}\n\n/**\n * 创建旋转组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createRotationMesh (\n engine: Engine,\n options: MeshOption,\n boundingMap: Map<string, GizmoItemBounding>,\n): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const size = {\n radius: 0.8 * scale,\n tube: 0.02 * scale,\n radiusSegments: 10 * scale,\n widthSegments: 20,\n heightSegments: 20,\n };\n const boundSize = { ...size, tube: size.tube * 2 };\n const name = 'rotation';\n const xCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.xAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const yCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.yAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const zCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.zAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const center = createBasicMesh(engine, GizmoSubType.sphere, {\n size, color: [0.3, 0.3, 0.3], alpha: 0.1, renderMode, name,\n }, 'blend');\n const xCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.xAxisColor as vec3,\n renderMode,\n });\n const yCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.yAxisColor as vec3,\n renderMode,\n });\n const zCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.zAxisColor as vec3,\n renderMode,\n });\n\n const xCircleTransform = new Transform({\n valid: true,\n });\n const yCircleTransform = new Transform({\n valid: true,\n });\n const zCircleTransform = new Transform({\n valid: true,\n });\n const centerTransform = new Transform({\n valid: true,\n });\n\n xCircleTransform.setRotation(0, 90, 0);\n yCircleTransform.setRotation(-90, 0, 0);\n zCircleTransform.setRotation(0, 0, 0);\n result.set(center, centerTransform);\n result.set(xCircle, xCircleTransform);\n result.set(yCircle, yCircleTransform);\n result.set(zCircle, zCircleTransform);\n\n boundingMap.set('xAxis', {\n type: BoundingType.triangle,\n triangles: xCircleBounding.firstGeometry() ? getTriangle(xCircleBounding.firstGeometry(), xCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.triangle,\n triangles: yCircleBounding.firstGeometry() ? getTriangle(yCircleBounding.firstGeometry(), yCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.triangle,\n triangles: zCircleBounding.firstGeometry() ? getTriangle(zCircleBounding.firstGeometry(), zCircleTransform) : [],\n backfaceCulling: true,\n });\n\n return result;\n}\n\n/**\n * 获取几何体的三角面数组\n * @internal\n * @param geometry - 几何体\n * @param transform - 变换式\n * @returns 三角面数组\n */\nfunction getTriangle (geometry: Geometry, transform: Transform): TriangleLike[] {\n const result: TriangleLike[] = [];\n const indices = geometry.getIndexData();\n const points = geometry.getAttributeData('a_Position');\n const mat4 = transform.getWorldMatrix();\n\n if (points && indices && indices.length > 0) {\n for (let i = 0; i < indices.length; i += 3) {\n const i0 = indices[i] * 3;\n const i1 = indices[i + 1] * 3;\n const i2 = indices[i + 2] * 3;\n const p0 = new Vector3(points[i0], points[i0 + 1], points[i0 + 2]);\n const p1 = new Vector3(points[i1], points[i1 + 1], points[i1 + 2]);\n const p2 = new Vector3(points[i2], points[i2 + 1], points[i2 + 2]);\n\n result.push({\n p0: mat4.projectPoint(p0),\n p1: mat4.projectPoint(p1),\n p2: mat4.projectPoint(p2),\n });\n\n }\n }\n\n return result;\n}\n\n/**\n * 创建位移组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createTranslationMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'translation';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n\n const arrowSize = {\n radius: 0.05 * scale,\n height: 0.2 * scale,\n };\n const xArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.xAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const yArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.yAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const zArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.zAxisColor as vec3,\n renderMode,\n name,\n depthTest: true,\n }, 'blend');\n const xArrowTransform = new Transform({\n valid: true,\n });\n const yArrowTransform = new Transform({\n valid: true,\n });\n const zArrowTransform = new Transform({\n valid: true,\n });\n\n xArrowTransform.setRotation(0, 0, 90);\n yArrowTransform.setRotation(0, 0, 0);\n zArrowTransform.setRotation(-90, 0, 0);\n xArrowTransform.translate(axisSize.width, 0, 0);\n yArrowTransform.translate(0, axisSize.width, 0);\n zArrowTransform.translate(0, 0, axisSize.width);\n\n const planeSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n };\n const xyPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yzPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zxPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const xyPlaneTransform = new Transform({\n valid: true,\n });\n const yzPlaneTransform = new Transform({\n valid: true,\n });\n const zxPlaneTransform = new Transform({\n valid: true,\n });\n const delta = axisSize.width / 8;\n\n xyPlaneTransform.translate(planeSize.width / 2 + delta, planeSize.height / 2 + delta, 0);\n yzPlaneTransform.setRotation(0, 90, 0);\n yzPlaneTransform.translate(0, planeSize.height / 2 + delta, planeSize.width / 2 + delta);\n zxPlaneTransform.setRotation(-90, 0, 0);\n zxPlaneTransform.translate(planeSize.width / 2 + delta, 0, planeSize.height / 2 + delta);\n\n result.set(xArrow, xArrowTransform);\n result.set(yArrow, yArrowTransform);\n result.set(zArrow, zArrowTransform);\n result.set(xyPlane, xyPlaneTransform);\n result.set(yzPlane, yzPlaneTransform);\n result.set(zxPlane, zxPlaneTransform);\n\n createAxisBounding({ width: arrowSize.radius * 2.4, length: axisSize.width + arrowSize.height / 2 }, boundingMap);\n boundingMap.set('xyPlane', {\n type: BoundingType.triangle,\n triangles: xyPlane.firstGeometry() ? getTriangle(xyPlane.firstGeometry(), xyPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n // FIXME: getTriangle 函数调用 getWorldMatrix 后 worldMatrix被修改\n boundingMap.set('yzPlane', {\n type: BoundingType.triangle,\n triangles: yzPlane.firstGeometry() ? getTriangle(yzPlane.firstGeometry(), yzPlaneTransform) : [],\n backfaceCulling: false,\n });\n boundingMap.set('zxPlane', {\n type: BoundingType.triangle,\n triangles: zxPlane.firstGeometry() ? getTriangle(zxPlane.firstGeometry(), zxPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n return result;\n}\n\n/**\n * 创建缩放组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createScaleMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'scale';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const boxSize = {\n width: 0.1 * scale,\n height: 0.1 * scale,\n depth: 0.1 * scale,\n };\n const centerBoxSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n depth: 0.2 * scale,\n };\n const xCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const yCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const zCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const centerCube = createBasicMesh(engine, GizmoSubType.box, {\n size: centerBoxSize,\n color: [0.8, 0.8, 0.8],\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const xCubeTransform = new Transform({\n valid: true,\n });\n const yCubeTransform = new Transform({\n valid: true,\n });\n const zCubeTransform = new Transform({\n valid: true,\n });\n const centerCubeTransform = new Transform({\n valid: true,\n });\n\n xCubeTransform.translate(axisSize.width, 0, 0);\n yCubeTransform.translate(0, axisSize.width, 0);\n zCubeTransform.translate(0, 0, axisSize.width);\n result.set(centerCube, centerCubeTransform);\n result.set(xCube, xCubeTransform);\n result.set(yCube, yCubeTransform);\n result.set(zCube, zCubeTransform);\n\n createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);\n boundingMap.set('center', {\n type: BoundingType.sphere,\n center: new Vector3(),\n radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,\n });\n\n return result;\n}\n\n/**\n * 创建视图辅助组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createViewHelperMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>, texture: Map<string, Texture>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const axisMesh = createAxisMesh(engine, axisSize, true);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const planeSize = {\n width: 0.14 * scale,\n height: 0.14 * scale,\n };\n const length = (axisSize.width + planeSize.width) / 2;\n const depthTest = true;\n const posXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posX'));\n const posYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posY'));\n const posZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posZ'));\n const posXSphereTransform = new Transform({\n valid: true,\n });\n const posYSphereTransform = new Transform({\n valid: true,\n });\n const posZSphereTransform = new Transform({\n valid: true,\n });\n\n posXSphereTransform.translate(length, 0, 0);\n posYSphereTransform.translate(0, length, 0);\n posZSphereTransform.translate(0, 0, length);\n const negXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negX'));\n const negYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negY'));\n const negZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negZ'));\n const negXSphereTransform = new Transform({\n valid: true,\n });\n const negYSphereTransform = new Transform({\n valid: true,\n });\n const negZSphereTransform = new Transform({\n valid: true,\n });\n\n negXSphereTransform.translate(-length, 0, 0);\n negYSphereTransform.translate(0, -length, 0);\n negZSphereTransform.translate(0, 0, -length);\n\n result.set(posXSphere, posXSphereTransform);\n result.set(posYSphere, posYSphereTransform);\n result.set(posZSphere, posZSphereTransform);\n result.set(negXSphere, negXSphereTransform);\n result.set(negYSphere, negYSphereTransform);\n result.set(negZSphere, negZSphereTransform);\n\n const radius = (planeSize.height / 2) * 1.2;\n\n boundingMap.set('posX', {\n type: BoundingType.sphere,\n center: posXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posY', {\n type: BoundingType.sphere,\n center: posYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posZ', {\n type: BoundingType.sphere,\n center: posZSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negX', {\n type: BoundingType.sphere,\n center: negXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negY', {\n type: BoundingType.sphere,\n center: negYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negZ', {\n type: BoundingType.sphere,\n center: negZSphereTransform.position,\n radius: radius,\n });\n\n return result;\n}\n\n/**\n * 创建坐标轴 Mesh 数组\n * @internal\n * @param axisSize - 坐标轴尺寸\n * @param isCentered - 是否居中,默认 false\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createAxisMesh (engine: Engine, axisSize: { width: number, height: number, depth: number }, isCentered = false, name?: string): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const xAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n\n const xAxisTransform = new Transform({\n valid: true,\n });\n const yAxisTransform = new Transform({\n valid: true,\n });\n const zAxisTransform = new Transform({\n valid: true,\n });\n\n yAxisTransform.setRotation(0, 0, 90);\n zAxisTransform.setRotation(0, -90, 0);\n if (!isCentered) {\n xAxisTransform.translate(axisSize.width / 2, 0, 0);\n yAxisTransform.translate(0, axisSize.width / 2, 0);\n zAxisTransform.translate(0, 0, axisSize.width / 2);\n }\n result.set(xAxis, xAxisTransform);\n result.set(yAxis, yAxisTransform);\n result.set(zAxis, zAxisTransform);\n\n return result;\n}\n\n/**\n * 创建基础几何体 Mesh\n * @internal\n * @param subType - gizmoSubType 类型\n * @param options - 几何体参数\n * @returns 几何体 Mesh\n */\nfunction createBasicMesh (engine: Engine, subType: GizmoSubType, options: MeshOption, materialType = 'default'): Mesh {\n const {\n size, color, alpha, renderMode, depthTest, name,\n } = options;\n let geometryType: GeometryType;\n\n switch (subType) {\n case GizmoSubType.sphere:\n geometryType = GeometryType.Sphere;\n\n break;\n case GizmoSubType.cylinder:\n geometryType = GeometryType.Cylinder;\n\n break;\n case GizmoSubType.cone:\n geometryType = GeometryType.Cone;\n\n break;\n case GizmoSubType.torus:\n geometryType = GeometryType.Torus;\n\n break;\n case GizmoSubType.sprite:\n geometryType = GeometryType.Sprite;\n\n break;\n case GizmoSubType.plane:\n geometryType = GeometryType.Plane;\n\n break;\n case GizmoSubType.frustum:\n geometryType = GeometryType.Frustum;\n\n break;\n case GizmoSubType.directionLight:\n geometryType = GeometryType.DirectionLight;\n\n break;\n case GizmoSubType.spotLight:\n geometryType = GeometryType.SpotLight;\n\n break;\n case GizmoSubType.pointLight:\n geometryType = GeometryType.PointLight;\n\n break;\n case GizmoSubType.floorGrid:\n geometryType = GeometryType.FloorGrid;\n\n break;\n default:\n geometryType = GeometryType.Box;\n\n break;\n }\n const geometry = createGeometry(engine, geometryType, size, renderMode);\n let material;\n\n switch (materialType) {\n case 'blend':\n material = createBlendMaterial(engine, color, depthTest, alpha);\n\n break;\n case 'hideBack':\n material = createHideBackMaterial(engine, color, depthTest);\n\n break;\n default:\n material = createMaterial(engine, color, depthTest);\n\n break;\n }\n\n return Mesh.create(\n engine,\n {\n name: name ? name : geometryType.toString(),\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * @internal\n * @param options\n * @param texture\n * @param boundingMap\n * @returns\n */\nfunction createSpriteMesh (engine: Engine, options: MeshOption, texture?: Texture, boundingMap?: Map<string, GizmoItemBounding>): Mesh {\n const geometry = createGeometry(engine, GeometryType.Sprite, options.size, renderMode);\n let spriteColor;\n\n if (texture) {\n spriteColor = texture;\n } else {\n spriteColor = options.color;\n }\n\n const material = createSpriteMaterial(engine, spriteColor, options.depthTest);\n\n if (boundingMap) {\n boundingMap.set('sprite', {\n type: BoundingType.sphere,\n radius: Math.pow(Math.pow(options.size.width, 2) + Math.pow(options.size.height, 2), 0.5) / 2,\n });\n }\n\n return Mesh.create(\n engine,\n {\n name: options.name || 'sprite',\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * 创建材质\n * @internal\n * @param color - 颜色\n * @param depthTest\n * @returns 纯色材质,无光照,无透明\n */\nfunction createMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @returns\n */\nfunction createHideBackMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_cameraPos: new Float32Array([0, 0, 0]),\n u_center: new Float32Array([0, 0, 0]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n varying float flag;\n\n void main(){\n if(flag > 0.0) {\n discard;\n }\n\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n uniform vec3 u_cameraPos;\n uniform vec3 u_center;\n\n varying float flag;\n void main(){\n float distance = length(u_cameraPos - u_center);\n vec3 worldPosition = (u_model * vec4(a_Position,1.0)).xyz;\n flag = length(u_cameraPos - worldPosition) - distance;\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector3('u_cameraPos', Vector3.ZERO);\n material.setVector3('u_center', Vector3.ZERO);\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @param alpha\n * @returns\n */\nfunction createBlendMaterial (engine: Engine, color?: vec3, depthTest?: boolean, alpha?: number): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n const myAlpha = alpha ? alpha : 1;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_alpha: new Float32Array([myAlpha, 0]),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n uniform vec2 u_alpha;\n\n void main(){\n gl_FragColor = vec4(u_color,u_alpha);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setVector2('u_alpha', new Vector2(myAlpha, 0));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n material.depthMask = true;\n\n return material;\n}\n\nfunction createSpriteMaterial (engine: Engine, data?: vec3 | Texture, depthTest?: boolean): Material {\n const myDepthTest = depthTest ? depthTest : false;\n const uniformValues = {\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_alpha: new Float32Array([1, 0]),\n };\n\n const material = Material.create(\n engine,\n {\n uniformValues,\n shader: {\n shared: true,\n fragment: `\n precision highp float;\n\n uniform vec2 u_alpha;\n uniform vec3 u_color;\n uniform sampler2D u_iconTex;\n\n varying vec2 v_uv;\n\n void main(){\n vec4 color = texture2D(u_iconTex, vec2(v_uv.x, 1.0 - v_uv.y));\n if(color.a < 0.001)\n {\n discard;\n }\n gl_FragColor = vec4(color.xyz, color.w * u_alpha.x);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n attribute vec2 a_UV1;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n uniform mat4 effects_MatrixInvV;\n varying vec2 v_uv;\n\n void main(){\n v_uv = a_UV1;\n vec4 pos = u_model * vec4(0., 0., 0., 1.0);\n // vec4 pos = u_model * vec4(a_Position,1.0);\n\n pos.xyz += effects_MatrixInvV[0].xyz * a_Position.x + effects_MatrixInvV[1].xyz * a_Position.y;\n gl_Position = _MatrixP * effects_MatrixV * pos;\n }`,\n },\n });\n\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector2('u_alpha', new Vector2(1, 0));\n\n if (data instanceof Texture) {\n material.setTexture('u_iconTex', data);\n // uniformValues.u_iconTex = data;\n } else {\n let color: Vector3;\n\n if (data === undefined) {\n color = new Vector3(255, 255, 255);\n } else {\n color = Vector3.fromArray(data);\n }\n material.setVector3('u_color', color);\n // uniformValues.u_color = new Float32Array(color);\n }\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n\n return material;\n}\n\n/**\n * 创建坐标轴包围盒\n * @internal\n * @param size 包围盒尺寸\n * @param boundingMap 包围盒 Map\n */\nfunction createAxisBounding (size: { width: number, length: number }, boundingMap: Map<string, GizmoItemBounding>) {\n boundingMap.set('xAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(size.length, 0, 0)],\n width: size.width,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, size.length, 0)],\n width: size.width,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, 0, size.length)],\n width: size.width,\n });\n}\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","import type { Camera } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { distanceOfPointAndLine, projectionOfPointAndLine } from './math-utils';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Matrix4, Vector2, Vector3 } = math;\n\n/**\n * 线条包围盒射线检测算法\n * @param out - 射线与包围盒交点位置\n * @param pointInCanvas - 归一化的画布交互点坐标\n * @param points - 线条包围盒两端点位置\n * @param radius - 线条包围盒辐射半径\n * @param camera - 相机对象\n * @returns 射线与包围盒交点位置 | undefined\n */\nexport function intersectRayLine (\n out: Vector3,\n pointInCanvas: Vector2,\n points: [p0: Vector3, p1: Vector3],\n radius: number,\n worldMat4: Matrix4,\n camera: Camera,\n): Vector3 | undefined {\n // 构造一个辐射半径边缘的点 radiusPoint\n const up = new Vector3(\n worldMat4.elements[1],\n worldMat4.elements[5],\n worldMat4.elements[9],\n ).normalize();\n\n const radiusPoint = up.clone().multiply(radius);\n\n radiusPoint.add(points[0]);\n\n // 计算 start、end、radius 在屏幕空间上的投影\n const mvpMat4 = camera.getModelViewProjection(new Matrix4(), worldMat4);\n\n const screenStart = mvpMat4.projectPoint(points[0], new Vector3());\n const screenEnd = mvpMat4.projectPoint(points[1], new Vector3());\n const screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3());\n\n const screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);\n\n const screenRadius = screenRadiusVector.length();\n\n // 计算屏幕交互点与线条的距离\n const { distance, isInLine } = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]);\n\n if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内\n // 计算交互点在线条上的投影并转换为世界坐标\n const screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);\n const inverseViewProjection = camera.getInverseViewProjectionMatrix();\n\n inverseViewProjection.projectPoint(screenPosition, out);\n\n return out;\n }\n}\n","import type { Engine, spec } from '@galacean/effects';\nimport { Geometry, Material, Mesh, glContext, math } from '@galacean/effects';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Euler, Vector3, Matrix4 } = math;\n\nconst rectSize = 0.04;\nconst DEG2RAD = Math.PI / 180;\n\ninterface GeometryData {\n points: Vector3[],\n indices: number[],\n}\n\ninterface ArcPathOptions {\n plane?: string,\n translate?: vec3,\n rotate?: vec3,\n}\n\nfunction arcPath (radius: number, arc: number, options: ArcPathOptions = {}): GeometryData {\n const { plane, translate = [0, 0, 0], rotate = [0, 0, 0] } = options;\n const rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4());\n const points: Vector3[] = [];\n const indices = [];\n\n addPoint(radius, 0);\n let i = 1;\n\n for (; i <= arc; i++) {\n const angle = i * DEG2RAD;\n\n indices.push(i - 1, i);\n addPoint(Math.cos(angle) * radius, Math.sin(angle) * radius);\n }\n\n return {\n points,\n indices,\n };\n\n function addPoint (cos: number, sin: number) {\n const point = new Vector3();\n\n if (plane === 'xz') {\n point.set(cos, 0, sin);\n } else if (plane === 'yz') {\n point.set(0, cos, sin);\n } else {\n point.set(cos, sin, 0);\n }\n rotMat4.transformNormal(point);\n points.push(point.add(translate));\n }\n}\n\nfunction line (p0: vec3, p1: vec3): GeometryData {\n return {\n points: [\n Vector3.fromArray(p0),\n Vector3.fromArray(p1),\n ],\n indices: [0, 1],\n };\n}\n\nfunction box (width: number, height: number, depth: number, center?: number[]): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const d = depth / 2;\n const myCenter = center ?? [0, 0, 0];\n const points: Vector3[] = [\n [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],\n [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],\n ].map(item => {\n return new Vector3(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);\n });\n\n return {\n points,\n indices: [\n 0, 1, 1, 3, 3, 2, 2, 0,\n 4, 5, 5, 7, 7, 6, 6, 4,\n 0, 4, 2, 6, 3, 7, 1, 5,\n ],\n };\n}\n\nfunction rect (width: number, height: number, pos?: vec3): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const points: Vector3[] = [\n new Vector3(-w, h, 0),\n new Vector3(w, h, 0),\n new Vector3(w, -h, 0),\n new Vector3(-w, -h, 0),\n ];\n\n if (pos) {\n points.forEach(vec => {\n vec.add(pos);\n });\n }\n\n return {\n points,\n indices: [\n 0, 1, 1, 2, 2, 3, 3, 0,\n ],\n };\n}\n\nfunction combineGeometries (geometries: GeometryData[]) {\n const points: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n\n if (geometry) {\n geometry.points.forEach(point => {\n points.push(point.x, point.y, point.z);\n });\n geometry.indices.forEach(index => indices.push(index + indicesBase));\n indicesBase += geometry.points.length;\n }\n }\n\n return {\n points: new Float32Array(points),\n indices: new Uint16Array(indices),\n };\n}\n\nconst Shapes: Record<string, (arg: any) => GeometryData[]> = {\n Texture (arg: any) {\n const ret = [];\n\n if (arg.detail) {\n const anchors = arg.detail.anchors;\n const block = arg.detail.block;\n const width = arg.width;\n const height = arg.height;\n\n for (let i = 0; i < anchors.length; i += 2) {\n ret.push(rect(block[0] * width, block[1] * height, [\n width * (anchors[i] - 0.5),\n height * (anchors[i + 1] - 0.5),\n 0,\n ]));\n }\n } else {\n ret.unshift(Shapes.Rectangle(arg)[0]);\n }\n\n return ret;\n },\n Circle (arg: any) {\n const { radius, arc } = arg;\n\n return [\n arcPath(radius, arc),\n arc !== 360 && line([0, 0, 0], [radius, 0, 0]),\n arc !== 360 && line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n },\n Box: function (arg: any) {\n const {\n width, height, depth, center,\n } = arg;\n const data = box(width, height, depth, center);\n\n return [data];\n },\n Sphere: function (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, -radius], [0, 0, radius]),\n arcPath(radius, arc > 180 ? 360 : 180, { plane: 'xz', rotate: [0, 90, 0] }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 180, { plane: 'xz', rotate: [0, 90, arc] }),\n ];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 360 : 180, { plane: 'yz', rotate: [-90, 0, 0] }));\n }\n\n return ret;\n },\n Hemisphere (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, radius], [0, 0, 0]), //z\n line([arc > 180 ? -radius : 0, 0, 0], [radius, 0, 0]), //x\n arg > 90 && line([0, arc > 270 ? -radius : 0, 0], [0, radius, 0]), //y\n arcPath(radius, (arc > 180 ? 360 : 180) / 2, { plane: 'xz' }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 90, { plane: 'xz', rotate: [0, 0, arc] }),\n line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 180 : 90, { plane: 'yz' }));\n }\n\n return ret;\n },\n Cone (arg) {\n const { radius, arc } = arg;\n const outerRadius = radius * Math.tan(arg.angle * DEG2RAD) + radius;\n\n return [\n arcPath(outerRadius, arc, { translate: [0, 0, radius] }),\n line([radius, 0, 0], [outerRadius, 0, radius]),\n arc > 90 && line([0, radius, 0], [0, outerRadius, radius]),\n arc > 180 && line([-radius, 0, 0], [-outerRadius, 0, radius]),\n arc > 270 && line([0, -radius, 0], [0, -outerRadius, radius]),\n line([Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n [Math.cos(arc * DEG2RAD) * outerRadius, Math.sin(arc * DEG2RAD) * outerRadius, radius]),\n ].concat(Shapes.Circle(arg)) as GeometryData[];\n },\n Edge (arg) {\n const hw = arg.width / 2;\n\n return [\n line([-hw, 0, 0], [hw, 0, 0]),\n ];\n },\n Rectangle (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n RectangleEdge (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n Donut (arg) {\n const { arc, radius, donutRadius } = arg;\n\n return [\n arcPath(donutRadius, 360, { translate: [radius, 0, 0], rotate: [90, 0, 0] }),\n arcPath(radius - donutRadius, arc),\n arcPath(radius + donutRadius, arc),\n arcPath(radius, arc, { translate: [0, 0, donutRadius] }),\n arcPath(radius, arc, { translate: [0, 0, -donutRadius] }),\n arc % 360 === 0 ? arcPath(donutRadius, 360, {\n translate: [-radius, 0, 0],\n rotate: [90, 0, 0],\n }) : arcPath(donutRadius, 360, {\n translate: [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n rotate: [90, 0, arc],\n }),\n ];\n },\n path (arg) {\n const positions = arg.keys;\n const ret = [];\n\n for (let i = 0; i < positions.length - 1; i++) {\n ret.push(rect(rectSize, rectSize, positions[i]));\n ret.push(line(positions[i], positions[i + 1]));\n }\n ret.push(rect(rectSize, rectSize, positions[positions.length - 1]));\n\n return ret;\n },\n};\n\nShapes['0'] = Shapes.None;\nShapes['1'] = Shapes.Sphere;\nShapes['2'] = Shapes.Cone;\nShapes['3'] = Shapes.Hemisphere;\nShapes['4'] = Shapes.Circle;\nShapes['5'] = Shapes.Donut;\nShapes['6'] = Shapes.Rectangle;\nShapes['7'] = Shapes.RectangleEdge;\nShapes['8'] = Shapes.Edge;\nShapes['9'] = Shapes.Texture;\n\nexport function createMeshFromShape (engine: Engine, args: { shape: string, type?: number }, options: { color?: vec3, depthTest?: boolean }): Mesh {\n const ret = Shapes[args.type || args.shape](args);\n const geo = combineGeometries(ret);\n\n return createMesh(engine, geo.points, geo.indices, options.color || [1, 0, 0], options.depthTest, args.shape);\n}\n\nfunction createMesh (engine: Engine, points: Float32Array, indices: Uint16Array, color: vec3, depthTest = false, name?: string): Mesh {\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(color),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixVP;\n void main(){\n gl_Position = effects_MatrixVP * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', Vector3.fromArray(color));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = depthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n const geometry = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: points,\n },\n },\n indices: {\n data: indices,\n },\n mode: glContext.LINES,\n drawCount: indices.length,\n });\n\n return Mesh.create(\n engine,\n {\n name,\n geometry,\n material,\n priority: 3000,\n });\n}\n","import type { Composition, Mesh, RenderFrame, Scene, Texture, VFXItem } from '@galacean/effects';\nimport { AbstractPlugin, RenderPass, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, TextureLoadAction, removeItem } from '@galacean/effects';\nimport { GizmoVFXItemType } from './define';\nimport { destroyWireframeMesh } from './wireframe';\nimport { axisIconMap } from './constants';\nimport { createImage, createTexture } from './util';\nimport { GeometryType } from './geometry';\nimport { GizmoComponent } from './gizmo-component';\n\nconst editorRenderPassName = 'editor-gizmo';\nconst frontRenderPassName = 'front-gizmo';\nconst behindRenderPassName = 'behind-gizmo';\nconst iconImages: Map<string, HTMLImageElement> = new Map();\n\nexport const iconTextures: Map<string, Texture> = new Map();\n\nexport class EditorGizmoPlugin extends AbstractPlugin {\n meshToAdd: Mesh[] = [];\n meshToRemove: Mesh[] = [];\n override order = 1001;\n\n static override async prepareResource (scene: Scene): Promise<any> {\n if (iconImages.size !== axisIconMap.size) {\n for (const [name, data] of axisIconMap) {\n iconImages.set(name, await createImage(data));\n }\n }\n\n return true;\n }\n\n override onCompositionConstructed (composition: Composition, scene: Scene) {\n const engine = composition.renderer.engine;\n\n iconTextures.clear();\n\n iconImages.forEach((image, name) => {\n iconTextures.set(name, createTexture(engine, image));\n });\n iconImages.clear();\n }\n\n override onCompositionReset (composition: Composition) {\n const items = composition.items;\n const targetMap: { [key: string]: VFXItem[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const gizmoComponent = item.getComponent(GizmoComponent);\n\n if (gizmoComponent) {\n if (!targetMap[gizmoComponent.target]) {\n targetMap[gizmoComponent.target] = [];\n }\n targetMap[gizmoComponent.target].push(item);\n }\n }\n composition.loaderData.gizmoTarget = targetMap;\n composition.loaderData.gizmoItems = [];\n }\n\n // override onCompositionItemLifeBegin (composition: Composition, item: VFXItem<any>) {\n // if (item.type === '7') {\n // return;\n // }\n // const gizmoVFXItemList: GizmoVFXItem[] = composition.loaderData.gizmoTarget[item.id];\n\n // if (gizmoVFXItemList && gizmoVFXItemList.length > 0) {\n // for (const gizmoVFXItem of gizmoVFXItemList) {\n // switch (gizmoVFXItem.subType) {\n // case GizmoSubType.particleEmitter:\n // gizmoVFXItem.createParticleContent(item, this.meshToAdd);\n\n // break;\n // case GizmoSubType.modelWireframe:\n // gizmoVFXItem.createModelContent(item, this.meshToAdd);\n\n // break;\n // case GizmoSubType.box:\n // case GizmoSubType.sphere:\n // case GizmoSubType.cylinder:\n // case GizmoSubType.cone:\n // case GizmoSubType.torus:\n // case GizmoSubType.sprite:\n // case GizmoSubType.frustum:\n // case GizmoSubType.directionLight:\n // case GizmoSubType.pointLight:\n // case GizmoSubType.spotLight:\n // case GizmoSubType.floorGrid:\n // gizmoVFXItem.createBasicContent(item, this.meshToAdd, gizmoVFXItem.subType);\n\n // break;\n // case GizmoSubType.camera:\n // case GizmoSubType.light:\n // gizmoVFXItem.createBasicContent(item, this.meshToAdd, gizmoVFXItem.subType, iconTextures);\n\n // break;\n // case GizmoSubType.rotation:\n // case GizmoSubType.scale:\n // case GizmoSubType.translation:\n // gizmoVFXItem.createCombinationContent(item, this.meshToAdd, gizmoVFXItem.subType);\n\n // break;\n // case GizmoSubType.viewHelper:\n // gizmoVFXItem.createCombinationContent(item, this.meshToAdd, gizmoVFXItem.subType, iconTextures);\n\n // break;\n // case GizmoSubType.boundingBox:\n // gizmoVFXItem.createBoundingBoxContent(item, this.meshToAdd);\n\n // break;\n // default:\n // break;\n // }\n // }\n // }\n // if (item.type === GizmoVFXItemType) {\n // composition.loaderData.gizmoItems.push(item);\n // }\n // }\n\n override onCompositionItemRemoved (composition: Composition, item: VFXItem) {\n if (item.type === GizmoVFXItemType) {\n this.removeGizmoItem(composition, item);\n } else {\n const gizmoVFXItemList: VFXItem[] = composition.loaderData.gizmoTarget[item.id];\n\n if (gizmoVFXItemList && gizmoVFXItemList.length > 0) {\n gizmoVFXItemList.forEach(gizmoVFXItem => {\n this.removeGizmoItem(composition, gizmoVFXItem);\n });\n }\n }\n }\n\n removeGizmoItem (composition: Composition, gizmoVFXItem: VFXItem) {\n const gizmoMesh = gizmoVFXItem.getComponent(GizmoComponent).mesh;\n\n if (gizmoMesh && !gizmoMesh.isDestroyed) {\n gizmoMesh.dispose();\n\n if (gizmoMesh.name === GeometryType.FloorGrid.toString() || gizmoMesh.name === 'Box') {\n this.getFrontRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n }\n }\n if (gizmoVFXItem.getComponent(GizmoComponent).contents) {\n for (const [mesh] of gizmoVFXItem.getComponent(GizmoComponent).contents!) {\n if (!mesh.isDestroyed) {\n mesh.dispose();\n if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(composition.renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n }\n }\n }\n\n const gizmoComponent = gizmoVFXItem.getComponent(GizmoComponent);\n\n if (gizmoComponent && gizmoComponent.wireframeMeshes.length > 0) {\n gizmoComponent.wireframeMeshes.forEach(mesh => {\n if (!mesh.isDestroyed) {\n destroyWireframeMesh(mesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n });\n } else {\n const wireframeMesh = gizmoVFXItem.getComponent(GizmoComponent).wireframeMesh;\n\n if (wireframeMesh && !wireframeMesh.isDestroyed) {\n destroyWireframeMesh(wireframeMesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh);\n }\n }\n\n const arr: VFXItem[] = composition.loaderData.gizmoItems;\n const index = arr.indexOf(gizmoVFXItem);\n\n if (index > -1) {\n arr.splice(index, 1);\n }\n }\n\n override prepareRenderFrame (composition: Composition, renderFrame: RenderFrame): boolean {\n this.meshToAdd.forEach(mesh => {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).addMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).addMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).addMesh(mesh);\n }\n });\n this.meshToRemove.forEach(mesh => {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).removeMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).removeMesh(mesh);\n }\n removeItem(this.meshToAdd, mesh);\n });\n this.meshToRemove.length = 0;\n // composition.loaderData.gizmoItems.forEach((item: GizmoVFXItem) => item.updateRenderData());\n\n return false;\n }\n\n getBehindRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === behindRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: behindRenderPassName,\n priority: RenderPassPriorityPostprocess + RenderPassPriorityPostprocess,\n clearAction: {\n depthAction: TextureLoadAction.clear,\n },\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getEditorRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === editorRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: editorRenderPassName,\n priority: RenderPassPriorityPostprocess + 2,\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getFrontRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === frontRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: frontRenderPassName,\n priority: RenderPassPriorityPrepare + 2,\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n}\n","import * as EFFECTS from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin } from '@galacean/effects';\nimport { EditorGizmoPlugin } from './gizmo-loader';\nimport { GizmoSubType } from './define';\nimport { GeometryType, createGeometry } from './geometry';\n\nregisterPlugin('editor-gizmo', EditorGizmoPlugin, VFXItem);\n\nexport { DirectionLightData } from './geometry/direction-light';\nexport {\n GizmoSubType,\n GeometryType,\n createGeometry,\n};\nexport * from './gizmo-component';\n\n/**\n * 插件版本号\n */\nexport const version = __VERSION__;\n\nlogger.info(`Plugin editor gizmo version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Editor Gizmo 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Editor Gizmo plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n"],"names":["GizmoSubType","WireframeGeometryType","GeometryType","BoundingType","CoordinateSpace","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","toString","slice","name","from","test","__decorate","decorators","target","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__generator","thisArg","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","push","e","_extends","assign","source","hasOwnProperty","SuppressedError","Vector4","math","destroyWireframeMesh","mesh","geometry","dispose","geometries","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","type","material","cloneUniforms","_step","wireframeGeometry","firstGeometry","_iterator","keys","enabledMacros","macro","enableMacro","drawCount","Math","abs","getDrawCount","indexData","getIndexData","data","getTriangleIndexData","oid","faceCount","Uint32Array","idx","base","p0","p1","p2","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","Uint16Array","SharedGeometry","GLGeometry","engine","options","attributes","index","_this","indices","drawStart","mode","_proto","initialize","isInitialized","buffers","bufferProps","indicesBuffer","createIndicesBuffer","flush","initialized","getAttributeNames","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","Map","createImage","imageUrl","image","Image","src","onload","onerror","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","scalerVecCameraItem","normalVecCameraItem","normalize","multiply","vecItemScaler","vecScalerItem","add","set","GeometryData","points","uvs","normals","createXYPlaneCircle","radius","z","segments","thetaStart","thetaLength","startIndex","theta","x","cos","sin","createXZPlaneCircle","createYZPlaneCircle","Vector3","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","iy","verticesRow","uOffset","ix","_this_normals","u","normal","toArray","a","b","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","point","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateCap","top","centerIndexStart","sign","halfHeight","centerIndexEnd","cosTheta","sinTheta","px","py","pz","uvU","uvV","indexArray","generateTorso","slope","indexRow","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","ix1","Euler","Matrix4","FrustumGeometryData","position","rotation","fov","aspect","near","far","_this_points","halfY","tan","fovY","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","FloorLineEdgeGeometryData","sideLength","parts","end","createGeometry","size","geometryData","segments4","Geometry","a_Position","Float32Array","a_Normal","a_UV1","Ray","Vector2","computeOrthographicOffCenter","left","right","bottom","tx","ty","tz","createMeshFromSubType","subType","boundingMap","iconTexture","result","scale","boundSize","xCircle","yCircle","zCircle","center","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","yCircleTransform","zCircleTransform","centerTransform","WebGLRenderingContext","sprite","createSpriteMesh","camera","get","light","translation","createTranslationMesh","axisSize","axisMesh","createAxisMesh","transform","arrowSize","xArrow","createBasicMesh","cone","depthTest","yArrow","zArrow","xArrowTransform","Transform","valid","yArrowTransform","zArrowTransform","setRotation","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","triangle","triangles","getTriangle","backfaceCulling","createScaleMesh","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","sphere","pow","viewHelper","createViewHelperMesh","texture","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","radiusSegments","torus","alpha","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","projectPoint","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","myColor","myAlpha","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","Material","uniformValues","u_color","u_alpha","u_model","shader","shared","fragment","vertex","setVector3","setVector2","setMatrix","IDENTITY","stencilTest","blending","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","depthMask","u_cameraPos","u_center","ZERO","Mesh","priority","_instanceof","hasInstance","Texture","setTexture","line","DEG2RAD","arcPath","_options_translate","rotate","rotMat4","_options_rotate","negate","addPoint","angle","transformNormal","rect","pos","h","forEach","vec","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","myCenter","map","item","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","createMeshFromShape","geo","combineGeometries","indicesBase","shape","LINES","None","Quaternion","constants","GizmoComponent","RendererComponent1","coordinateSpace","mat","fromIdentity","wireframeMeshes","getHitTestParams","worldMat4","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","newPos","composition","setPosition","HitTestType","custom","collect","ray","pointInCanvas","hitPositions","gizmoComponent","getComponent","hitBounding","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","mvpMat4","vpMat4","screenCenter","up","elements","screenPoint","screenCenter2","toVector2","screenPoint2","screenRadius","distance","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","intersectRayLine","out","radiusPoint","getModelViewProjection","screenStart","screenEnd","screenRadiusVector","screenRadiusPoint","distanceOfPointAndLine","AC","BC","AB","subtractVectors","sqrt","P","lengthAC","lengthBC","lengthAB","isInLine","l2","line0","line1","l1","worldAP","screenPosition","worldAB","inverseViewProjection","getInverseViewProjectionMatrix","behavior","spec","InteractBehavior","NOTIFY","onStart","_this_item_composition","_this_item_composition_items","items","id","_step1","pluginSystem","plugins","_iterator1","plugin","gizmoPlugin","particleEmitter","createParticleContent","meshToAdd","modelWireframe","needCreateModelContent","createModelContent","createBasicContent","iconTextures","createCombinationContent","boundingBox","createBoundingBoxContent","loaderData","gizmoItems","onUpdate","dt","updateRenderData","render","wireframeMesh","_this_targetItem_getComponent","pMesh","RendererComponent","content","meshes","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","contents","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","cameraPos","getDefaultRenderMode","getDefaultSize","meshesToAdd","psubMesh","modelComponent","assertExist","materialOptions","originMesh","shaderData","props","macros","glslVersion","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","gizmoItem","fromData","duration","_data_options_color","serialize","effectsClass","editorRenderPassName","frontRenderPassName","behindRenderPassName","iconImages","EditorGizmoPlugin","AbstractPlugin","meshToRemove","order","onCompositionConstructed","scene","clear","onCompositionReset","targetMap","gizmoTarget","onCompositionItemRemoved","removeGizmoItem","gizmoVFXItemList","gizmoVFXItem","gizmoMesh","isDestroyed","getFrontRenderPass","renderFrame","removeMesh","getEditorRenderPass","getBehindRenderPass","indexOf","splice","prepareRenderFrame","addMesh","removeItem","pipeline","rp","renderPasses","find","renderPass","RenderPass","RenderPassPriorityPostprocess","clearAction","depthAction","TextureLoadAction","addRenderPass","RenderPassPriorityPrepare","prepareResource","_state","registerPlugin","VFXItem","version","logger","EFFECTS","console"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/define.ts","../src/wireframe.ts","../src/geometry/index.ts","../src/gizmo-vfx-item.ts","../src/gizmo-component.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/constants.ts","../src/util.ts","../src/geometry/geometry.ts","../src/geometry/sphere.ts","../src/geometry/box.ts","../src/geometry/cylinder.ts","../src/geometry/cone.ts","../src/geometry/torus.ts","../src/geometry/plane.ts","../src/geometry/frustum.ts","../src/geometry/direction-light.ts","../src/geometry/point-light.ts","../src/geometry/spot-light.ts","../src/geometry/floor-line-edge.ts","../src/math-utils.ts","../src/mesh.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/raycast.ts","../src/shape.ts","../src/gizmo-loader.ts","../src/index.ts"],"sourcesContent":["import type { GeometryDrawMode, spec } from '@galacean/effects';\n\nexport interface GizmoVFXItemOptions {\n target: string,\n subType: GizmoSubType,\n renderMode?: GeometryDrawMode,\n type: 'editor-gizmo',\n color: spec.vec3,\n size?: number,\n depthTest?: boolean,\n}\n\nexport const GizmoVFXItemType = 'gizmo' as spec.ItemType;\n\n/**\n * Gizmo 类型\n */\nexport enum GizmoSubType {\n particleEmitter = 1,\n modelWireframe = 2,\n box,\n sphere,\n cylinder,\n cone,\n torus,\n sprite,\n plane,\n rotation,\n translation,\n scale,\n viewHelper,\n camera,\n frustum,\n light,\n directionLight,\n pointLight,\n spotLight,\n boundingBox,\n floorGrid,\n}\n","import type { ShaderMacros, Geometry, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, GLGeometry, DestroyOptions, Material, Mesh, math } from '@galacean/effects';\n\nconst { Vector4 } = math;\n\nexport function createParticleWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint16Array(0),\n },\n name: 'testtest',\n });\n\n const { vertex, fragment, macros, name } = mesh.material.props.shader;\n const materialOptions = { ...mesh.material.props };\n const newMacros = [...(macros || [] as ShaderMacros), ['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: name + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = mesh.material.depthTest;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.quad);\n}\n\nexport enum WireframeGeometryType {\n triangle,\n quad,\n}\n\nexport function destroyWireframeMesh (mesh: Mesh) {\n mesh.geometry?.dispose();\n mesh.dispose({ geometries: DestroyOptions.keep });\n}\n\nexport function updateWireframeMesh (originGeometry: Geometry, originMaterial: Material, wireframe: Mesh, type: WireframeGeometryType) {\n wireframe.material.cloneUniforms(originMaterial);\n\n const geometry = originGeometry;\n const wireframeGeometry = wireframe.firstGeometry();\n\n for (const macro of Object.keys(originMaterial.enabledMacros)) {\n wireframe.material.enableMacro(macro, originMaterial.enabledMacros[macro]);\n }\n\n if (type === WireframeGeometryType.triangle) {\n // 线框模式不绘制模型的时候,drawCount 为负数\n const drawCount = Math.abs(geometry.getDrawCount());\n\n if (drawCount !== 0) {\n if (drawCount !== wireframeGeometry.getDrawCount() / 2) {\n const indexData = geometry.getIndexData() as Uint16Array | undefined;\n const data = indexData ? getTriangleIndexData(indexData) : getTriangleIndexDataByCount(drawCount);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n } else if (type === WireframeGeometryType.quad) {\n if (geometry.getDrawCount() / 6 !== wireframeGeometry.getDrawCount() / 8) {\n const data = getQuadIndexData(geometry.getDrawCount() / 6, geometry.getIndexData() as Uint16Array);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n\n return wireframe;\n}\n\nfunction getQuadIndexData (faceCount: number, oid: Uint16Array): Uint16Array {\n const indexData = new Uint16Array(faceCount * 8);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 8;\n const base = i * 4;\n\n indexData[idx] = base;\n indexData[idx + 1] = 1 + base;\n indexData[idx + 2] = 1 + base;\n indexData[idx + 3] = 3 + base;\n indexData[idx + 4] = 3 + base;\n indexData[idx + 5] = 2 + base;\n indexData[idx + 6] = 2 + base;\n indexData[idx + 7] = base;\n }\n\n return indexData;\n}\n\nexport function createModeWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint32Array(0),\n },\n });\n const { vertex, fragment } = mesh.material.shader.shaderData;\n const materialOptions = { ...mesh.material.props };\n\n const newMacros = [['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: (mesh.name ?? 'unamedmesh') + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = true;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.triangle);\n}\n\nfunction getTriangleIndexDataByCount (drawCount: number): Uint32Array {\n const faceCount = drawCount / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const p0 = i * 3;\n const p1 = p0 + 1;\n const p2 = p0 + 2;\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nfunction getTriangleIndexData (oid: Uint16Array): Uint32Array {\n const faceCount = oid.length / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const base = i * 3;\n const p0 = oid[base];\n const p1 = oid[base + 1];\n const p2 = oid[base + 2];\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nexport interface SharedGeometryOptions {\n name?: string,\n drawStart?: number,\n drawCount?: number,\n mode?: GeometryDrawMode,\n index?: { data: Uint8Array | Uint16Array | Uint32Array, releasable?: boolean },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends GLGeometry {\n private readonly source: GLGeometry;\n\n constructor (engine: Engine, options: SharedGeometryOptions) {\n super(engine, { attributes: {}, ...options });\n let indexData = options.index ? options.index.data : options.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this.indices = indexData;\n this.source = options.geometry as GLGeometry;\n this.drawCount = options.drawCount || 0;\n this.drawStart = options.drawStart || 0;\n this.mode = options.mode || 0;\n for (const name in this.source.attributes) {\n this.attributes[name] = { ...this.source.attributes[name] };\n }\n }\n\n override initialize () {\n if (!this.isInitialized) {\n const geometry = this.source;\n\n geometry.initialize();\n //this.indicesBuffer = this._source.indicesBuffer;\n this.buffers = this.source.buffers;\n this.bufferProps = this.source.bufferProps;\n //this.dirtyFlags = this._source.dirtyFlags;\n //this.vaos = this._source.vaos;\n //创建ibo\n if (this.indices) {\n this.indicesBuffer = this.createIndicesBuffer(this.indices);\n }\n this.flush();\n this.initialized = true;\n }\n }\n\n override getAttributeNames (): string[] {\n return this.source.getAttributeNames();\n }\n\n override flush () {\n this.source.flush();\n\n super.flush();\n }\n\n override dispose () {\n // from source geometry\n this.buffers = {};\n this.bufferProps = {};\n super.dispose();\n // @ts-expect-error\n this.source = null;\n }\n}\n","import type { Engine, GeometryDrawMode, spec } from '@galacean/effects';\nimport { Geometry } from '@galacean/effects';\nimport { SphereGeometryData } from './sphere';\nimport { BoxGeometryData } from './box';\nimport type { GeometryData } from './geometry';\nimport { CylinderGeometryData } from './cylinder';\nimport { ConeGeometryData } from './cone';\nimport { TorusGeometryData } from './torus';\nimport { PlaneGeometryData } from './plane';\nimport { FrustumGeometryData } from './frustum';\nimport { DirectionLightData } from './direction-light';\nimport { PointLightData } from './point-light';\nimport { SpotLightData } from './spot-light';\nimport { FloorLineEdgeGeometryData } from './floor-line-edge';\n\n/**\n * 几何体类型\n */\nexport enum GeometryType {\n Box,\n Sphere,\n Cylinder,\n Cone,\n Torus,\n Frustum,\n Sprite,\n Plane,\n DirectionLight,\n SpotLight,\n PointLight,\n FloorGrid,\n}\n\n/**\n * 几何体参数\n */\nexport interface MeshOption {\n size: any,\n color?: spec.vec3,\n renderMode: GeometryDrawMode,\n depthTest?: boolean,\n name?: string,\n alpha?: number,\n}\n\n/**\n * 合并多个几何体数据\n * @param geometries - 几何体数据数组\n * @returns 合并后的几何体数据\n */\n// export function combineGeometries (geometries: GeometryData[]): GeometryData {\n// const points: number[] = [];\n// const indices: number[] = [];\n// const uvs: number[] = [];\n// const normals: number[] = [];\n\n// for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n// const geometryData = geometries[i];\n// if (geometryData) {\n// points.push(...geometryData.points);\n// uvs.push(...geometryData.uvs);\n// normals.push(...geometryData.normals);\n// geometryData.indices.forEach(index => indices.push(index + indicesBase));\n// indicesBase += geometryData.points.length;\n// }\n// }\n\n// return {\n// points,\n// indices,\n// uvs,\n// normals,\n// };\n// }\n\n/**\n * 创建几何体对象\n * @param type - 几何体类型\n * @param size - 几何体尺寸\n * @param renderMode - 绘制模式:`gl.TRIANGLES`、`gl.LINES`\n * @returns\n */\nexport function createGeometry (engine: Engine, type: GeometryType, size: Record<string, any>, renderMode?: GeometryDrawMode): Geometry {\n let geometryData: GeometryData;\n\n switch (type) {\n case GeometryType.Sphere:\n geometryData = new SphereGeometryData(size.radius, size.widthSegments, size.heightSegments);\n\n break;\n case GeometryType.Cylinder:\n geometryData = new CylinderGeometryData(size.radius, size.radius, size.height);\n\n break;\n case GeometryType.Cone:\n geometryData = new ConeGeometryData(size.radius, size.height);\n\n break;\n case GeometryType.Torus:\n geometryData = new TorusGeometryData(size.radius, size.tube, size.radialSegments, size.tubularSegments, size.arc);\n\n break;\n case GeometryType.Sprite:\n case GeometryType.Plane:\n geometryData = new PlaneGeometryData(size.width, size.height);\n\n break;\n case GeometryType.Frustum:\n geometryData = new FrustumGeometryData(size.position, size.rotation, size.fov, size.aspect, size.near, size.far);\n\n break;\n case GeometryType.DirectionLight:\n geometryData = new DirectionLightData(size.radius, size.length, size.segments4, size.linesNumber, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.PointLight:\n geometryData = new PointLightData(size.range, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.SpotLight:\n geometryData = new SpotLightData(size.range, size.spotAngle, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.FloorGrid:\n geometryData = new FloorLineEdgeGeometryData(size.sideLength, size.parts);\n\n break;\n default:\n geometryData = new BoxGeometryData(size.width, size.height, size.depth);\n\n break;\n }\n const result = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: new Float32Array(geometryData.points),\n },\n a_Normal: {\n size: 3,\n data: new Float32Array(geometryData.normals),\n },\n a_UV1: {\n size: 2,\n data: new Float32Array(geometryData.uvs),\n },\n },\n indices: {\n data: new Uint16Array(geometryData.indices),\n },\n mode: renderMode,\n drawCount: geometryData.indices.length,\n });\n\n return result;\n}\n","import { math } from '@galacean/effects';\n\nexport type Ray = math.Ray;\nexport type TriangleLike = math.TriangleLike;\ntype Vector3 = math.Vector3;\n\nconst { Vector3, Ray } = math;\n\n/**\n * 包围盒类型\n */\nexport enum BoundingType {\n box,\n sphere,\n triangle,\n line\n}\n\n/**\n * 线条包围盒类型\n */\nexport interface GizmoItemBoundingLine {\n type: BoundingType.line,\n // 线条包围盒两端点\n points: [Vector3, Vector3],\n // 射线与线条距离阈值\n width: number,\n}\n\n/**\n * 立方体包围盒类型\n */\nexport interface GizmoItemBoundingBox {\n type: BoundingType.box,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围盒的xyz长度,当type为box时生效\n size: Vector3,\n}\n\n/**\n * 球体包围盒类型\n */\nexport interface GizmoItemBoundingSphere {\n type: BoundingType.sphere,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围球的半径,当type为sphere时生效\n radius: number,\n}\n\n/**\n * 三角数组包围盒类型\n */\nexport interface GizmoItemBoundingTriangle {\n type: BoundingType.triangle,\n triangles: TriangleLike[],\n backfaceCulling?: boolean,\n}\n\nexport type GizmoItemBounding =\n | GizmoItemBoundingBox\n | GizmoItemBoundingSphere\n | GizmoItemBoundingTriangle\n | GizmoItemBoundingLine\n ;\n","import type { GeometryDrawMode, HitTestCustomParams, Renderer, Texture, VFXItem } from '@galacean/effects';\nimport { Mesh } from '@galacean/effects';\nimport { HitTestType, ParticleSystemRenderer, RendererComponent, Transform, assertExist, effectsClass, glContext, math, serialize, spec } from '@galacean/effects';\nimport type { GizmoVFXItemOptions } from './define';\nimport { GizmoSubType } from './define';\nimport { iconTextures, type EditorGizmoPlugin } from './gizmo-loader';\nimport type { GizmoItemBounding, Ray, TriangleLike } from './gizmo-vfx-item';\nimport { BoundingType, type GizmoItemBoundingSphere } from './gizmo-vfx-item';\nimport { computeOrthographicOffCenter } from './math-utils';\nimport { createMeshFromSubType } from './mesh';\nimport { intersectRayLine } from './raycast';\nimport { createMeshFromShape } from './shape';\nimport { moveToPointWidthFixDistance } from './util';\nimport { WireframeGeometryType, createModeWireframe, updateWireframeMesh } from './wireframe';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Vector2, Vector3, Matrix4, Quaternion } = math;\nconst constants = glContext;\n\n@effectsClass('GizmoComponent')\nexport class GizmoComponent extends RendererComponent {\n gizmoPlugin: EditorGizmoPlugin;\n targetItem: VFXItem;\n needCreateModelContent: boolean;\n target: string;\n subType: GizmoSubType;\n size: any;\n contents?: Map<Mesh, Transform>;\n boundingMap: Map<string, GizmoItemBounding> = new Map();\n hitBounding?: { key: string, position: Vector3 };\n wireframeMesh: Mesh;\n @serialize()\n coordinateSpace: CoordinateSpace = CoordinateSpace.Local;\n\n color: spec.vec3;\n renderMode!: GeometryDrawMode;\n depthTest?: boolean;\n mat = Matrix4.fromIdentity();\n wireframeMeshes: Mesh[] = [];\n\n mesh: Mesh | null = null;\n\n override onStart (): void {\n this.item.getHitTestParams = this.getHitTestParams;\n for (const item of this.item.composition?.items ?? []) {\n if (item.id === this.target) {\n this.targetItem = item;\n }\n }\n const targetItem = this.targetItem;\n\n if (!targetItem) {\n\n return;\n }\n const composition = this.item.composition;\n\n for (const plugin of composition?.pluginSystem.plugins ?? []) {\n if (plugin.name === 'editor-gizmo') {\n this.gizmoPlugin = plugin as EditorGizmoPlugin;\n }\n }\n const gizmoPlugin = this.gizmoPlugin;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (targetItem.type === '7' || !gizmoPlugin) {\n return;\n }\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n this.createParticleContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n case GizmoSubType.modelWireframe:\n this.needCreateModelContent = true;\n this.createModelContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n case GizmoSubType.box:\n case GizmoSubType.sphere:\n case GizmoSubType.cylinder:\n case GizmoSubType.cone:\n case GizmoSubType.torus:\n case GizmoSubType.sprite:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.floorGrid:\n this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);\n\n break;\n case GizmoSubType.camera:\n case GizmoSubType.light:\n this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.rotation:\n case GizmoSubType.scale:\n case GizmoSubType.translation:\n this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);\n\n break;\n case GizmoSubType.viewHelper:\n this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.boundingBox:\n this.createBoundingBoxContent(targetItem, gizmoPlugin.meshToAdd);\n\n break;\n default:\n break;\n }\n composition?.loaderData.gizmoItems.push(this.item);\n }\n\n override onUpdate (dt: number): void {\n this.updateRenderData();\n }\n\n override render (renderer: Renderer): void {\n // The material of the 3D plugin is updated during the render phase. In order to obtain the correct value, it is kept consistent here.\n if (this.subType === GizmoSubType.modelWireframe) { // 模型线框\n if (this.wireframeMesh && this.targetItem) {\n //@ts-expect-error TODO 和 3D 类型解耦\n const pMesh = this.targetItem.getComponent(RendererComponent)?.content;\n const meshes = pMesh.subMeshes;\n const wireframeMeshes = this.wireframeMeshes;\n\n if (meshes?.length > 0) {\n wireframeMeshes[0].worldMatrix.copyFrom(pMesh.matrix);\n updateWireframeMesh(meshes[0].geometry.geometry, meshes[0].material.effectMaterial, wireframeMeshes[0], WireframeGeometryType.triangle);\n }\n }\n }\n }\n\n updateRenderData () {\n const item = this.item;\n const gizmoSubType = this.subType;\n\n if (gizmoSubType === GizmoSubType.particleEmitter) { // 粒子发射器\n if (this.targetItem && this.mesh) {\n this.mat = this.targetItem.transform.getWorldMatrix();\n this.mesh.material.setMatrix('u_model', this.mat);\n }\n if (this.wireframeMesh && this.targetItem) {\n const particle = this.targetItem.getComponent(ParticleSystemRenderer);\n\n if (particle) {\n updateWireframeMesh(particle.particleMesh.mesh.geometry, particle.particleMesh.mesh.material, this.wireframeMesh, WireframeGeometryType.quad);\n this.wireframeMesh.worldMatrix = particle.particleMesh.mesh.worldMatrix;\n }\n }\n } else { // 几何体模型\n if (this.targetItem) {\n if (this.contents) { // 组合几何体\n // const targetTransform = this.targetItem.transform.clone();\n\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldScale = new Vector3(1, 1, 1);\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldScale,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3();\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n const center = targetTransform.position;\n\n for (const [mesh, transform] of this.contents) {\n let worldMat4: Matrix4;\n\n transform.parentTransform = targetTransform;\n const position = new Vector3();\n\n transform.assignWorldTRS(position);\n // 物体和中心点在屏幕空间上投影的距离\n let distanceToCneter = 100;\n let theta = 1;\n\n if (gizmoSubType === GizmoSubType.viewHelper) {\n // 正交投影只需要计算物体在XY平面上的投影与中心点的距离\n if (mesh.name === 'sprite') {\n distanceToCneter = position.toVector2().distance(center.toVector2());\n theta = (this.boundingMap.get('posX') as GizmoItemBoundingSphere).radius;\n }\n // 将物体挂到相机的transform上\n const fov = 30; // 指定fov角度\n const screenWidth = item.composition!.renderer.getWidth();\n const screenHeight = item.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const cameraModelMat4 = item.composition!.camera.getInverseViewMatrix();\n const padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n let localMat: Matrix4;\n\n localMat = transform.getWorldMatrix();\n const worldTransform: Transform = new Transform({\n valid: true,\n });\n\n worldTransform.cloneFromMatrix(localMat);\n worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);\n localMat = worldTransform.getWorldMatrix();\n worldMat4 = cameraModelMat4.clone().multiply(localMat);\n // 正交投影到屏幕上\n const proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n mesh.material.setMatrix('_MatrixP', proMat5);\n } else {\n if (gizmoSubType === GizmoSubType.rotation) {\n const cameraPos = item.composition!.camera.position || [0, 0, 0];\n\n mesh.material.setVector3('u_cameraPos', cameraPos);\n mesh.material.setVector3('u_center', center);\n }\n worldMat4 = transform.getWorldMatrix();\n // TODO 计算物体和中心点在屏幕空间上投影的距离 distanceToCneter\n }\n mesh.material.setMatrix('u_model', worldMat4);\n\n // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题\n if (distanceToCneter < theta) {\n if (distanceToCneter < theta * 0.5) {\n mesh.material.setVector2('u_alpha', new Vector2(0, 0));\n } else {\n mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));\n }\n }\n }\n }\n if (this.mesh) { // 基础几何体\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n if (gizmoSubType === GizmoSubType.light || gizmoSubType === GizmoSubType.camera) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3(0, 0, 0);\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n\n this.mesh.material.setMatrix('u_model', targetTransform.getWorldMatrix());\n }\n }\n }\n }\n\n /**\n * 获取默认绘制模式\n * @returns 绘制模式常量\n */\n getDefaultRenderMode (): GeometryDrawMode {\n let result: GeometryDrawMode;\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n case GizmoSubType.modelWireframe:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.floorGrid:\n result = constants.LINES;\n\n break;\n default:\n result = constants.TRIANGLES;\n\n break;\n }\n\n return result;\n }\n\n /**\n * 获取默认尺寸\n * @returns 几何体尺寸\n */\n getDefaultSize () {\n let result = {};\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.box:\n result = { width: 1, height: 1, depth: 1 };\n\n break;\n case GizmoSubType.sphere:\n result = { radius: 1 };\n\n break;\n case GizmoSubType.cylinder:\n result = { radius: 1, height: 1 };\n\n break;\n case GizmoSubType.cone:\n result = { radius: 1, height: 1 };\n\n break;\n default:\n result = {};\n\n break;\n }\n\n return result;\n }\n\n createModelContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const modelComponent = item.getComponent(RendererComponent);\n //@ts-expect-error TODO 和 3D 类型解耦\n const psubMesh = modelComponent.content.subMeshes[0];\n const engine = item.composition?.renderer.engine;\n\n assertExist(engine);\n\n if (psubMesh) {\n this.targetItem = item;\n this.wireframeMeshes = [];\n\n const originMesh = Mesh.create(\n engine,\n {\n geometry: psubMesh.geometry.geometry,\n material: psubMesh.material.effectMaterial,\n priority: 3000,\n });\n const mesh = this.wireframeMesh = createModeWireframe(engine, originMesh, this.color);\n\n this.wireframeMeshes.push(mesh);\n meshesToAdd.push(mesh);\n }\n }\n\n createParticleContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const shape = (item as any).props.content.shape;\n const engine = this.item.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape && shape.type) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color });\n\n meshesToAdd.push(mesh);\n }\n }\n\n /**\n * 创建 BoundingBox 几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n */\n createBoundingBoxContent (item: VFXItem, meshesToAdd: Mesh[]) {\n const gizmoItem = this.item;\n const shape = {\n shape: 'Box',\n width: this.size.width,\n height: this.size.height,\n depth: this.size.depth,\n center: this.size.center,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color, depthTest: this.depthTest });\n\n meshesToAdd.push(mesh);\n }\n }\n\n /**\n * 创建基础几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n * @param subType - GizmoSubType 类型\n */\n createBasicContent (item: VFXItem, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n color: this.color,\n renderMode: this.renderMode,\n depthTest: this.depthTest,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n const mesh = this.mesh = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Mesh;\n\n this.targetItem = item;\n meshesToAdd.push(mesh);\n }\n\n /**\n * 创建组合几何体模型\n * @param item - VFXItem\n * @param meshesToAdd - 插件缓存的 Mesh 数组\n * @param subType - GizmoSubType 类型\n * @param iconTextures - XYZ 图标纹理(viewHelper 专用)\n */\n createCombinationContent (item: VFXItem, meshesToAdd: Mesh[], subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n renderMode: this.renderMode,\n };\n\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.contents = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Map<Mesh, Transform>;\n for (const mesh of this.contents.keys()) {\n meshesToAdd.push(mesh);\n }\n this.targetItem = item;\n }\n\n override fromData (data: any): void {\n super.fromData(data);\n const item = this.item;\n\n item.duration = 999;\n const {\n target, subType, renderMode, size, depthTest,\n color = [255, 255, 255],\n } = data.options as GizmoVFXItemOptions;\n\n this.target = target;\n this.subType = subType;\n this.renderMode = renderMode || this.getDefaultRenderMode();\n this.size = size || this.getDefaultSize();\n this.depthTest = depthTest;\n\n const [r, g, b] = color;\n\n this.color = [r / 255, g / 255, b / 255];\n if (data) {\n item.transform = new Transform(data.transform);\n }\n }\n\n /**\n * 射线检测算法\n * @returns 包含射线检测算法回调方法的参数\n */\n private getHitTestParams = (): void | HitTestCustomParams => {\n const item = this.item;\n const boundingMap = this.boundingMap;\n\n if (boundingMap.size > 0) {\n const boundingKeys = boundingMap.keys();\n let worldMat4: Matrix4;\n\n worldMat4 = this.transform.getWorldMatrix();\n const targetItem = this.targetItem;\n\n if (targetItem) {\n //const targetTransform = this.targetItem.transform.clone();\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n const gizmoSubType = this.subType;\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (\n gizmoSubType === GizmoSubType.rotation ||\n gizmoSubType === GizmoSubType.scale ||\n gizmoSubType === GizmoSubType.translation ||\n gizmoSubType === GizmoSubType.camera ||\n gizmoSubType === GizmoSubType.light\n ) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || [0, 0, 0];\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n worldMat4 = targetTransform.getWorldMatrix();\n } else {\n worldMat4 = targetTransform.getWorldMatrix();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = item;\n\n return {\n type: HitTestType.custom,\n /**\n * 自定义射线检测算法\n * @param ray 射线参数\n * @param pointInCanvas 屏幕坐标\n * @returns\n */\n collect (ray: Ray, pointInCanvas: Vector2): Vector3[] | void {\n const hitPositions = [];\n const gizmoComponent = self.getComponent(GizmoComponent);\n\n gizmoComponent.hitBounding = undefined;\n for (const key of boundingKeys) {\n const bounding = boundingMap.get(key);\n const center = new Vector3();\n const worldCenter = new Vector3();\n\n if (bounding?.type === BoundingType.box || bounding?.type === BoundingType.sphere) {\n if (bounding?.center) {\n center.copyFrom(bounding?.center);\n }\n worldMat4.projectPoint(center, worldCenter);\n }\n let position: Vector3 | undefined;\n\n switch (bounding?.type) {\n case BoundingType.box: // 立方体包围盒\n {\n const boxHalfSize = bounding.size.clone().multiply(0.5);\n const boxMax = center.clone().add(boxHalfSize);\n const boxMin = center.clone().subtract(boxHalfSize);\n\n position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n }\n\n break;\n case BoundingType.sphere: // 球体包围盒\n\n // viewHelper 使用了正交投影,使用屏幕投影点计算\n if (gizmoComponent.subType === GizmoSubType.viewHelper) {\n // 计算正交投影矩阵\n const viewMat4 = self.composition!.camera.getViewMatrix();\n const fov = 30; // 指定fov角度\n const screenWidth = self.composition!.renderer.getWidth();\n const screenHeight = self.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n // 将包围盒挂到相机的 transform 上\n const cameraModelMat4 = self.composition!.camera.getInverseViewMatrix();\n const localTransform = new Transform({\n valid: true,\n });\n\n localTransform.cloneFromMatrix(worldMat4);\n const pos = localTransform.position;\n const padding = gizmoComponent.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n\n localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);\n const localMat4 = localTransform.getWorldMatrix();\n const modelMat4 = cameraModelMat4.clone().multiply(localMat4);\n\n modelMat4.projectPoint(center, worldCenter);\n\n // 包围球中心点正交投影到屏幕上\n const vpMat4 = proMat4.clone().multiply(viewMat4);\n const mvpMat4 = vpMat4.clone().multiply(modelMat4);\n const screenCenter = mvpMat4.projectPoint(center, new Vector3());\n // const screenCenterX = screenCenter.x;\n // const screenCenterY = screenCenter.y;\n\n // 包围球上的点正交投影到屏幕上\n const radius = bounding.radius;\n const up = new Vector3(\n localMat4.elements[1],\n localMat4.elements[5],\n localMat4.elements[9],\n ).normalize();\n\n const point = up.clone().multiply(radius);\n\n point.add(center);\n\n const screenPoint = mvpMat4.projectPoint(point, new Vector3());\n // const screenPointX = screenPoint.x;\n // const screenPointY = screenPoint.y;\n\n // 计算正交投影到屏幕上的包围球的半径\n const screenCenter2 = screenCenter.toVector2();\n const screenPoint2 = screenPoint.toVector2();\n const screenRadius = screenCenter2.distance(screenPoint2);\n\n if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {\n position = worldCenter;\n }\n } else {\n position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());\n }\n\n break;\n case BoundingType.triangle: {// 三角数组包围盒\n const { triangles, backfaceCulling } = bounding;\n const tmpPositions: Vector3[] = [];\n let tmpPosition;\n\n for (let j = 0; j < triangles.length; j++) {\n const triangle = triangles[j];\n const worldTriangle: TriangleLike = {\n p0: worldMat4.projectPoint(triangle.p0 as Vector3, new Vector3()),\n p1: worldMat4.projectPoint(triangle.p1 as Vector3, new Vector3()),\n p2: worldMat4.projectPoint(triangle.p2 as Vector3, new Vector3()),\n };\n\n tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);\n if (tmpPosition) {\n tmpPositions.push(tmpPosition);\n }\n }\n // 仅保存距离相机最近的点\n if (tmpPositions.length > 0) {\n let lastDistance: number;\n\n tmpPositions.forEach(item => {\n const distance = ray.origin.distanceSquared(item);\n\n if (!lastDistance || distance < lastDistance) {\n lastDistance = distance;\n position = item;\n }\n });\n }\n\n break;\n }\n case BoundingType.line: {// 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中\n const { points, width } = bounding;\n\n position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4, self.composition!.camera);\n\n break;\n }\n default:\n break;\n }\n if (position) {\n hitPositions.push(position);\n // 缓存距离相机最近的 BoundingKey\n if (gizmoComponent.hitBounding) {\n const distance = ray.origin.distanceSquared(position);\n const lastDistance = ray.origin.distanceSquared(gizmoComponent.hitBounding.position);\n\n if (distance < lastDistance) {\n gizmoComponent.hitBounding.key = key;\n gizmoComponent.hitBounding.position = position;\n }\n } else {\n gizmoComponent.hitBounding = {\n key,\n position,\n };\n }\n }\n }\n if (hitPositions.length === 0) {\n gizmoComponent.hitBounding = undefined;\n }\n\n return hitPositions;\n },\n behavior: spec.InteractBehavior.NOTIFY,\n };\n }\n };\n}\n\nexport enum CoordinateSpace {\n Local,\n World\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { glContext } from '@galacean/effects';\n\n// 坐标轴默认颜色\nexport const color = {\n xAxisColor: [216 / 255, 178 / 255, 76 / 255],\n yAxisColor: [38 / 255, 149 / 255, 235 / 255],\n zAxisColor: [134 / 255, 74 / 255, 245 / 255],\n};\nexport const renderMode = glContext.TRIANGLES;\n// 坐标轴默认图标\nexport const axisIconMap: Map<string, string> = new Map();\n\naxisIconMap.set(\n 'light', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'camera', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posX', `data:image/png;base64,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\n RK5CYII=`\n);\naxisIconMap.set(\n 'posY', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posZ', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAFO2NT0AAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGagAwAEAAAAAQAAAGYAAAAAoo8/3AAAE29JREFUeAHtPQt4HVWZ58y9\n ucm9N2mTPtK00CJ12fISV6XlUYG2LKBJUyhs9bN+KuBiYakr8mqSFRfETUKpFhV1QbHih/ioFpomUVRarK3V0mUFu0CXLrWUU\n po0aZr0PnNnzv5nkjPfnLnnzJ2ZO/fmpu39vmTO+c//PP+c92MQ8vDDVprW+hixwmi8pTtq4BqBtobYbkLQeSICBmOECgPkIq\n B4TAtdEovQhF8evpw+uN8N07Zy8SAXg4gZ4Xd9N6Fjmf+zoiBDvawUAFACMxOGIyWiaooIKKGQyI6AEmXZxDKCPSnS3An3oVn\n hq2gQIYzjhp/MOTiSKv5PfWUQUZRchFnOpUQMSMPcD1SSpnGINhFH6gFSZ3N3tJHxMYhy2UMJmIo6kRMCJoUSSv3EkOjT+mZg\n OymiNwMjvFz4GlHuIgIKJ4g8LSSiBOdEb6Q4wl8W0ZH0X3XEcytvFhLQjMjKPfOLyqjMGSHMPTMCI2JPBeN/pWHHzoVcG27uj\n oQ4IhpZdyOpONQTT9Cw+cfeBAYzJDGA6NnaEI8hQiKiNB2mKDe3dIbXSdMhQSgIGN8BjNfaEdqlWa2huJygfAVYhZsFGoJkr/\n quwVYrvTB+4YQWIXx6bSR80w9xUi+Aoz4QIsoYUGT2js4OLxHSUuDoi5L9gkspTAnHMwfQc32f1CF277aJJLvqNyeKwsyK66f\n 9Hhxs5LwIlYNl1V1cqinSfeQGlFB7deZUiKsfRn8ZEQTlAGnaD2TEzAqn2WTl09IV/YBhe1t9bBN0axZbkZgQK9wa51pWUyJ7\n xQ1BLE32mrN0p09znUVpsgQxRl4F0lq0qSvyLcaHPaWCGAJ7tjcmlmuq9mMW15/gZJr/HGwsIzmtaW9IXqMR9dcyJcEPBNqOr\n KbQjC8V0ro43oY00mRGzhVmb5YVTyjEq/NHmOOnW7ojI3XSqLQsIfkJGBWDcAyysJJZxOWlHwIoY+jkRKGwd2cJ8UsAYwy1yU\n dZ2MgumRAnjVtYqUXnVf4z48k96csw0rBJRmcUe39C+vYazCYG/04qhCLplsisMLhIAqwyzVVjK61LyWQJD1uwUwGUiYJTiV/\n ZchMkMgGLJn1PkJoNUuB1m5sNlkOYgGhgOqopmyNHNKVw5cQEFwZ3H3/MgH9kys+McK6AYyFQSaI9sZHaPpejrUIV8Eq7FSiK\n P9OzUAe7FUCJHL3CzA/XTP4JqgyeJtLBFpYzu5iA6uBZngRgjNfrJR4CWwkhWbMeu48/bmg4kHnD6LoaQFNAlo3NXZGP6ZZA4\n AoTvhFMa4NG2GOgl9IZFWT7tan3acOZVzwyE5KxltIQQrFgBPA3GCydIaRwCWQCKBknhAJA0NsgyP0rRIlHf2YBFJT1drV0RU\n 4PBvGHGYHbp1UApc+yxMy0rSG+H966WWaYLBwIotNWdUTfEaXbCjETtNbHt0HrPd8Mwwr+fHNn5FEzTBR2LERELILR9klJJW+\n D2n2JTQ3/KlRnHVhRnmjuqNgr4uMFlpcx7fWxH2gI3eRFsIyGVkCy+kFGw+CujFl7HalOpONHGXExnkpZ8IKmjeUj01k5BDoy\n BmbEu2CCuz4Hr8ImY7wfaoz32AmxNaYkjLBqj/FBWg1awTQuNGYsXieRcnYwWqff2xHZbsbJqvzp6LHY5cKskNNwJkO2wZuzy\n 4zPeQYS10HZuNGMkCvM+lG58Jyk08HPP06WTjgJWUDt9xbUfno/wjAm12SBkBMAn++7RZZkCx8mgyimHuJwFkz6Dppcdj4Hcx\n KB+Z5HYL7ni4YxXkd7ToRZcTYcXgAjdGihRn9hZQqqn7qBRT09ad9GN6a9PvElDWkPeuLigmhP7Clk7n1T0qW1W6AzEHDBRYa\n Kt+vd/mIYYi1bZ0U/ji6ovF2mmQc4ma8b44HSMcmvj3wCysZBDl823uGQPEQKZgwdwD3f91lOpasm/whNCL6Hg/kZYca8CkzP\n 9Yux9ZWqCsxCV095yi/2Uj66MTgYuJZk1DekWA4T/nvoa+jN+EYOu1CvFCcEInTMY1TNbfVxDcYfRtyKbBfXyDB6pudKDuX8y\n lvRnOhyDlbIiFE1MyFe2prO3iUopQ0wFtDZU9D1014w4sUIXDIvUrbwfpzJ8oQbg14aXIP2JTp81Ve2LiUTYh6rZxlDidwYJB\n NSDDj0yaAng2EWfuSX1Wum4JFpD/z0KE7pPTDep5cRkyFUSaFnzNpDxXAcKoaoGTaW4ZGMFmuQ0xhGRpdtwJ/GqgqDF+VJPdE\n VmZ1LlmNjzIzooAjGPR8ywwoQ7oUyMc1cJnLJ8GSMlWl7Q3ytRsgdVribOCi9/uK54eW0inVDd8Li+uIZc+60LY4vhZHX9TCn\n S3e2TDCn6WGM0yC0iyC8saUr/GRWeh6AvI35+TIS2BtL/Ajmhz33XeAVe0EJhJes6sBDediSu2qWMW9dmvx7nNJ2Q7VdJsPxA\n seBwDXNmyp+44nWLdFjjSTSryYG/DbCqkdZQJl9z6bwPivcLi7sAcgIoAH9RZ8ah63O/npDJG9Y1d6EJoCOsxz/HJcZWH5Kwf\n KTvqfRMXefECdGI1W3r8fHc7HLaQx9rag3cjEqdHogGDh7VUfFHjs5tq/Z15eRSaVgCDVAzaivQ+N8qSdjttxPgslYvM+OuNh\n p0MvYDpvNpGuSUs/s2BkfLrayTuTBrjm6yCosHkJjoLC/6YTxWOG0NSTSItlZxjzUGLsOaq0zRcilAyPB1obEf1r1yTJGVdEz\n VqSSjBNtBbmfcPqzSUBdX2gUfwoNomPd34TJjP7h3Y7xcyHa7cwW0ba/GKfzvtNZGmcMGPJxluDk2Zd+Bb2V9NSNErJ3awwME\n Ose+xwpW/E41isrw01Qhz8slFDiwL6D8ZeYioZnoA6/mwGdPuleueqgs71yVp4DGb4xV9zvph9hSZCx1KbX199eRiqPxeJ5jS\n WsytrFXzz21azXM685aSXQ0NJZ0a2/ZoPxxFfshPuZ1pPelWVIw9T8KlBM1DVUx5EyQ1BekxFOjVVJEv3h6J0c+oUTmlCFMpm\n DuY1ARXAOpdGNgVpM2D1wyzQX/rM9V3MoU0MfQGeE/dvFMuIZTkRhIht7+PnDAC5Hl9d8wzdhtIevfHMZmeobRwmjHQMtKEP4\n IdF1tb+VYHsDpxPJxUosHpd2qb2x5aneSf0BvZPaxgEbp3ZycT8iUG5mwpIAmuEHMxGPYTKEdgz8G5d0UfUDKKRkT6dxSJ4iZ\n AY1xo8dBULxHT0NHLyu/GJ0evlCDuZXBCYVAwpUZMIdovkKefbwVRyLII6g+dWrOZifEVhyOqSgEPLdmK1H70AqSnG6Xlub+0\n gHR+A2EkAHlVUbIm+7pbPD3w/nLnrTRt9PR10y1fVZDDsRwrSQQp7ztZ1Jav1o12AbJ2x+dTsqUwq/8HbXxsgBX43p6r2OM+S\n 0iitQXbnt7BCHn29ENwZqtCfzZfTM4UUcizJchS6e+CAHK1gEo8OUt25MOcZ8Y+BS6pb+FbAVjl/wWlLb5ZJLHuhYaabUujF3\n dkboWNrTb2/8lzAP8BpHe22tf0NpjrEkwk7U68ZQHFjw+YkEVwqOa4fRy0N8Z/HymkdQEFdIaQqQ0Mt4cl1/tzszrFuxGNN8n\n m5HnKFAZOrdm/ARKtPwDI3AcdoX6XO8/EDfFDOE6swZA4da540XQ3Q9cdiYM6NxY3aGGQHn9O5zugHV7SvBZPjxhDK+rbkLcy\n dGuDLDhMBxpjjMtIdZvBSfoj003GvGlIZtHhEWLsWnEo1Ui/QSGkMR6aY0EcFYw2D49dGm9fiYSA+pMfQkXEDBF4mIxgym4Lu\n auyukYwlhmTEr296YOk9TM/5N9ZuZuwgrWPlUU1f4KTuSnMZQYv0EeiquN0x2zAqVBh3hC5u7ov+Vi78jYxgTWL85ABOGwiNS\n DMfXJ2wagk1z5U55SsuMiAE0qjOLVY5gS/FNbgyh+rryjNnA9sWx2zUNPWqG+RGGxnAtNA38hLRDxp6NYfxXN6Y/qKrDv4LFw\n 1oGc//ESRRQlrVsqshrdjBvY8yKr64ndSqOPwAw2DyHppjTuDDcbQfxjlAw8ODdG8tdbfbh+Fgivhpj4V3QKJ0jP55J1eC0Wg\n WnGqoIxpWKplViBdZNiAILZzCdSgJDqFwdOjMQPvSx9VgtqEI+My85x+grksnUAqxpi6AVWIgJfn/hlo/wAdizvhljZXMIkef\n zmT3w2S/eK2Y/FFlTnzgjg8lKWOf+JPDjhll+8PfKAxqHBNA+C8eLvtO0Kcyvxnhl6pKuqCVmTWPq7GFVvR+WT5fBTiNXXQ+X\n dvmOTidHoGQ90NRVUZTZwII7hm730jT8DRiCF3Sp0XdP2DCkJQqq2NbZ0YrV0HalbVA9JxXEMW2NsblEwz8r/f13nvPNINSdh\n PEXmjrD3zOAPgR8cwzdZ/unnfEnoN/8aR/0Gp8sMNodCKBrZHcIuTEqb8fQ/R2peKITqqpL3Ag+kXFhsuIIbEZoWNUZ2enVTs\n +O0Y+caInfnXKIPOvBQUexErysaVP5/8ixxCmeHANHNZ88qasscV7KoRi/XhEJz79zPe6XI/Eprhwz2qhvG6ujQLzq4y8GHYU\n mmDx7yInmjh1DD5nBCPwGJ0xP4chzAMZDbyMcvsC61GelyOmY0bbktRNpHGLNhKLHMdYCGF1i1zmwHX3Tkbp+pvQEGhwW3Qki\n gTDroWrkz3D09F9EyRQmLTH0tDJKa68VcupEdKRBpmix4V6uivOio6KglU2d0W9baYUlhk4u0iPkhXSKVZGTNU5X6OA4481W+\n 7McQy8nSCNtBzT0vp7rtwou9biS/emjgqlMiPYEXXE0C8iqyuBG4R/nc2OEmXmphVWSQi/0r0TW421WPT844R50Ztj4DJY1uS\n BxcETPxfMip7HLXLjdZa2NycVIVZcXRPIYM30j/nP0ypD9uv6U0PvQZXAcyfM5xDxspGvzO3YmHgEWKykbrsRAL+EvsL79/jz\n 4lxxpTH0HbYZN1mlNuIVL11fBZeiKmkfRpLJzxlz/IIpMv7cbv2uUGHprD9HICeWUPw18GR1MvWCb2e+NXI/+oaoopzht9WCJ\n oxtAVhiOoVcpscTx/nw3tQP9caAJTIIKQvKj36a5cvL3Ubki3NkpoSoKmPphhVGVwSZ5WtYLcSCvKNZQIcNaDG3pvxUNqfttZ\n c6beB+aWcGffrMlKHaigi/VS4w+mEyp49oprx5fh16LrbPNwtrQhejDNWugYc0aJdjSFT1RQ3N1x+BhMkNe6IuuliuBg5l9UE\n pugzPSdN+d+BeAczsLJ30XTQy+V4xQYlBYx5kx4hhC6sabY2j7sf3ovehw+s+22ToHPjV3ftUKW5zSSyR1I47BuBemX0pPP4l\n GB5LPo53HHpCkjoArA6ejRZMfR2W40havFBNhaaBXd0wgoBxSYdKm1H/0JuvN/Z9DcfVdW1Uvqf4PNKP8MlucUk7UMDqkO2ZW\n KLRnb0ZNl/LK5MtD30R747+wzc/p5fPRpdX8YXBbghJNxER5xeguw7m4DbAYtrTUdD06/Dr6/dGVSCXyfXVBHEWLJj2GqoInw\n J5COD3Q3Bmu1EsMdQa9hxf+l4xjNJJBW49+AfUN/9X2XTm38rPwKfnP2OKMs8QO2BvAX8IEM8tvgXNmjrUh+xKb0EuDD9uqMT\n E4Gy2ALnAQl/ThV1sbRImhsuB59JyNUWIokqLgL2kaeVJEUAxYQjuCNsM3npKa/OJU6LGg+TUPo2mhecVQqbgyMP4pO/xktDF\n MA2hrtkBbs4DFi/XcdawN7U/aXz8zs+JKNG/ivxdLpSLLwUklGq5jJ5m5EkM1odeia2riMDinKHVED9wNtH3gLvgguvzAV0iZ\n iK6EjzBHAnVFzqwiioOzjswpVGpWiaHA1Q2JyzJE20rDhfpl4EQe7W0NDP+vrYia4DloVnjsJhzrQhfBt5QL3Oxi1NrSFeUu9\n hE6huZUW2PyaqKqz9nmWh6JhfhiUB7qSEndfoVIykiSAD0w4dFm6TQr/SACfI5vsYTfKbAPOQBOeVR23lzqGCqXHmujH3gABv\n RM4qmfjzlAbzIAp3xexlJalZkJYEtTaG888TJM2Zxthp8Ke8gBuCOjDAU+dE9X+W47akeOYQzaFydu0TTtcRY/9XSZAxhvgPs\n +HG3Md+UYqoZ+Dj8e3wFzOOe7VOukRYdBcQxhcoWTK3FYJrl2DCN8aElyjqaq22yv82DIJ+kTHAIXduBP57psSZQ9nh3DmNGv\n 1sBqIpzBRDUMdrI/qUPgFoO7WzojX/eaF3k7hgmmX+GBebbnTuYOgl5lIeWf7O5VY/mV6+mbY5ggmMrB0Em4F0rQV2GmOmvKh\n +GdUE9o1JVI+GbzlEq+9vnuGLNCbQ2khqAkLCmSW6Ak2Y6ZzHTjIQxtx7YgCtyWq9vr1ZaCOsasFP1gEnxn6FaA3QeladzNRk\n I1lYKZRbj9IvzlXOcnzXZ7DRfNMVYF6beT+g8mP0WQ9sUS7Xr3UkeElMha803CVjsKFR8zx4gMotee7NiVuhppWj2sri6CklX\n 47ff63e14C9wM/hslXLHBz3ZCZKNTWEk5xonS9IqUZCIxR0H4LOgFVkNdXwVtGPwh+qTfRkjBagbc7oeHiEKGIH0QafhvoaC2\n 585nw29DfFxsoPt/xVRTYe71KyQAAAAASUVORK5CYII=`\n);\naxisIconMap.set(\n 'negX', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmCAYAAAFKLQTJAAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGSgAwAEAAAAAQAAAGYAAAAAdrOvGwAAFQlJREFUeAHtXQuQXFWZPufc\n 7nEmT8Agj4INBOZBpXZlTdx1A7VA5LFMpicJbuQRXB5qMLggYkG5taJZQKVgRVxZeVgVoJSUGCVJ98xoDAmCEFclSm1VypkMJ\n LI8IhjekEnSfe/Z77895/a5957uPv2Y6Z5kbtXMef3n/8///+d9/nOasSo+rucZ7E8tZq5cr8cpf1dvXwAbeAbTPTIPwD+uAA\n uu3Ex+lVFQYDCTeoVcxkwZCvEKsU8pHyiWwcc2+k9u5jx5qk9Jjy7l51z2S5l9VgxlUn8sBainSSnupLAA96/qCTZ+0ZXKnGk\n DmIfJSzHgCRL5gE1mErufqXP6/KRkcqB0pjwVgvEz8bNW5RjnP2WMEgqJBMCl9yEVp5Qb1AgCoE8pMB/K/3cYP7O9N/OEHleR\n P0TFRIGwqSKRP8hQAA5XI+Gxdk/Ie1VGPwMBQ7FPcMZvpgTzJzc7iZkzeTHM0UwOZwlXyo2jigwXIwpMYVeyHLmjGchr91WXI\n cHlcXb4USTOxYqcZA+Vy4B6t4ZgArHmM5RiXm4Oam5Bk+EKmEeSr5hO4sTWgEI+gbGhdOoXIH2OCiu3gFCrGiox6j7fv7Qj62\n aHovF6WEeoxyt/UP9UBLmFGqPFcrbTcdh1bo6/T7Foul1MyrtRD0M4OOfPd6YyJ2s5wwAh5JztYJKv1IHL+wuy5py905nqm0l\n 5glKECBTtxcuTyUMUiJEoQ9UEnO9FRMoWVWm4AiGxI5O6VgHXjwBhLNRr9CvyG4rIWLnCSfK/HwvkkEowxoR0kidWYLM24nmd\n QOv7fCKEbMxrlyoxJiKr0cCuUGFdeYU4s08w7x88xm9VqXovEHCiEsl9oe+Sw0e8d97Q42z9OnKVx0hEJeou5jQDUsrz9Tj03\n l/v6sl8JRTXqEBZTgbTqV2YbJxQtIBc3NqVSt9UNB0JRYmEa1spFKNpnL3Qleo7wQQZIzKcSX0EA/62KDC68NvQrW9S8cj4eQ\n xWF6iwcssqfjDTezuT3g0qA/jchu7+xiBc1FPoDAkkSijgZHhgyUluLvdcAU9lLV867GjuyodVfp1QMEmphQAh5i77M7qQsxU\n RXac+ET2iklauECpXSi7Rdu5S4R39qR7yB5yMJrysAKp2PZZReT1X+n6BKY0/k8on8H9RALW4mN926/mxmpEX6xH18GMivV/h\n Gcr09AfiAvUnVUI9XbSt7oAI2sfqeiLXcRWIiMRf9IR6+gtEuDe/noh1XAERyG7MxoWACIbdpE69Xn4hnHMErcnqhVDhQfcSt\n PqOng2Pifbuh99RiWolXAhX58Mw/dd6Tl9coHxREMnlLYG/Kk+h21c9sU8EU/xHAnySLcCOSNCbBvFWHvkLBYbG/XTBr3xw9d\n 4YI+HbqHGxkU8Dj3gLHFCC4oL8waBFAfp0QhQWnK32JA8GI4oLf/InCB+ux+kEKD5GhCKjhCjO6uMsjcnE4iiskYgCqoRYtPQ\n KB7kliSjAwYHUQp5jmzAsBI0XNXJny7RZc08868F9Cq6Ya0WkWOZovHxmRXJ49+6VGE960eYWouLE8KNwL2HXKi0FX9PVnQ5q\n YBRXpeEYIVsEGPCuR0G/ZQtvBcf57sNaDms/+rwf+FsFVnlGgSpiBFOOvVB9WyUEaoIV4uqunvQ9NjjKMrKjr3eF53n3lUKGq\n rQdlejfuMxvupSCjaZhLtiNCeGXovF6GJ2g19mbcfS4qL8oI0N9vZdJz3swmkGFk0L2ZD0xosL1crHzdK30ZKxbIvxoXxKjRd\n AZ6DSNjBTrrgTjmzzGbtMRjJVfONzxXC8YmnQ6YOhuMHRNKE4PDGWWfphOB/Q48mOMfAmHAJdF48cjjGo7BYoI1giKJqqbi+q\n WKIRHfeiFPo5e6DGVoFxI5hLPrfwAQ+Wvn+ufTgRbTgqvGsD8+iblMsfMhDi3OZigYvNuTGpeVQwodzDTs9tPpX+mNoF6+CWs\n L2PVTCFonBuecVE5HM7niV0/W3KCqVDNyQTmC4z/c7S8tDkjDmTd+6MJ0MY3o3HNEkY3+6apLOhRZWwvGPPdrSbgZo4T2MJ6L\n VpAwZzQxDya3oxhaITH9h5wpndpMxa2VJn8kd3Ua6G7M5z6l0I1PmkYLz6D85fQVha65d/44whGyS3RYmCWq22uRVMbF44yQS\n XB6d/HfEYw1MekD1UdhY7g9sYV2UQ5PoZw7iwiSJ8R8qihnvzBJ9k89Nwbg3CDPJjrnWLa5RFcXNeZ2uAbVsRmvzi3wLanbDG\n U+b/QbjYY4sc4Kq4FItiSFF1zzk8PKeIxRigBi6lFWEz1KSDdxb7KTzDOWK3a9HyV+JNCiKznBkcmet5iaxIjIyojlrZPodGf\n psIxl7N7MQ6tjcVXETFq+LEeWYsupafOapty/IK1xsVcSUZUeWw3GmhJKjlby5l4RErvbZU/5gr2UezTXomJU0csLRrBeRYmT\n aaqHoK0YkTPMdiXupd58io9rt5+EkirmD5rds8a47zKRK9iRqJIyALBk/I70fjKwvwZJ9Ha3d69dswOHyorTwOha9aIXvbBgd\n 7T0EouQf3vxYrzOD2N/NTj4P8WEE23H3PMPXz+/dkoTLXhmhnBofAtOPSq4RSH/ynpJM47adG6HdUyQfmqYuTPGz819a0Dbw1\n D8sfUQjyal5bX2ObxTTajaeXCFTOCxf6fUEFml0NcU7rDl3QtylQ0i7BmZLCvdyXzvO/VVMAKMqMLHsFkdoptFitGYPnyHI7U\n TiqH1G/Mkq/DVHSz9NhgFN5JyKmeyxdgtvBJaHVONN0Uph2S9lTm96Y0Pa4sI5imwAq0cPiiZ1Z+bF5/CyO6PwtVcTYuNq+ng\n qFvohBzS8Fj6nVVR086tkmi5ynJiHnlWMguPP45T7DhQkwNPlr7+MuGIji4uAPWQkVNZIoygvkVBmxzr8YF34Cqg2l9fb+k8N\n qyHjfOuokSF+Lyzp70QyaqRkbABJ23zjBlkA5fTqY0prS6xXF5D7RjnFA6icTJ7d3rn4/SClaIKgFMfLcYE8IR5445E1QQGNX\n SEYYqk+6G7ZkKKSGNDA8sn+Hm3jZOv9Ejne3bGhXyjrkPncxXUcAzYoRw1oip/bF6fEgjXs5s1YimkhpvJqiQGEtuprMZvcC+\n HzMKOsvR4wNGyJILEoif08HaC1LZq2caT3+xA6bogVTAiLIWixRyP9MsyiJp4xakwyYTMbTnYBvLZySqJpUJoyoO/hv/jR42v\n RwtCTql4ITNZ0Sy7M+jQHQ6pC52RNMaEUaPeYWJLp22UXy+akl2dAxIMmPGGNw4RaDqQ6481lZ3ZPb9gIogyBzXVBYs5bBR11\n yf4DJm0IwO6mIqJd0suCVaXHR5/dG4ZgiXOg4UaDAh81MqsCfFA81QcNsy0Dlo0P3qmTBuWO8n6fnGw49B8skonWzO7TUyEgV\n sqjCXMRsvmJUsmniMeDLYgVcCRg36qwnHiMfF64qBgiuPnXCM4HAHNSn8YahwJhwjWKt8MMyGH3pl4jHCc3PijPCJxwjGvQVR\n RtAlq5vB4ST0AjG7qDBEA0OcnxWlLpIyjevB/DfRBDDyqWhc04QNNxLa/ymzne45x3bSTYfyzcBIqQvcgq4tNEMhbcqQlSxmw\n ID24Vtt+L0WdkhitueIC+5o2BAZDxhU+aOidERixlKKG+1+nU9EAaL3QKLp4x4uYk6i7sD4jCgziGjhsGhZE41rRNjvRQ37wv\n SOgSrPqEagGth1qEjlkirzdiAqpjEuBJo2Ue5Mpb+v4gNGOlJp4xEzBqC7FXBD3PxNpsBQWZUBbfgi5Sc3YIQCZKhCbvwzG7b\n E4eodAxt5w0iOPcgDoRtVIBtihKxt0J3FFi754hWuUNW7uCZ8qNJ01etaU1rn9HlTo/FoBvGv1NlIEnfysjAdiueqXwx2S1Z6\n ksXse4kCTq96cHoV2xwJaUQVpdjVBkon8yO6969g6+2i7j9ajAlYHDxgYoLKYGSEEsikiFzTl3+8QPaRaZIpvao4LpeRlRzGr\n 5mm/FTlcZRwpSmN4oxVSwEPD1zzATe3Kzbqq/RR900u5dWSi9ci8VZBVKPl0EDRAvpI8CQSmDBWNUWkJCMKCM9PHLC6B0tPuJ\n Adscd+p/JGXQxiMyXzLsSVpGUYH4rWCJUPVc3KGsKKEUIKi4cN6ArHdXe+Tcw4wtZmy5oRYobe6tjnvbvHRpIEX/Un+H14huN\n zleSviBGFeDidOsNl8pcqXC8XDXoTzDbOrQZfVYwoQsMDy450c/tg8SDnq7hqXKzuvtCRytR0bl8TI3qhdz1+eev+91//Cnqw\n izE/m6On6X5IHb0324jTyv/s6s74iyI9vVp/3RiptgCV5pOPr8KrC9tbR95PJrMHRpIt09xELptIEp5EMpc98J6TS7a0ZdumZ\n rNHsrn7/BftKiXSQPimUQgGdL5zYPG8rMcW4oAGf+x09PaxuWFdZMUZ3Wl+CvOaLUnBtszp3rANm0nYeG381xCF0MRHei9cBi\n Vcib/YDa9GioV2+fC3movZD7V3f3f/eJdlXBTySiY15T3JvggTu+uggFnjzWQt9KCcPWg7d03j7NvHpjKxs/FacJvyjplCBje\n mTuQHGOy+5CIT4YkaBwX144rQNV3nZXaNBQ91VQjZrMHc6/uYGH9yLAqr4XwTU7M3YG85Agb2Yu/AvxeDdU0bBoIpSGtD2hGA\n P1zLU3cvZlo/xm7tZ9VGZz0I1EUhuI11Ae7urME0sR5HQwfA2FbYsD6JpeOzJe8EVSEBWptixnoqXpT4R2Snc6+WKtCEsmD9u\n h94L8GWyKOhhCoCNSkEhvI3wVD+5iroBlmE8I/KHsYW2fYgsgEeIXwz8OWeV+MkQ4iv4hGXmIWSLUtVKWRHpucGbN3ETo3siP\n I9WFCRYfIv7eAbBMXZmSjjSqx6q5qE4J7mjR2pvjsqLX1FChnKLO6WzKXdoIo2FtHXvoetzDtgRo+5/8T78GjO6diiuwFj47S\n KSs9ZjjNncbHzMxMuK4XI7ctahnaObIUicIfa/gPy3zLu/AfGgXKbrfZIGwiJcaKVSfdrmDj8XUXFwFuqnXPaFvC5a2l8LPmV\n VQhaxVIp3coGKy7S2CA2nt+VLM1ESsQGHO4qVrRvjJcDLkBrWVeKzZIKwWb1XWgVXyiFQE/D/ao/YHD8cjNZbevlq7efzoQwG\n bkN98P+1ho3Z9/BU4axU3OVv6hCoIynoYyYOZTKqLuY9qEpin/FIjB2S0iHO1j9WCyehP03+kkAuyk0Z1uhlNNM8sBaKv7htu\n GvbZWB3L/GvuD5h6oySHrEO8mAZEHhsh8qui9jA2CsheCAcAsonGWAjUdJthqHhA/HEw7hGCmXY1p/pZUEOH8cp7oLddhQCxn\n qS91pqwzMs2+fVIYuylE/KqgvG0NSLAoVfyjTG3o2NWghaELnY56N4z+rD8d7jXhtx6psTQLkP/Z5rU1hsE7rxpnvzwjWbyFS\n rhKYKVh2Pfznk8qwEvMGyAmyKv+R7EkHBOn/G85sux6DeNmdUWiSrGQq3g4oX6SDFuKOUZmVZhCy93UAKNxwW0W3SL5WOkc+V\n XJ+vw3cJExBArYyIx2QLsRz/X84BxO38ns0nP8fBvzHC6QmfVYSIJmR7Mp+chrpAq3DbvmPxd+TZXFOAhSRgPxVkYRQNOkCr6\n /i4Tebz5WxKz422SZhMLR77H+s5ABdYFCXx9oAoy+syuzVBvfBDmMvO7rJKvnRNgIRwnvDBm4SJi4Ba9lBF7T++EschSHGSxo\n t0w2Qk1FRCVjKjnQBQ3q+O5rfGPbcqo4yjbgOtUhL2ZEu8FQV+18b+eDugN3gb4PsEIOxlh10ARMmnraSD5dWZyNWuA41IEvZ\n kS5w5XN2P5b3bjkZ4fDlFPRvFZ2pl8N5KKSTzEh25XglHZAu8BN7MCgucvU4igTL+89E4ybDpSXgcUuZQQekC39zccoH22DYB\n Uvcch8eeYRJzBXlwCbT8xLwZeWZH8YMy4gfyOtgdLfXfzNesKvDQOYQTDAvhX1VZWYwZlQHdSzJiGRlxSRkr97tDw6oKCOeH/\n 4RzocvtEHiMP5FDDxWMzQbfAcTjMPY3+Dy4rdteMJA/gh+HeUiBet3WSrQ0dO6HJuIO1W4lOsTtJw9lMJz0KVBJvbKYDtJ5ro\n MQgrhfK3bMaftFCjlZR2oqF8yjD3y00XTD7kEyMKXSXnGIeOX8rJeG5rhhroshebFrcva3t+z7znbjUc0u1fxhvcKl8v3FI5D\n yXUkn+YJeT+6+6Ps+OavTJ3VerIaN/Q8RoUoALyzsQlz6LNVuLzLfwiYB8rDHVQQmHVaDt5gGy3jMTz7gUNB8xfqsqIglBFLe\n XRLtp+8FBrehOneGbY5Jioc8Ui8VqQMwW8upQySRckWooQ1PHDBcW6OfrVVmt4+VGAhFzUBjYvdV6+ffQohb2QA77JAaFeBOS\n vZ5YvKX3cSyVPbux99qVzRK0CKl0L6Urfijd9/L4c0mg7F4DE+dgvMLe22+qMIGhzGFfYjcUHpJghrbsVFEfzreCgk9g5hMTw\n VKYSQ0EsKO97dtg5GdT3FkJaKh3KewL7N9wCzpxRcE6TNAo9XQ0BVdb/gsa9j+ryllb4kUbFClKD8X4lw31lva3qq8ukuujVq\n MY84QvTnXFl+60bPXGd/wuEtructAtoL0R0dWTV62Os6zowl1d7MrVohqsBkSzTU9/v/xuWVit7vUfl1l8YdjDnP4uRsk+OJp\n 8dqGk3TVFd4p+FA6BxsrJ5a2Xigl1jzc3FvZ89HPs/5KuzBVv/VrBCd9PBA6mOuK38Esc7W4+vm5+xdCPFFKOxFnD2/AWGOSE\n +MYMazl2hg/2gKHo9ug1LbPC6PAOzxgD0e5ZletzLoiDh7wXH4Re3dGTurEj1vEX9dFaLTwE+tXI7Ntdtrav46wibxUzeLO/Q\n 3dizKPDgWRRozheiFhWX9RzFJvBMr2dP1+Inix07EU2hl18NC/XdjXeZxUUiUiaHMEmzf576MGVcKjCai6Q0N+1eZWQavb93W\n mVr/2/EuS0MUYmJyR9/SU5jMfgLPtC3E2L4AXV09nukwkfLj0PXsx9puKwzTtjCe/GlHz7o/FgUex4SmUUg5np95ZkVy5mt7j\n hK57DGu5Id5Dn6o2ZOt6M/buMRAjg+PimKQlyN4HHqfcNmIw+VbXiK5++0PzXp1fh1//7VcWWtJ/3+2rdRgE9SSwwAAAABJRU\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negY', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAFO2NT0AAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGagAwAEAAAAAQAAAGYAAAAAoo8/3AAAFixJREFUeAHtXQ2YVcV5nplz\n 7y7Ln7J7NyFYq7U8u/yJQWuraVoVGvwrWlGpUh8jIIXdjfiIWK1p2lWTaqomsYZliUESIcHwE42lRiUK0iiJKbUqyC6o+CgNk\n L27gBBgd++Z6TuHncM5c+ace+7du7sX3PM8u3Pmm+9nvvnOzHzzewnJ46E6TdXCFqHDZHx7XaWL675UN6TbhRAllLKZ1OY7vY\n Sc0ZcJEUwRMpUoCRgnl+gEMp1xMYlyOknlwpF0LMLqGeevKiamkDOy3mGiErMROMjIiY9IEccJXZ3iICuc7hEpJRU3UyhxKCU\n 7HEmq/InFrjQhS5hi2lxbWeUaVyYoO0h7ybh6FIFi7iOSSIpQERwL6TPb61JT/bAcYz5JZimEAOlQc13lEMXbJVIEuj4S0ahT\n FIHi7iV0jWuSoAhk6E2ncaQoYkcaY/MdSV4uCiE05PxbDhFqazIUyZDgENmUv2RIM4LkV+HWeyNGCNAtPVWkIXiOrZLJxASZH\n jCuIHSTxcW9ithlRum722tTY31ECkmZQMVlqL5uBXMlKYAe1gvBftyQtnW4N04pfaW5NjXJC9PfjYKqF6ZfF0Rc6EOm5HfMJn\n /rgzHrAk7sB30wRHRtZLpPUFVDy38QQf5aEeb0cYGI0cQpGZp5VtF7BbqCvOWcqwDFWIXoYr6MLuYWGaclybOaZ5+60/mECil\n EMke39EM0qDXyXXR0fuDA5D/PM9/z3q1XapMmxUAq4lYKCUSRvakSCx36BHGLfLvQArr4bXQEMdbVpQjy+UIJcms6GOLru8gR\n 1FRTuYES+k9SiESAZgu6I1AT4nzZ7uetGHu/QNSyo6ikl6u0bKFXgOzGZa+saAKCVIJPoALGCFW90VFDBemIlz8vSj/4MP2ME\n Mc1hG0XoNgf1XH7LJ5VG3iyy+CY3hSVw2RlasjWafRQGE6oENhmB4hGhhGa4CPGpJIbLqEZPc0oxGR8RuhDhIsXvQxsRp4AAz\n 0je1FXhnvxAkJ0AbFabkaGcEKe8zI2dgkSwSuAMlpLM2KblzDbu1ZndqPOjJA0bpvmE0DY9bkKcJh5vGB87p+T3b0rBF+PW2x\n obt6hnKdlYj6Pt3iVP+Ew92rhRcpHiKSBMzLMpuKn8v2P/yg1wC0uJ1HQpTLs7oOS2ad4vL8zfZSNW5gerQBUiKfUe3dDFNEe\n xYN1UvKMihQ4nK74MahWrSKFDCmHI9b1+GyigIUOe0cIo9T1ygupAbfYjYqfr57IuQRKBJqh7j/eJsZXXIIJzHQU9kHF/KYjB\n I1hQyFZe7XAMOQeR0hzTapOCfEiKFguIWfsIhefkv+S725xDUmkBqnEfAVh+IoOjNcrPttrK/9SvrtCNs+hhxFfoRCkIDTUbu\n us4GEht+hyDHefUOmhnZZEwKhsOUZlf6eQZWiJ5GQhOju9MPWOjMxH1Z6i4jL0CpBxY04vXCnKWlvSUrOcH12AZGAUojhXN7Q\n +LASP5SebmCs+kUIUkgyrG1rmogNdKGcMu+Abk6Ul12y99ZQ2L57pPbYQE7EJNqohfRtsVJe9dae7GBFLrMrUv8Ix7DDxyhWW\n tzJnN+wf1kEy7yHT5bkKjcKHL5PBdNH4LXWpnDwyyTMnZUY3tF1pC3ttVGYKnYZv7b6musr6OHxjKYPmII3moCKKIaPsTmLz/\n 4nCCU2j9AzORCPcgwEROALzXKoeGdEilcFE0F4I+IyJkhL2S7i2XzOldReGqn8T6t0sMx/KMXlsmdKMyoxuaL3AFnyTicBiia\n kik3G9UhNOoWCYjWRhHoKclmiuS33DKyugDIamr6BSX+JFku+UWHdTbr+hw3sj7h03+ORRegCf3qkK5lMGirwBRc5XiSosxEB\n G8epOiH7/FeIZxXXxakcH59Q1t0JVL0rXFLMiMuPMFhPxeek+SCmM8DMnvUs7OMci4GAWi0VUHmVIuZjsjct3GOEq/FHHMvBZ\n /k1HANm6IKw4IBiX+Cq+zNWohta3nDrjHeir7BajVVTeZGhy6N0640U8Ud9PQmUo/ZVuDU6JM57S4cUQF4wZ3R7HMkMsdlkgk\n 5TcF4AVCUBQHpihoha73lFm85zyA+hlD+p5FRbtEd9Ll5NTPEEvNTmkzXMrVrt1BpMNQ3WmaLsnCkq/osP7Ki6Y9aeci3t0+W\n qI63NnJJKpmQb4CJrqK3QmvRlHU7xYZk+XifmXEkyPOF5BQBmJHKIQoYI9TAV/XmfYo3FGz8Q86FKTDGURleZ+ZgogQ4kktyZ\n 5YfIdFe8u2Vnh7249rdBxm5KrHVkGRWCBlboiUr7RMt6MVTWkN8H5ucAL875jcWKtJUhB1t+ERaaBn7P27ZWh3lHCbajboSPe\n rMooRvBMb0KDsEzFo0IstexgnD1rEfYaF5kDXlzZR2DZ9ELwuhJD8fO8aaHvlD6Occu80PSuhNjKeBmNWtRyJ+fkES+s8O/0B\n xgez8iFb17K6AJGNbScxwX5OeCVelrMeDusNQ0Ldr6Vwpi0JydaQSyjimbM91rHZjLifjCdgjoRvvWLUky+kJctZj2wbe6wjY\n q+u2G3lRnd2PolbvNnkDt38SD3TFEsTJBZTTWpH+ROe5wib2WqFrX+C+HHVy2Os+zeG5rfZWh+b86HS87KVDe2XiZsLit7jz7\n 57B/JSZk407SF1ZDy6bUVyXqKld0YTyxlzlmUPu0IF7ti8IPLQ1+E/7aUcbo3FJ9ag+Ea3YzO9TrDPFiADJmciF226wMJGiCr\n MlFTtYoXevJNWMP7qndlXKXFCeUwQ1BxbRQu1lpvx1Lov0fiRCVWNaYnEVv8IgLnbQwNbo9IzykJg8E70KRfFUYEhb4BhZytb\n yacUMuM/f6BkZ3tHTtMRBIGd/sqwklgdBqGHxcul2lhqXX4/Iwz/ZB8w/a6ip+Y+BmHACgdGqoIPFdnTq0HFJEZlJ8qpmH/Cq\n 9vmzKMGbOnxy86aFxmMSozalFru4kR3PP3ICjy2zbR5QPr+nz/00R7lB81Ni4BZeDqPxTiiuzFuGW2iXlPwaDQIxgkvmbiX72\n wZbMOD9QZ45AZvpScgdeJeyuOObw1GEYGFoJLSsqGb5k92LWSzzKwyjumDFKakN9wnz1MEOOn3dlx1Nf3+ZTB5zUumGPxFM10\n xuqBg7SFhNDbdG7o3xLVS1pGKLirDMb6axTQG6InN86MeHF64x1747dATrBhaqcS7jyuMmjXpyqgCpmggbMKKq0vQqxwB7YB4\n 2sapvLiKDNq0b4zFcAXCvGSL97HkbBdqJiTmCOz5igjhB1YicK+TGNj0Mf6yLmxJXoeBKdO/ruUEdMDCEQ8rMOKIQ4PYbmeD7\n V75Hid0TCwm+BjDVT00VBlijrnlHTo+Zvw5O5KNv6pPcGJCCGO6MjFFMfcTmArzOH2srOZtV8MDGSU0Z0BWBEBsKcmmD9ql7O\n OUlEWyKcgrQFYEQGwgzCQP+xbLmcWKw24KtA8UUR5D2TFNuSP8UyG2TRxWMfGDogKHVZMcfQ1gfxlGGtjfzhi6O+DGaUjg7Di\n gUCZ0XpuMO5pYT+/ggadt+PbcHWaooib1nUGs6Nvnpj9jKFIN88ZcfiYMhTnQbUHJxjP1UBFEcUGutDGyVEGCz2PBnNKvxqEF\n QFE0H/Qc4H8OzM5jjLlFRX1OgLGN4ExdwCnTwD8S7pYweh8CXOU2TSNmt0XRrMuiuqMezTOqHHVe/vc1MuuMvIF6yJf1zOC+b\n hrdFhfxpGfwMgXn9hmladjDQBiWOAxbvrB/O/jCrkvQ0zZGhegxqdSf6by5SojAbBOYPJCztjwBD1dEfRFiA4xiVWCGbps5Pe\n jVdOOt8ToTP2PcRIQKM78sh+112Jy24lJmL7lxGcZSWBRGmgtJDyMoUzryQf93XNm/izQnQQsIwkxh7YVTfOYABN0rl0z9IGk\n ngCgg1wT0kW4u8y9co3KSISwz02mYV8MtkFyg08nUwvzoO94CT5Y0sRN/7wUTuAzUwlo3ULTOOMv2Iz+jcItZCgSdLz8pMMUG\n VQ2wLg2I/MQahmZOHalGNzZkj4o380PxneC3ogF2d+Z0+ND5W4nQfgqUAwOo6LUOqe5ttxxXUw4kcpIgvMWi+TBTDowG+JnJp\n e26QO4dGuDH549xhPWOGyOeAhb84ITKx7yASXs9LdnV+zygAKvWZVRFFjcOSgiSk3hobNCl8DXCJZ4lWVsd1JbpaPPGGkz8UV\n U7BsAK1XwqBBXSZTGOTEYWxkprHphayM+BWdeN0p4wdKweRyb5i6Myy8nZSTTi9eLxO530/tiWSluLnQ8WHfQgNLPvjlzSIue\n FBXPWRnFbOzSQ8Mzh4/sKKhScrmRiPObaitd51HJixPmrYyXOfbUPIamNO/hAk4rrR6cqJiu9id7eefyXhBlvALHNLT9hU3sq\n bDYVdjmfpY3retdLqg+Z1HrZ9tqy41L4waaWKCCKxNLap5I168UVvOets91JsgfwJsfgV5yCDYTDUT7WYa5voG4h2EgnMt2wT\n NHYO3D2LeASQ6EFtmDC9t2VQ6s3LVhBj2ap/heJSsqw0iHg7e0ToVXcQW+0kvwlYZ6LoUqJQxUYUD6GpqedUnBnt5SV1EUy1J\n 9ZhhphExLay2++HnwBU4rVEEXio80GKZ1l5ES65vyprxC8Y3Lp9cMI28ke//DtrvR5CxAMzQkbgaLBw+eNBUryyhd8FZN6v96\n Ol89ahi5SfWoII/BENf2tCK9zR+zQluExWq2zyn/ZU/ILrhhHId6W9uDcNPuRBNVcP7geQTDpY/R/3yM60B3obk5iP7hiOD8C\n O5+wmZlXP1s0TLHEcBYD33VcBTc6aA5HbTuFptCFiaMtD5RNmD61hmD9xSKb8EKTt6E1kHJi1C+APOetAWF/gtsyHoJF/99WC\n hldT7w3E61LYLbBQRuOSLVenqucRiokzL25aa55StypdXxu22Yqoa2yymxV0Ox4K4IXZoxjqkdKjZik85yfPXvG1F6ESjv5LV\n JZhpm6K/ONrsSmS1KH8RY/95InIjEvA0zevH+c7md2ZBXR07pPkzA47Kc4tqUZyonXM1ZjbHQHWia86pRaF7nNdWmcl4Oytkw\n OBpQ3tnR8ZuQkbBJNweGZiODHmcx5ttXhyIVeYKcMSacfg2zbKlcsoomDq28NbmpdtircelyMsyohS0LMPv6cFzmXXi/Re24C\n ++/zZGuaNEpTSY5tf8ZBvpibpmk63A+67L6GOezYhlm/FNiUPuh1i1ots7MISM7mbAweLQP5UBzwqFizUV+dFfEzjhW6ZKUfG\n FrTeqNKJqshpHeFq6FfQtGMa5cBZnTT7A94issI4piaiOYvx6AMFaCPugR/J0dlztj9DYcrP1uGH6kYaoXtU6Dp/STMGIdjrb\n 0x9QWT+jwT0sctWcC1tlwm4B7U2ak6iivpVhhnWlCCjVMdWP6amEL96ccTMQuTHZugs3EXXQ9PlXhyizSF5FIMsE75cdpWiYI\n 5BpnTRY311XM1ROM6+GjFrZOjmsUWHY3DtZM6TfKsaKVx77g7MyC1/qCXtimuFxHhVP1LT0tUGOkO5zp6NyNPqVER9bjWAf5C\n BN7t8iDoXpafxwNWowz2qqcGGPXNdVUrHHj6kWFmfbOtbGMIi+NtxIz+o2iSi4Y4jDYd7GYF2tlE2W+omrxJ+74yNeUVTW03g\n rPItaWAQyY5hfHac1ggRQTBD8tIw8wf5QtT9LrpXZHo8LzGQYbXB5QCVEhzp88Rri9OwqnP+14CaDJv+d4LPwNxrl2bOO+cyS\n Gaxi4xjO7psjDKZECLyKN9fN43lokp09R4rGP+Pk4Gme47RxRcA2DCUXMpmZ/4EUsy47VjxEoAWbFKjd0JVPq67EFUjKQLwgu\n DzAzALB28boB3A/KUgLY/ygX0T7IggZXjgxY8Zl94xzDPHvG/qGy88lKROmHWD1JZ8XrRzCWAMYm/21M0ICM2Kc7hmnvyJRpa\n eaoCJ5QNSP2Q00lAKcp1kdtU5z6lQwET5SaGOkwzO0c0GH98fglgML+JA62JfhQxzCJRIf5mJzGBR1TuQbqj+ZQAlhDj1V+2M\n PS5hhm0JFELMPgGoThOeSjH1UrAThO8cpPHpOXtL+eV/EJmql9Gp9A1BnnMHpmIKEfEKsE4GDFmlVJsMx7jmEkVxT6c3G4Y2n\n 5ojh4/Tj+EsB+gdGAVPqhxtjeLXM++75rGPxE1Gojmg6kZDrBip0O7o9HlwC2d82IxjiWil01jh1cwzTVlK9Fc/abrMRYDhDE\n np0Vrx/BLQHsDjofMyvnu4CwF2yw41ZJvUx2DSMjMIzxmLxM8z7wx6+jFnWPpnvT+t/9JSCSJQMwr3K/H2qOwTl4bPucoc5Yx\n 2cYLNS8iP1fT5rJ/FBcJv91/KJTj59f8Us98WI80/G4nGbJnnO668aa1J0KL7CCCc+B4nendmLMcoZCCg1xJRouebmht348Lz\n QfRZqAmwoWwihj4mQvabGxW+dWvKtwfTVGAtGcicTAARdgfv+oQgoNBSnBj2euQs05KxTnU5ggL/TAjpnlcY2CHz+40WsUWWQ\n Bw0igPE5glSRGwUidMh754DZrXKy+BGdF4m96i2R4gida1gib8bXQ4rQ4muB0wKxtNeVP67iBpsyLIG9o5Twjq1e8SU5MazPC\n anAPQZZ7DrxSTp53nB2dhyYn9gVJcI1vwYbzH5pKINIwkgBnJUsyLel3MACtMjEwwXB+8fu4gedHprSTEcYZHYch+iPQLd5kM\n DbYY1fMBNSULWHlkdUwihB3gT8Jx2CGimcNnWvq6P3M5huz4p64CCNglO/AKHFG9I6W+Gh3JFKpc3HZx6EotWMbRjKRv+hjZz\n h+TDe3Q0roDJdQmy+PysiJlIYB4+exZwz3vEVfG6PrBKPU4PemGnW4KZ6TYRQD/EDwd/C7urereOwQK6BM4Bcre/D4Xuy85Ig\n IZ3Ugasdd+CgvzpEU3Q7ZjFpycbZa4uWbl2EkA3mZ0SG7VW4OnOxlGPcdA9lmbOD8tsVJc1ya3saDVzoMvwExF2O6/HSkZDdJ\n Jv88n3sC8jaMKqSuszNrYKBLFSzX8NhpM7GOCutHfbkHGutNgzAovAaOznXQ4ZRc9XDxcaoaE4qXbqlLbXNhOb502zBKnpwxG\n N2QfhTLAncoWLdCKjtH8SpOEfyaEv6/hfxlIWcAiBE5RmDnYXJxEvI5olt57SJGDXs9UZKcsvXWU9q6y69ghvFmpLqhpRo7ql\n ehCYh9kMdLH/+d/h4K4Co1eQE+PQxDytmKpHRO8PtTZfhYBiH91Pj88sGk+zFKn9VUl/ppPtRhND1iGK+wY1dL8QYUEnz9k+N\n BzcBqr7gXk47fq49xnjIfrXvcMN5MyStM2gX5R3T68vxIjBlXL3XfvqOgXsBi4n3bait+1Rs56VXD6Ao5R9M7O/8eRroZbb1c\n ei2KB+5tGmtOK5KMNuqTi72VwT41jElJeRfN3m1tf4J+YyL6iokIvwC8uHN1JpYhMOc2pbfQP6zHkZJXeKm9sXlWZcTlrCFse\n ghcdIaJq6fcb72KvJsYOmaM1XYwnShjCetwx5FE6eCB9sBW286UlmcOtL9nTxg+MuO9Ozsu/77G+3+04346/NDWWAAAAABJRU\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negZ', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmCAYAAAFKLQTJAAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGSgAwAEAAAAAQAAAGYAAAAAdrOvGwAAFPNJREFUeAHtXQuQHMV57u65\n 093uKQjxMI9gm0iYMlElJiEovCqAbOxwDwlwhAHZ4WFHMjgIDCXpTjGGIHx3kmwMghgLV3iUA2Us85DuTsERFgaDMBASKlXEs\n YNkO1aQsUA8otu913Tn+2fVc709Mzszu3u3e5Km6q67/7+7//7/v9/9dy9jZXzcTNPbOrhAMvaECdP+lZtb/Li+p7t1UFEErs\n THdUTtKi5/RH6dUFAACd4gNyyBCfczJiAFohIQXn9EUYjGkz1KGhjnovwDUo6+Krrbcj+Li6zxQonbyS+YYm9qYFJXrNycPSd\n pZC1FnyfOeFOSxCR2L9Hpc7ONkrubSyXSVCiOl+jcW/gYKD1KCBNJEaRSH9AwrVy/RlAE+rQCC6HC/wZHnLO8L/OMCUvlL6IS\n RoFy00Uiv59AR7arEef8I5K539YJvQSFyPwZrvithAj7SADTZ2Zn8Kic7UQO4w1j3P2hJ167GHZkCrtMjZHrJSBP0q+8BNxxj\n ktMQQixGI3mwbgESsiHKY4h1ui2TxFJrH7N1ZrUlY0i6I9gng5mZ5sJ5muaAtDJv8A5j/zmpzMkWFECM5L2d184dCIbdn+uw2\n GumWEYPpSIrjFmArS1HagU1yumBj244h9lQt6NsJUH347u44TitEbIzJwz9QumnKsNdKzXkvX74HAGJfJLUUQgpNuPpWBEMIm\n RKD0i4wR4Di2ww4hfttckJLpbc0t1TtUiQPmZjVqAlW5NZKJcgTb75xORuTnGWDopZrMS4uM64UOTV7t0iTHVuQ9TnSt12FSe\n hkW6Qp6uFLtN481ewOdEI8ntaVMzlcrtMWFJ/WbmOk0oEY003Z7Wwc2Y4JxvwtDKvtY10PIVE1YzfywnPa25X6ITPD6yhILdt\n rK/5aZIPBCRRMa7mlLJDRznv145kD3egPjeAJE1HSN/OuaOvuLH2OcRTPSi9mzRcC7UlzClukiHtRur+J723Bol1TKdAHOZV5\n jky3U4yh1veIUYNiGfkzUXDM0eG3Ff1xmlaiNIhJp2tGTyIZ3eJORPUiohQBlDlL91pPiEJmLq1CNiAtJyoDMlV2I4FZzfoWH\n dHUPt5Pc5KSD4/+oI5bpK8j4/ret6ftHTlvNmUoTAoPXXfoQKPEI5rWZyoZS61ARUw4/GO6zz6WkbHPDFhUHmWY2oposK0eoT\n gcLuq2bmZl4+EZfz3Saimn6fiHDVn1UzYzMvn4jkasLGBZ8I2myjSb1afs6d8wStyaqVoZ8PZ36r7xpofkosfYi/r5F2b6rha\n V3F5B+ZaTxxccEv8YFcrfL9ZXjMguqe2CPS1Z99ROeH1noGxku/N9XwJC72aGjVte/jz/s+7SG3qDdm7D30qYGRz4xv+k0OCK\n 65IL8/aFGAPpMQhdH1U0/gD0YEK/q4/AGmSjNNmEmA4AEiBLQJESzJh+F6U9dAdoEdN5SIjpSGmF16nQe5JYnoiD0d+XmYYGz\n BGOs3XpR6x9FHZuZc+QAf0vGi3EREohLb8PWLVePbO/NXo+jzuWLzgitj4orvxL9NjsMeXr4p69dAO6+04bIZ6W7P3YD9sm+k\n JRgTf1fj4dmPLPsuL2wVxEQ20akYwZQjhxlBxsxgIv1YM1/TOdByTxIasYxgqrEYM4H1JTPj7DUpnS5Hb7qUjGwhhWqFcG60o\n MVBziWWC04xsDgUyUh3W/5ypuQDxdHHQ1j8t6Nx5schVfJxtRRtK9AtUe5oX6prc9bvDEyKoYxEd1diCxpxr5nBRPkxBXRc5h\n pD0zgl9GZ3ow++dhxidY297SMfo9MBMwL5vZ5G8ctt+GSEHc6zY6ywLjDpgRkXzDRomK+R1e35j7tSPqUR2gUTl2F/8U0drpn\n LFXYpVOBYQw9gXn37/kLlhDHhMOeTdcEESU/xVmghIFB0RrsI7WkkrE0Ixm9UigeqGSWq5WfPuKgsDU7jKaLngvzxYQWrRyao\n nJw1/JVdXtqcEWpE3msjOBM9Nqxuwkq+E1YWaiOBvWCcOW0Li1zPMHTX/Hd2AceYKpqY2/h6DKNNh+09yM/WY2FLlSmy16pkN\n 60UwYpxXH0B40nRVhZq1YveOIJBb6tNQB9T2vBah20mqDwY4U/zGMFELGBzAXOEo5hQa2pdcJN+2BjChNNGcTxGyKOHevLrD9\n PrU7Cn8EMdrpWLWfxJYUwIwa9f2d/sGVb4cy1dSFiTDGPdPE2HtYsdnXXM5Rt1eLLcMAaIttPgfHTFpuaf63IEGCFEb9tQm1R\n uv45kuliH/ADrkESrNjNdGn+D4GJUuf6RiZk2ak0SyohOiCPg5zBbO1OHbRczgG+jLW2w4eWEC4Yf8gnQi1xKN7dkszds4KGL\n uZKM6AIl3mhAZcbCa0ODcB4Zc+V7On3QVacyLq9SjJ8YxBVDoIFRdEaBql4cy1pY2ciwMJbA0IJcEoarGowEwjJHdA3w0HlVG\n J1EGglLqGEFCwR1pw6X5/J/nd6SaV26YeIOH8orVw1SVawRs8xr5ufOdF2GpTGbjxH4OBNHfupxYJWzFfhNhx+XuWfJvXzUjl\n NuuGJGutsHVzHJyj7FAXO/Uk3iUysfb/5FuUxQurIYWfs51TL6du6/kf6YSogH0gp+48r+rGeyGcDFAFIzgpH/Vxj5PxyTb0V\n ozJsu6NzckmoWkZiR3rbBq6Vi36qohCkSY2qex6w2mzRJIkbQxb6OEXd2XKbUmGGn8LhyxY/g/S87PvAtgJ+BjuBi/M2y8WFh\n 2iFZ3jft38JwJiyWEVQlWIGOH76YibUf0vsGbBO8WaiGJXFdMCaE24NebE6p+BDOEpgLBTZJzDQlGQnb7zITC+Z8EVN9avSVf\n 1j70LIhKiPMvtfiuHN5JD4KATMkNAnbFrMQG1VkI1DrotKWC0dhM1Gzbi9PLq5YOZB5MCz/UI1AEzThOyQsAaySFpEpTRiuaj\n Du3hM1oWyY5pyw/Inm7TYtf4WoETiVugv+UCZoL3jCmaCCeEa1Yosuk+ma9kwmvEgj6xapQ/a+kyNtBD4yZiJbowBiAgFYZn8\n VXJ0dQmIXlubHmvAijQy+m99jIrW/gTkdk80E0UZnfiva405dDsM9hs5yjPD45gNZcqHXCJzTkbWXC7tNM9Gk+iMOmOwDqXGN\n 7LMWMwsJaQwXWZSZyEn0oxyXhZGjwykN9xix1aSRjhLztb+mrndiFjTzMw+nPEaUGn3SLihG6zf1xQ4bV4uww8SVYXTptI3g+\n xhhR9uRuAxPaMebrDAsaF00/0Bb3Z7Lf5fKIMgcN6wwGNWHw+C1hEHqAYNmdFCXUpmEK0dX2YXDYDFgw+ohXOo4ENamrMj8lA\n osWMP99VDwpGWgc1CvjQQSRJzTBeLVAICu+FmbrBpR88MZsWPWVXjcylAXCzOntinHCEyf/B14zQiWpR+acoxg/vW2ZsB3lTp\n 2yjEyJrCLZn1oN86UYwTmh4dbfNDu3BtTjhEsoGbZjGAImXqMwNL7DJsRrPULN4MDiITXve10kxPm59p0OBebyITjRRuBA8jP\n 2bD6CQdvJHT2Nb2GNiICO+mYMHoTsfopfKEkpS5wC7q2UG8FjiqPVKMBAwZ0vZ7Vxr5eK8T23LijEZXxpMPJGsP6WmZmLiRQg\n REhPm3hse9TfA/Exk96OMKcRN+B8RjRZhB24erFsAbVpylsX5jeMdBl3le1oBrYdWig70KVZAfih2vkkVxuCiPd2Z/5job7jH\n T2Z+/UQNPFxOZuMzzpfu8mk/INlTV9DIKXaD+5PiMUIEMVcu0vyrDFjlf1sKMWYCgIjOSw+hsxb1QR3SJGCtY2wYULRSy+QkW\n QCf5w1QvGO0vDqJx+aqbFhhdtYmtkqbORRtzJG5MqMJXWaavhotrgvNIN2PdS3nRLonOgObA5EsoIJSh1WoWjsK8wKV6geFX/\n uHwMuzgzwvJF9bkfp71XReDCwIyRSVE4BtUMjxegqvWTaVJUnNRwzhZSW4xiAouO56OYIFqRGiHkumtV097tuSHyR33I4B0p+\n TWYff4uKk4MfBEYCJWyTodx5FGYOoVWtfE42lfCRZsZQe8Rew+28IQL3VzkL0dlh2eVZoxJ9zM4nVwYd1rs5ZHQGqKkRszC4E\n huI0bXSd2dxx2Yw5LabCVmhJjy3upg+bcSSdKUQlo/F+txevvFNMlSMaIzXtORPxumfj/W4Sq6W3A2+Mly8iuLEU1o3UJ15N7\n BPCweKr0Rz6/DW0oVndtXxIhmiNz7r1DNv92dw2qTX4q2NMvEFfk9A04YRTvi6119GW9RVIQvM1A1RsqknzrZ07eohv98jTW/\n n3uvEcYDjdKd3uCMDXk9qtvQPCqcvWM4ix89JDtj9A/nsCF60S41kRomqBuFoDbyNQtyp+AQeR5O2eZhi/csDF2BuWE1ZIXxl\n Z56fA5j+Fa8i7N1+cbsK9hMwpyi9l9NFEITn8EducvRLVwFRQRueNVSLIVdPnVfy6zsg0vv4pN+ijopClnfobJ75NCX8f7P9Z\n g2H1FLgaeljfXKW1gC3XGYaP7mkr7g2Xja/OLiT5hC1nbk/2BMyruggLa4QkwlPBQ00CDEtcv6Mr+ciHJXVSGezdq7+e9gYnz\n xRBRW54lCvwMrQZiV4XEDjlqrWOFeDK5pgDYWtTyDZdFhGBRm6jQT4nL+/emHZv5Gb3RWg0ZVFLK6LXcRjFEfxiDcVHmh+AiW\n 3tuE5M86jni19J2g9NRobeq68mQp1F9AkdgtC16JS5srJgnDODC/bMVA9rG0ae34FSmkpy1/k1LyVjvTNGEw8yLOzB7CLtxra\n dJVOy420eaAl0WoVBVNMsDLV7sGMgELpaTlLUsh2E1ZhoIHTo2SEIUC3kI3cw+O+3+cJH7N4gh2Drq/q8FnWZMQ8LkcW1dr05\n Y/lUK624damZQb0cxTbSxiKrkX9/DWok9/Lm0B6yE+hHSWEmoZpujT05UHi1IhFkSdn4XllUghsN+ctj2X24YZU+RliLDM0RJ\n eYlz8PXdVyc3W0LR1CFQOb8YV0pvRcuamKR5mZq/MzmbPuHgDxseYL1YheKj1QvTvqQYrrhwc9FV6RTSm5DVH8+sUd1PtG2Oc\n ugjHa4+XKnpJhWCsuAN96HWlMjBx2Hz4d9wr6awnq22zfNX205kQnsvqxWnCnyTNG2PLnRhbgqfm+zKIVAhODp5Hnxk8RA2lz\n EeE4n+LMSJwSyg0+n4GhBBn4+7+3Umn0BhTt+Fa5ZlhYhBhQLSMF5IqA5uAL+Dv/ANVGSQ/4p1kQLIIk6cNI9mSjG04hQMtBF\n c/ccFcnRsW2YbFPm1qJzgwwrGnub4YOH8a7zTO88PwFLUQdFO3J1UGLFVoHRL9zqxJ5cDyQyaebOK5RsXvbc0VPZvqt5DejqH\n zpVv694w0BcwWavLajqY/JVwyZIqwAbLLLxyntbOv+Z8J7rUQdQuWPdJNVNuhwSdr8fSRzUTdh/E8lCerBAUl2ZMOKKr3r+fl\n /A1Y9CXYGYWVjBKptwMSlGn/jOLJKt6yiGRPOvAUsk8zNyeTiLo3WbyDscYlkFhmN5MuOB4y+xRMBZ8czyDKx/8H07oro7AH4\n dESwPn9/Zgcfyg6RgED08y/FLB2T7T8x37Ms3EZHsRHSICzn0RgisCkC/pBy1OLoFEByQJXfKKiHoQXS4BL9tNiSEQIusCOBz\n s2Al0ERqblmr0W5XMgBpLKjnSBk8fgawhhQlNM7AmDH4TFSyCp7EgXmPaq3fFZIobDQ83rE6U90CMllp3aTWPIriTyghVHWUe\n ZSfLe3+Mklh10gZfI2X8kEwhefT34lSmBhLKDLgQ0gtO9+A8DTsKzkfi8DrQYSWVHuhCZWZkBHJjgCaHSH0xkTsIZeboz9dJZ\n HhhYyMyTXQy3pAPShfAMilVSk56xL8TkexBtSQCLvWQygw5IF97mYlNLdhVq/4iVVyDoPfIo1MHtk4BkIgCerNSJEdhxMGTv6\n QAQTyH0ZjwO7K8ZjxHtw/HjZ9EnpjKDic5t/8WQjEhWSTgk2et3+7EWGf9wzvs9WJl8ZhwS7XO482UpVcIZWnQ++yMGbzH8sa\n vcbybhDVYoj8AK5RId12shOjC7JbMIg8sOHS7lEkFsOB6ceVlCIpkkVgZkTTI3syhqIYQgK8XXc/kdOFv/fTNitJ8/jG35f4z\n GHzgYbLN/HjsflyXhGC1jJ5Qx27ZmDCiEMrt9ocoM5/Kvow88NlHmeNIUr6cvxjW9vUni729xcD1yOnfkvZDXUUl4Qy/0RlM2\n c4IeN8w0oQrREfArgltwvPgJHY5zQeif8DI8DmMOoA8zqaSDN0kFXdpTeN3+vCgJFY0hdiRKiAwS33WggsFcYgu0fLad1/4WJ\n h6J1zTKwDbVraWUQTIq2UK0EFdflDtODqtX0VqCbx/qSJaLPlIh+/XYvNxgoaZ2kF4FYWoJZqOJZEfMolK/LZr4ySsey+6MYz\n 5xppQRurDboJS/i8s0gMcvNTdIvgo/WpFsqz+QQW0B+IXpI8eEugmVa07akkAZX0OrwMsQyb5UCqEsn8ZLCj99Kfc4qn97MhJ\n 2LP6McNm3YF+B68b1+3GpjpAOw2I59IcOYgsOwfafNjd7YdqXJFIrRJdk343bJ5KbnuqUposWo9gjuJc3gHxit27MlFX3cz4N\n m4Bt6MSxMFZHlp0/7HVxM/eCcm/mlq0QXWCyJep9aegfsImW6v0end50adxBy3sVStoCg7znJ2oaTdNU/KLfmRD+eRDAyWnGA\n 7O8pp9+JrFzbvOX+C04Qa/gq1ghJu3VHbnTXMm+h9r+YRNeLT+m1f8HYf5GcPkbuHswruaxGMtDGDmigUqRxSI1A71moMzDpB\n IfhPtBzIR+r1plKMqH81/jWepLVvRlk1mVFCUOD1RVISaJntb8FRAQWciX3/zNDOvHvxsVADdsMw9MRJEmTCFmYXs6Bk/FgvF\n 21NSzTPhU8aNlPodfP76hq6/l5Yku86QoxGZidXtuLl5+6MSA0YGOpsHG1zbMxzBV7YN9VO+K/uxLk12WmigkjMnVbcMnYZbz\n adzVw1tZjH45sArPdIRRKsAwgRjG0m4bLAW3Ypb36IqBpp9Fx548TN0oJI7l9YtV47tv5Y+So+oYGCUf6rpuBucOzVJKDOAYy\n PGhS8zjseg8zmmGHMfJw4j8XdHIdx16RObNav7+a1xZK8H/PxR1Mkje1IZfAAAAAElFTkSuQmCC`\n);\n","import { Texture, noop } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\n\ntype Vector3 = math.Vector3;\n\n/**\n * 下载图片\n * @param imageUrl - 图片url\n * @returns 图片对象\n */\nexport async function createImage (imageUrl: string): Promise<HTMLImageElement> {\n const image = new Image();\n\n image.src = imageUrl;\n\n return new Promise<HTMLImageElement>((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n image.onerror = reject;\n });\n}\n\n/**\n * 创建 Texture 对象\n * @param engine - engine 对象\n * @param image - 图片对象\n * @returns 纹理\n */\nexport function createTexture (engine: Engine, image: HTMLImageElement, hookDestroy?: boolean): Texture {\n\n const texture = Texture.create(engine, { image });\n\n if (hookDestroy) {\n texture.dispose = noop;\n }\n\n return texture;\n}\n\n/**\n * 移动到距离目标点指定距离的位置\n * @param targetPos - 目标点\n * @param currentPos - 当前点\n * @returns 指定点\n */\nexport function moveToPointWidthFixDistance (targetPos: Vector3, currentPos: Vector3): Vector3 {\n const vecCameraItem = currentPos.clone().subtract(targetPos);\n\n const normalVecCameraItem = vecCameraItem.clone().normalize();\n const scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);\n\n const vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);\n const vecItemScaler = vecScalerItem.clone().multiply(-1);\n\n return currentPos.clone().add(vecItemScaler);\n}\n","/**\n * 基础几何数据[抽象类,不可以直接用来初始化]\n */\nexport abstract class GeometryData {\n points: number[] = [];\n uvs: number[] = [];\n normals: number[] = [];\n indices: number[] = [];\n\n /**\n * 构件 XY 平面圆(圆心为(0, 0, z))\n * @param radius - 圆半径\n * @param z - z 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXYPlaneCircle (\n radius: number,\n z: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 XZ 平面圆(圆心为(0, y, 0))\n * @param radius - 圆半径\n * @param y - y 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXZPlaneCircle (\n radius: number,\n y: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const z = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 YZ 平面圆(圆心为(x, 0, 0))\n * @param radius - 圆半径\n * @param x - x 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createYZPlaneCircle (\n radius: number,\n x: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const z = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class SphereGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param widthSegments\n * @param heightSegments\n * @param phiStart\n * @param phiLength\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n widthSegments = 8,\n heightSegments = 6,\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI,\n ) {\n super();\n\n // 限制至少需要分为六块以保持形状\n widthSegments = Math.max(3, Math.floor(widthSegments));\n heightSegments = Math.max(2, Math.floor(heightSegments));\n\n const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI);\n const grid = [];\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow = [];\n const v = iy / heightSegments;\n\n let uOffset = 0;\n\n if (iy == 0 && thetaStart == 0) {\n uOffset = 0.5 / widthSegments;\n } else if (iy == heightSegments && thetaEnd == Math.PI) {\n uOffset = - 0.5 / widthSegments;\n }\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n\n // point\n const x = - radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n const y = radius * Math.cos(thetaStart + v * thetaLength);\n const z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\n this.points.push(x, y, z);\n\n // normal\n const normal = new Vector3(x, y, z).normalize();\n\n this.normals.push(...normal.toArray());\n\n // uv\n this.uvs.push(u + uOffset, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n // indices\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || thetaStart > 0) { this.indices.push(a, b, d); }\n if (iy !== heightSegments - 1 || thetaEnd < Math.PI) { this.indices.push(b, c, d); }\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\n// 面造型未单独抽离, 整个包围盒只接受一个材质\nexport class BoxGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param depth\n */\n constructor (width = 1, height = 1, depth = 1) {\n super();\n\n let numberOfVertices = 0;\n\n buildPlane(2, 1, 0, - 1, - 1, depth, height, width, this.points, this.uvs, this.normals, this.indices); // px\n buildPlane(2, 1, 0, 1, - 1, depth, height, - width, this.points, this.uvs, this.normals, this.indices); // nx\n buildPlane(0, 2, 1, 1, 1, width, depth, height, this.points, this.uvs, this.normals, this.indices); // py\n buildPlane(0, 2, 1, 1, - 1, width, depth, - height, this.points, this.uvs, this.normals, this.indices); // ny\n buildPlane(0, 1, 2, 1, - 1, width, height, depth, this.points, this.uvs, this.normals, this.indices); // pz\n buildPlane(0, 1, 2, - 1, - 1, width, height, - depth, this.points, this.uvs, this.normals, this.indices); // nz\n\n function buildPlane (u: number, v: number, w: number, uDir: number,\n vDir: number, width: number, height: number, depth: number,\n points: number[], uvs: number[], normals: number[], indices: number[]) {\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n const point: spec.vec3 = [0, 0, 0];\n let vertexCounter = 0;\n\n for (let iy = 0; iy < 2; iy++) {\n const y = iy * height - heightHalf;\n\n for (let ix = 0; ix < 2; ix++) {\n const x = ix * width - widthHalf;\n\n point[u] = x * uDir;\n point[v] = y * vDir;\n point[w] = depthHalf;\n\n points.push(...point);\n\n point[u] = 0;\n point[v] = 0;\n point[w] = depth > 0 ? 1 : - 1;\n\n normals.push(...point);\n\n uvs.push(ix);\n uvs.push(1 - iy);\n\n vertexCounter += 1;\n }\n }\n\n for (let iy = 0; iy < 1; iy++) {\n for (let ix = 0; ix < 1; ix++) {\n const a = numberOfVertices + ix + 2 * iy;\n const b = numberOfVertices + ix + 2 * (iy + 1);\n const c = numberOfVertices + (ix + 1) + 2 * (iy + 1);\n const d = numberOfVertices + (ix + 1) + 2 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n numberOfVertices += vertexCounter;\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class CylinderGeometryData extends GeometryData {\n /**\n *\n * @param radiusTop\n * @param radiusBottom\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radiusTop = 1,\n radiusBottom = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n radialSegments = Math.floor(radialSegments);\n heightSegments = Math.floor(heightSegments);\n\n let index = 0;\n const indexArray: number[][] = [];\n const halfHeight = height / 2;\n\n generateTorso(this.points, this.uvs, this.normals, this.indices);\n\n if (openEnded === false) {\n if (radiusTop > 0) { generateCap(true, this.points, this.uvs, this.normals, this.indices); }\n if (radiusBottom > 0) { generateCap(false, this.points, this.uvs, this.normals, this.indices); }\n }\n\n function generateTorso (points: number[], uvs: number[], normals: number[], indices: number[]) {\n // this will be used to calculate the normal\n const slope = (radiusBottom - radiusTop) / height;\n\n for (let y = 0; y <= heightSegments; y++) {\n const indexRow = [];\n const v = y / heightSegments;\n\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n\n for (let x = 0; x <= radialSegments; x++) {\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n const px = radius * sinTheta;\n const py = - v * height + halfHeight;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n const normal = new Vector3(sinTheta, slope, cosTheta).normalize();\n\n normals.push(...normal.toArray());\n\n uvs.push(u, 1 - v);\n\n indexRow.push(index++);\n }\n indexArray.push(indexRow);\n }\n\n for (let x = 0; x < radialSegments; x++) {\n for (let y = 0; y < heightSegments; y++) {\n const a = indexArray[y][x];\n const b = indexArray[y + 1][x];\n const c = indexArray[y + 1][x + 1];\n const d = indexArray[y][x + 1];\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n }\n\n function generateCap (top: boolean, points: number[], uvs: number[], normals: number[], indices: number[]) {\n const centerIndexStart = index;\n\n const radius = (top === true) ? radiusTop : radiusBottom;\n const sign = (top === true) ? 1 : - 1;\n\n for (let x = 1; x <= radialSegments; x++) {\n points.push(0, halfHeight * sign, 0);\n normals.push(0, sign, 0);\n uvs.push(0.5, 0.5);\n\n index++;\n }\n\n const centerIndexEnd = index;\n\n for (let x = 0; x <= radialSegments; x++) {\n\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n const px = radius * sinTheta;\n const py = halfHeight * sign;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n normals.push(0, sign, 0);\n\n const uvU = (cosTheta * 0.5) + 0.5;\n const uvV = (sinTheta * 0.5 * sign) + 0.5;\n\n uvs.push(uvU, uvV);\n\n index++;\n }\n\n for (let x = 0; x < radialSegments; x++) {\n const c = centerIndexStart + x;\n const i = centerIndexEnd + x;\n\n if (top === true) {\n indices.push(i, i + 1, c);\n } else {\n indices.push(i + 1, i, c);\n }\n }\n }\n }\n}\n","import { CylinderGeometryData } from './cylinder';\n\n/**\n *\n */\nexport class ConeGeometryData extends CylinderGeometryData {\n /**\n *\n * @param radius\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength);\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class TorusGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param tube\n * @param radialSegments\n * @param tubularSegments\n * @param arc\n */\n constructor (\n radius = 1,\n tube = 0.4,\n radialSegments = 64,\n tubularSegments = 64,\n arc = Math.PI * 2,\n ) {\n super();\n\n radialSegments = Math.floor(radialSegments);\n tubularSegments = Math.floor(tubularSegments);\n\n for (let j = 0; j <= radialSegments; j++) {\n for (let i = 0; i <= tubularSegments; i++) {\n\n const u = i / tubularSegments * arc;\n const v = j / radialSegments * Math.PI * 2;\n\n const px = (radius + tube * Math.cos(v)) * Math.cos(u);\n const py = (radius + tube * Math.cos(v)) * Math.sin(u);\n const pz = tube * Math.sin(v);\n\n this.points.push(px, py, pz);\n\n const cx = radius * Math.cos(u);\n const cy = radius * Math.sin(u);\n const p = new Vector3(px, py, pz);\n const c = new Vector3(cx, cy, 0);\n const normal = p.subtract(c).normalize();\n\n this.normals.push(...normal.toArray());\n\n this.uvs.push(i / tubularSegments);\n this.uvs.push(j / radialSegments);\n }\n }\n\n for (let j = 1; j <= radialSegments; j++) {\n for (let i = 1; i <= tubularSegments; i++) {\n const a = (tubularSegments + 1) * j + i - 1;\n const b = (tubularSegments + 1) * (j - 1) + i - 1;\n const c = (tubularSegments + 1) * (j - 1) + i;\n const d = (tubularSegments + 1) * j + i;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n *\n */\nexport class PlaneGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param widthSegments\n * @param heightSegments\n */\n constructor (\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n ) {\n super();\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n\n this.points.push(x, - y, 0);\n this.normals.push(0, 0, 1);\n this.uvs.push(ix / gridX);\n this.uvs.push(1 - (iy / gridY));\n }\n }\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = (ix + 1) + gridX1 * (iy + 1);\n const d = (ix + 1) + gridX1 * iy;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Euler, Vector3, Matrix4 } = math;\n\n/**\n *\n */\nexport class FrustumGeometryData extends GeometryData {\n /**\n *\n * @param position\n * @param rotation\n * @param fov\n * @param aspect\n * @param near\n * @param far\n */\n constructor (\n position: spec.vec3,\n rotation: spec.vec3,\n fov: number,\n aspect: number,\n near: number,\n far: number,\n ) {\n super();\n\n const fovY = fov / 180 * Math.PI;\n const ratio = aspect;\n const halfY = far * Math.tan(fovY / 2);\n const halfX = halfY * ratio;\n const point1 = new Vector3(halfX, halfY, far);\n const point2 = new Vector3(-halfX, halfY, far);\n const point3 = new Vector3(-halfX, -halfY, far);\n const point4 = new Vector3(halfX, -halfY, far);\n const matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4());\n const result1 = matrix.transformPoint(point1).add(position);\n const result2 = matrix.transformPoint(point2).add(position);\n const result3 = matrix.transformPoint(point3).add(position);\n const result4 = matrix.transformPoint(point4).add(position);\n\n this.points.push(\n ...position,\n ...result1.toArray(), ...result2.toArray(),\n ...result3.toArray(), ...result4.toArray()\n );\n this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 方向光造型数据\n * lines\n */\nexport class DirectionLightData extends GeometryData {\n /**\n * 构造函数\n * @param radius - 圆半径\n * @param length - 光线长度\n * @param segments - 圆精度\n * @param linesNumber - 光线数量\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n radius = 1,\n length = 2,\n segments = 64,\n linesNumber = 8,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n this.createXYPlaneCircle(radius, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n const start = segments % linesNumber / 2;\n const step = segments / linesNumber;\n\n for (let i = 0; i < linesNumber; i++) {\n const index = start + i * step;\n const x = this.points[3 * index];\n const y = this.points[3 * index + 1];\n const z = -length;\n\n this.points.push(x, y, z);\n this.indices.push(index, segments + i);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 点光源造型数据\n * lines\n */\nexport class PointLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光照范围\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n this.createXYPlaneCircle(range, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.createXZPlaneCircle(range, 0, segments, thetaStart, thetaLength, segments, this.points, this.indices);\n this.createYZPlaneCircle(range, 0, segments, thetaStart, thetaLength, 2 * segments, this.points, this.indices);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 聚光灯造型数据\n * lines\n */\nexport class SpotLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光线范围\n * @param spotAngle - 光线范围[角度]\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n spotAngle = 30,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n const angle = spotAngle / 2 / 180 * Math.PI;\n const radius = range * Math.tan(angle);\n\n this.createXYPlaneCircle(radius, -range, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.points.push(0, 0, 0);\n const step = segments / 4;\n const start = segments % 4 / 2;\n\n for (let i = 0; i < 4; i++) {\n this.indices.push(segments, start + i * step);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 地板线边框造型数据\n * lines\n */\nexport class FloorLineEdgeGeometryData extends GeometryData {\n /**\n *\n * @param sideLength\n * @param parts\n */\n constructor (sideLength = 12, parts = 6) {\n super();\n\n let index = 0;\n\n const z = 0;\n const end = sideLength / 2;\n const start = -sideLength / 2;\n\n for (let i = 0; i <= parts; i++) {\n const v = start + i * sideLength / parts;\n\n this.points.push(v, start, z, v, end, z, start, v, z, end, v, z);\n this.indices.push(index, index + 1, index + 2, index + 3);\n index += 4;\n }\n }\n}\n","import { math } from '@galacean/effects';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\n\nconst { Matrix4, Vector2 } = math;\n\nexport function distanceOfPointAndLine (point: Vector2, line: [Vector2, Vector2]): { distance: number, isInLine: boolean } {\n //三角形三个边长\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n\n AC.subtractVectors(point, line[0]);\n BC.subtractVectors(point, line[1]);\n AB.subtractVectors(line[1], line[0]);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n let isInLine = false;\n\n if (l1 <= lengthAB && l2 <= lengthAB) {\n isInLine = true;\n }\n\n return {\n distance,\n isInLine,\n };\n}\n\nexport function projectionOfPointAndLine (point: Vector2, line: [Vector3, Vector3]): Vector3 {\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n const line0 = line[0].toVector2();\n const line1 = line[1].toVector2();\n\n AC.subtractVectors(point, line0);\n BC.subtractVectors(point, line1);\n AB.subtractVectors(line1, line0);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n\n const worldAB = line[1].clone().subtract(line[0]);\n\n const worldAP = worldAB.clone().multiply(l1 / (l1 + l2));\n\n const worldP = line[0].clone().add(worldAP);\n\n return worldP;\n}\n\nexport function computeOrthographicOffCenter (\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number\n) {\n let a = 1.0 / (right - left);\n let b = 1.0 / (top - bottom);\n let c = 1.0 / (far - near);\n\n const tx = -(right + left) * a;\n const ty = -(top + bottom) * b;\n const tz = -(far + near) * c;\n\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n\n return new Matrix4(\n a,\n 0.0,\n 0.0,\n 0.0,\n //\n 0.0,\n b,\n 0.0,\n 0.0,\n //\n 0.0,\n 0.0,\n c,\n 0.0,\n //\n tx,\n ty,\n tz,\n 1.0,\n );\n}\n","import type { Engine, Geometry, spec } from '@galacean/effects';\nimport { glContext, Material, Mesh, Texture, Transform, math } from '@galacean/effects';\nimport type { MeshOption } from './geometry';\nimport { createGeometry, GeometryType } from './geometry';\nimport { GizmoSubType } from './define';\nimport type { GizmoItemBounding } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { color, renderMode } from './constants';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype TriangleLike = math.TriangleLike;\nconst { Vector2, Vector3, Matrix4 } = math;\n\n/**\n * 根据 gizmoSubType 类型创建几何体 Mesh\n * @param subType - gizmoSubType 类型\n * @param boundingMap - 包围盒 Map\n * @param iconTexture - 图标纹理\n * @param options - 几何体参数\n * @returns 基础几何体 Mesh | 组合几何体 Map<Mesh, Transform>\n */\nexport function createMeshFromSubType (\n engine: Engine,\n subType: GizmoSubType,\n boundingMap: Map<string, GizmoItemBounding>,\n iconTexture?: Map<string, Texture>,\n options?: MeshOption\n): Mesh | Map<Mesh, Transform> {\n let result: Mesh | Map<Mesh, Transform>;\n\n if (!options) {\n options = { size: 0, renderMode: WebGLRenderingContext['TRIANGLES'] };\n }\n\n switch (subType) {\n case GizmoSubType.sprite:\n result = createSpriteMesh(engine, options);\n\n break;\n case GizmoSubType.camera:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('camera') : undefined, boundingMap);\n\n break;\n case GizmoSubType.light:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('light') : undefined, boundingMap);\n\n break;\n case GizmoSubType.translation:\n result = createTranslationMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.scale:\n result = createScaleMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.viewHelper:\n result = createViewHelperMesh(engine, options, boundingMap, iconTexture as Map<string, Texture>);\n\n break;\n case GizmoSubType.rotation:\n result = createRotationMesh(engine, options, boundingMap);\n\n break;\n default:\n result = createBasicMesh(engine, subType, options);\n\n break;\n }\n\n return result;\n}\n\n/**\n * 创建旋转组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createRotationMesh (\n engine: Engine,\n options: MeshOption,\n boundingMap: Map<string, GizmoItemBounding>,\n): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const size = {\n radius: 0.8 * scale,\n tube: 0.02 * scale,\n radiusSegments: 10 * scale,\n widthSegments: 20,\n heightSegments: 20,\n };\n const boundSize = { ...size, tube: size.tube * 2 };\n const name = 'rotation';\n const xCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.xAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const yCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.yAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const zCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.zAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const center = createBasicMesh(engine, GizmoSubType.sphere, {\n size, color: [0.3, 0.3, 0.3], alpha: 0.1, renderMode, name,\n }, 'blend');\n const xCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.xAxisColor as vec3,\n renderMode,\n });\n const yCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.yAxisColor as vec3,\n renderMode,\n });\n const zCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.zAxisColor as vec3,\n renderMode,\n });\n\n const xCircleTransform = new Transform({\n valid: true,\n });\n const yCircleTransform = new Transform({\n valid: true,\n });\n const zCircleTransform = new Transform({\n valid: true,\n });\n const centerTransform = new Transform({\n valid: true,\n });\n\n xCircleTransform.setRotation(0, 90, 0);\n yCircleTransform.setRotation(-90, 0, 0);\n zCircleTransform.setRotation(0, 0, 0);\n result.set(center, centerTransform);\n result.set(xCircle, xCircleTransform);\n result.set(yCircle, yCircleTransform);\n result.set(zCircle, zCircleTransform);\n\n boundingMap.set('xAxis', {\n type: BoundingType.triangle,\n triangles: xCircleBounding.firstGeometry() ? getTriangle(xCircleBounding.firstGeometry(), xCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.triangle,\n triangles: yCircleBounding.firstGeometry() ? getTriangle(yCircleBounding.firstGeometry(), yCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.triangle,\n triangles: zCircleBounding.firstGeometry() ? getTriangle(zCircleBounding.firstGeometry(), zCircleTransform) : [],\n backfaceCulling: true,\n });\n\n return result;\n}\n\n/**\n * 获取几何体的三角面数组\n * @internal\n * @param geometry - 几何体\n * @param transform - 变换式\n * @returns 三角面数组\n */\nfunction getTriangle (geometry: Geometry, transform: Transform): TriangleLike[] {\n const result: TriangleLike[] = [];\n const indices = geometry.getIndexData();\n const points = geometry.getAttributeData('a_Position');\n const mat4 = transform.getWorldMatrix();\n\n if (points && indices && indices.length > 0) {\n for (let i = 0; i < indices.length; i += 3) {\n const i0 = indices[i] * 3;\n const i1 = indices[i + 1] * 3;\n const i2 = indices[i + 2] * 3;\n const p0 = new Vector3(points[i0], points[i0 + 1], points[i0 + 2]);\n const p1 = new Vector3(points[i1], points[i1 + 1], points[i1 + 2]);\n const p2 = new Vector3(points[i2], points[i2 + 1], points[i2 + 2]);\n\n result.push({\n p0: mat4.projectPoint(p0),\n p1: mat4.projectPoint(p1),\n p2: mat4.projectPoint(p2),\n });\n\n }\n }\n\n return result;\n}\n\n/**\n * 创建位移组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createTranslationMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'translation';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n\n const arrowSize = {\n radius: 0.05 * scale,\n height: 0.2 * scale,\n };\n const xArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.xAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const yArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.yAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const zArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.zAxisColor as vec3,\n renderMode,\n name,\n depthTest: true,\n }, 'blend');\n const xArrowTransform = new Transform({\n valid: true,\n });\n const yArrowTransform = new Transform({\n valid: true,\n });\n const zArrowTransform = new Transform({\n valid: true,\n });\n\n xArrowTransform.setRotation(0, 0, 90);\n yArrowTransform.setRotation(0, 0, 0);\n zArrowTransform.setRotation(-90, 0, 0);\n xArrowTransform.translate(axisSize.width, 0, 0);\n yArrowTransform.translate(0, axisSize.width, 0);\n zArrowTransform.translate(0, 0, axisSize.width);\n\n const planeSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n };\n const xyPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yzPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zxPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const xyPlaneTransform = new Transform({\n valid: true,\n });\n const yzPlaneTransform = new Transform({\n valid: true,\n });\n const zxPlaneTransform = new Transform({\n valid: true,\n });\n const delta = axisSize.width / 8;\n\n xyPlaneTransform.translate(planeSize.width / 2 + delta, planeSize.height / 2 + delta, 0);\n yzPlaneTransform.setRotation(0, 90, 0);\n yzPlaneTransform.translate(0, planeSize.height / 2 + delta, planeSize.width / 2 + delta);\n zxPlaneTransform.setRotation(-90, 0, 0);\n zxPlaneTransform.translate(planeSize.width / 2 + delta, 0, planeSize.height / 2 + delta);\n\n result.set(xArrow, xArrowTransform);\n result.set(yArrow, yArrowTransform);\n result.set(zArrow, zArrowTransform);\n result.set(xyPlane, xyPlaneTransform);\n result.set(yzPlane, yzPlaneTransform);\n result.set(zxPlane, zxPlaneTransform);\n\n createAxisBounding({ width: arrowSize.radius * 2.4, length: axisSize.width + arrowSize.height / 2 }, boundingMap);\n boundingMap.set('xyPlane', {\n type: BoundingType.triangle,\n triangles: xyPlane.firstGeometry() ? getTriangle(xyPlane.firstGeometry(), xyPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n // FIXME: getTriangle 函数调用 getWorldMatrix 后 worldMatrix被修改\n boundingMap.set('yzPlane', {\n type: BoundingType.triangle,\n triangles: yzPlane.firstGeometry() ? getTriangle(yzPlane.firstGeometry(), yzPlaneTransform) : [],\n backfaceCulling: false,\n });\n boundingMap.set('zxPlane', {\n type: BoundingType.triangle,\n triangles: zxPlane.firstGeometry() ? getTriangle(zxPlane.firstGeometry(), zxPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n return result;\n}\n\n/**\n * 创建缩放组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createScaleMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'scale';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const boxSize = {\n width: 0.1 * scale,\n height: 0.1 * scale,\n depth: 0.1 * scale,\n };\n const centerBoxSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n depth: 0.2 * scale,\n };\n const xCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const yCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const zCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const centerCube = createBasicMesh(engine, GizmoSubType.box, {\n size: centerBoxSize,\n color: [0.8, 0.8, 0.8],\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const xCubeTransform = new Transform({\n valid: true,\n });\n const yCubeTransform = new Transform({\n valid: true,\n });\n const zCubeTransform = new Transform({\n valid: true,\n });\n const centerCubeTransform = new Transform({\n valid: true,\n });\n\n xCubeTransform.translate(axisSize.width, 0, 0);\n yCubeTransform.translate(0, axisSize.width, 0);\n zCubeTransform.translate(0, 0, axisSize.width);\n result.set(centerCube, centerCubeTransform);\n result.set(xCube, xCubeTransform);\n result.set(yCube, yCubeTransform);\n result.set(zCube, zCubeTransform);\n\n createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);\n boundingMap.set('center', {\n type: BoundingType.sphere,\n center: new Vector3(),\n radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,\n });\n\n return result;\n}\n\n/**\n * 创建视图辅助组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createViewHelperMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>, texture: Map<string, Texture>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const axisMesh = createAxisMesh(engine, axisSize, true);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const planeSize = {\n width: 0.14 * scale,\n height: 0.14 * scale,\n };\n const length = (axisSize.width + planeSize.width) / 2;\n const depthTest = true;\n const posXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posX'));\n const posYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posY'));\n const posZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posZ'));\n const posXSphereTransform = new Transform({\n valid: true,\n });\n const posYSphereTransform = new Transform({\n valid: true,\n });\n const posZSphereTransform = new Transform({\n valid: true,\n });\n\n posXSphereTransform.translate(length, 0, 0);\n posYSphereTransform.translate(0, length, 0);\n posZSphereTransform.translate(0, 0, length);\n const negXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negX'));\n const negYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negY'));\n const negZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negZ'));\n const negXSphereTransform = new Transform({\n valid: true,\n });\n const negYSphereTransform = new Transform({\n valid: true,\n });\n const negZSphereTransform = new Transform({\n valid: true,\n });\n\n negXSphereTransform.translate(-length, 0, 0);\n negYSphereTransform.translate(0, -length, 0);\n negZSphereTransform.translate(0, 0, -length);\n\n result.set(posXSphere, posXSphereTransform);\n result.set(posYSphere, posYSphereTransform);\n result.set(posZSphere, posZSphereTransform);\n result.set(negXSphere, negXSphereTransform);\n result.set(negYSphere, negYSphereTransform);\n result.set(negZSphere, negZSphereTransform);\n\n const radius = (planeSize.height / 2) * 1.2;\n\n boundingMap.set('posX', {\n type: BoundingType.sphere,\n center: posXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posY', {\n type: BoundingType.sphere,\n center: posYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posZ', {\n type: BoundingType.sphere,\n center: posZSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negX', {\n type: BoundingType.sphere,\n center: negXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negY', {\n type: BoundingType.sphere,\n center: negYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negZ', {\n type: BoundingType.sphere,\n center: negZSphereTransform.position,\n radius: radius,\n });\n\n return result;\n}\n\n/**\n * 创建坐标轴 Mesh 数组\n * @internal\n * @param axisSize - 坐标轴尺寸\n * @param isCentered - 是否居中,默认 false\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createAxisMesh (engine: Engine, axisSize: { width: number, height: number, depth: number }, isCentered = false, name?: string): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const xAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n\n const xAxisTransform = new Transform({\n valid: true,\n });\n const yAxisTransform = new Transform({\n valid: true,\n });\n const zAxisTransform = new Transform({\n valid: true,\n });\n\n yAxisTransform.setRotation(0, 0, 90);\n zAxisTransform.setRotation(0, -90, 0);\n if (!isCentered) {\n xAxisTransform.translate(axisSize.width / 2, 0, 0);\n yAxisTransform.translate(0, axisSize.width / 2, 0);\n zAxisTransform.translate(0, 0, axisSize.width / 2);\n }\n result.set(xAxis, xAxisTransform);\n result.set(yAxis, yAxisTransform);\n result.set(zAxis, zAxisTransform);\n\n return result;\n}\n\n/**\n * 创建基础几何体 Mesh\n * @internal\n * @param subType - gizmoSubType 类型\n * @param options - 几何体参数\n * @returns 几何体 Mesh\n */\nfunction createBasicMesh (engine: Engine, subType: GizmoSubType, options: MeshOption, materialType = 'default'): Mesh {\n const {\n size, color, alpha, renderMode, depthTest, name,\n } = options;\n let geometryType: GeometryType;\n\n switch (subType) {\n case GizmoSubType.sphere:\n geometryType = GeometryType.Sphere;\n\n break;\n case GizmoSubType.cylinder:\n geometryType = GeometryType.Cylinder;\n\n break;\n case GizmoSubType.cone:\n geometryType = GeometryType.Cone;\n\n break;\n case GizmoSubType.torus:\n geometryType = GeometryType.Torus;\n\n break;\n case GizmoSubType.sprite:\n geometryType = GeometryType.Sprite;\n\n break;\n case GizmoSubType.plane:\n geometryType = GeometryType.Plane;\n\n break;\n case GizmoSubType.frustum:\n geometryType = GeometryType.Frustum;\n\n break;\n case GizmoSubType.directionLight:\n geometryType = GeometryType.DirectionLight;\n\n break;\n case GizmoSubType.spotLight:\n geometryType = GeometryType.SpotLight;\n\n break;\n case GizmoSubType.pointLight:\n geometryType = GeometryType.PointLight;\n\n break;\n case GizmoSubType.floorGrid:\n geometryType = GeometryType.FloorGrid;\n\n break;\n default:\n geometryType = GeometryType.Box;\n\n break;\n }\n const geometry = createGeometry(engine, geometryType, size, renderMode);\n let material;\n\n switch (materialType) {\n case 'blend':\n material = createBlendMaterial(engine, color, depthTest, alpha);\n\n break;\n case 'hideBack':\n material = createHideBackMaterial(engine, color, depthTest);\n\n break;\n default:\n material = createMaterial(engine, color, depthTest);\n\n break;\n }\n\n return Mesh.create(\n engine,\n {\n name: name ? name : geometryType.toString(),\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * @internal\n * @param options\n * @param texture\n * @param boundingMap\n * @returns\n */\nfunction createSpriteMesh (engine: Engine, options: MeshOption, texture?: Texture, boundingMap?: Map<string, GizmoItemBounding>): Mesh {\n const geometry = createGeometry(engine, GeometryType.Sprite, options.size, renderMode);\n let spriteColor;\n\n if (texture) {\n spriteColor = texture;\n } else {\n spriteColor = options.color;\n }\n\n const material = createSpriteMaterial(engine, spriteColor, options.depthTest);\n\n if (boundingMap) {\n boundingMap.set('sprite', {\n type: BoundingType.sphere,\n radius: Math.pow(Math.pow(options.size.width, 2) + Math.pow(options.size.height, 2), 0.5) / 2,\n });\n }\n\n return Mesh.create(\n engine,\n {\n name: options.name || 'sprite',\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * 创建材质\n * @internal\n * @param color - 颜色\n * @param depthTest\n * @returns 纯色材质,无光照,无透明\n */\nfunction createMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @returns\n */\nfunction createHideBackMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_cameraPos: new Float32Array([0, 0, 0]),\n u_center: new Float32Array([0, 0, 0]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n varying float flag;\n\n void main(){\n if(flag > 0.0) {\n discard;\n }\n\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n uniform vec3 u_cameraPos;\n uniform vec3 u_center;\n\n varying float flag;\n void main(){\n float distance = length(u_cameraPos - u_center);\n vec3 worldPosition = (u_model * vec4(a_Position,1.0)).xyz;\n flag = length(u_cameraPos - worldPosition) - distance;\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector3('u_cameraPos', Vector3.ZERO);\n material.setVector3('u_center', Vector3.ZERO);\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @param alpha\n * @returns\n */\nfunction createBlendMaterial (engine: Engine, color?: vec3, depthTest?: boolean, alpha?: number): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n const myAlpha = alpha ? alpha : 1;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_alpha: new Float32Array([myAlpha, 0]),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n uniform vec2 u_alpha;\n\n void main(){\n gl_FragColor = vec4(u_color,u_alpha);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setVector2('u_alpha', new Vector2(myAlpha, 0));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n material.depthMask = true;\n\n return material;\n}\n\nfunction createSpriteMaterial (engine: Engine, data?: vec3 | Texture, depthTest?: boolean): Material {\n const myDepthTest = depthTest ? depthTest : false;\n const uniformValues = {\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_alpha: new Float32Array([1, 0]),\n };\n\n const material = Material.create(\n engine,\n {\n uniformValues,\n shader: {\n shared: true,\n fragment: `\n precision highp float;\n\n uniform vec2 u_alpha;\n uniform vec3 u_color;\n uniform sampler2D u_iconTex;\n\n varying vec2 v_uv;\n\n void main(){\n vec4 color = texture2D(u_iconTex, vec2(v_uv.x, 1.0 - v_uv.y));\n if(color.a < 0.001)\n {\n discard;\n }\n gl_FragColor = vec4(color.xyz, color.w * u_alpha.x);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n attribute vec2 a_UV1;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n uniform mat4 effects_MatrixInvV;\n varying vec2 v_uv;\n\n void main(){\n v_uv = a_UV1;\n vec4 pos = u_model * vec4(0., 0., 0., 1.0);\n // vec4 pos = u_model * vec4(a_Position,1.0);\n\n pos.xyz += effects_MatrixInvV[0].xyz * a_Position.x + effects_MatrixInvV[1].xyz * a_Position.y;\n gl_Position = _MatrixP * effects_MatrixV * pos;\n }`,\n },\n });\n\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector2('u_alpha', new Vector2(1, 0));\n\n if (data instanceof Texture) {\n material.setTexture('u_iconTex', data);\n // uniformValues.u_iconTex = data;\n } else {\n let color: Vector3;\n\n if (data === undefined) {\n color = new Vector3(255, 255, 255);\n } else {\n color = Vector3.fromArray(data);\n }\n material.setVector3('u_color', color);\n // uniformValues.u_color = new Float32Array(color);\n }\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n\n return material;\n}\n\n/**\n * 创建坐标轴包围盒\n * @internal\n * @param size 包围盒尺寸\n * @param boundingMap 包围盒 Map\n */\nfunction createAxisBounding (size: { width: number, length: number }, boundingMap: Map<string, GizmoItemBounding>) {\n boundingMap.set('xAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(size.length, 0, 0)],\n width: size.width,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, size.length, 0)],\n width: size.width,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, 0, size.length)],\n width: size.width,\n });\n}\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","import type { Camera } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { distanceOfPointAndLine, projectionOfPointAndLine } from './math-utils';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Matrix4, Vector2, Vector3 } = math;\n\n/**\n * 线条包围盒射线检测算法\n * @param out - 射线与包围盒交点位置\n * @param pointInCanvas - 归一化的画布交互点坐标\n * @param points - 线条包围盒两端点位置\n * @param radius - 线条包围盒辐射半径\n * @param camera - 相机对象\n * @returns 射线与包围盒交点位置 | undefined\n */\nexport function intersectRayLine (\n out: Vector3,\n pointInCanvas: Vector2,\n points: [p0: Vector3, p1: Vector3],\n radius: number,\n worldMat4: Matrix4,\n camera: Camera,\n): Vector3 | undefined {\n // 构造一个辐射半径边缘的点 radiusPoint\n const up = new Vector3(\n worldMat4.elements[1],\n worldMat4.elements[5],\n worldMat4.elements[9],\n ).normalize();\n\n const radiusPoint = up.clone().multiply(radius);\n\n radiusPoint.add(points[0]);\n\n // 计算 start、end、radius 在屏幕空间上的投影\n const mvpMat4 = camera.getModelViewProjection(new Matrix4(), worldMat4);\n\n const screenStart = mvpMat4.projectPoint(points[0], new Vector3());\n const screenEnd = mvpMat4.projectPoint(points[1], new Vector3());\n const screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3());\n\n const screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);\n\n const screenRadius = screenRadiusVector.length();\n\n // 计算屏幕交互点与线条的距离\n const { distance, isInLine } = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]);\n\n if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内\n // 计算交互点在线条上的投影并转换为世界坐标\n const screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);\n const inverseViewProjection = camera.getInverseViewProjectionMatrix();\n\n inverseViewProjection.projectPoint(screenPosition, out);\n\n return out;\n }\n}\n","import type { Engine, spec } from '@galacean/effects';\nimport { Geometry, Material, Mesh, glContext, math } from '@galacean/effects';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Euler, Vector3, Matrix4 } = math;\n\nconst rectSize = 0.04;\nconst DEG2RAD = Math.PI / 180;\n\ninterface GeometryData {\n points: Vector3[],\n indices: number[],\n}\n\ninterface ArcPathOptions {\n plane?: string,\n translate?: vec3,\n rotate?: vec3,\n}\n\nfunction arcPath (radius: number, arc: number, options: ArcPathOptions = {}): GeometryData {\n const { plane, translate = [0, 0, 0], rotate = [0, 0, 0] } = options;\n const rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4());\n const points: Vector3[] = [];\n const indices = [];\n\n addPoint(radius, 0);\n let i = 1;\n\n for (; i <= arc; i++) {\n const angle = i * DEG2RAD;\n\n indices.push(i - 1, i);\n addPoint(Math.cos(angle) * radius, Math.sin(angle) * radius);\n }\n\n return {\n points,\n indices,\n };\n\n function addPoint (cos: number, sin: number) {\n const point = new Vector3();\n\n if (plane === 'xz') {\n point.set(cos, 0, sin);\n } else if (plane === 'yz') {\n point.set(0, cos, sin);\n } else {\n point.set(cos, sin, 0);\n }\n rotMat4.transformNormal(point);\n points.push(point.add(translate));\n }\n}\n\nfunction line (p0: vec3, p1: vec3): GeometryData {\n return {\n points: [\n Vector3.fromArray(p0),\n Vector3.fromArray(p1),\n ],\n indices: [0, 1],\n };\n}\n\nfunction box (width: number, height: number, depth: number, center?: number[]): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const d = depth / 2;\n const myCenter = center ?? [0, 0, 0];\n const points: Vector3[] = [\n [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],\n [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],\n ].map(item => {\n return new Vector3(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);\n });\n\n return {\n points,\n indices: [\n 0, 1, 1, 3, 3, 2, 2, 0,\n 4, 5, 5, 7, 7, 6, 6, 4,\n 0, 4, 2, 6, 3, 7, 1, 5,\n ],\n };\n}\n\nfunction rect (width: number, height: number, pos?: vec3): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const points: Vector3[] = [\n new Vector3(-w, h, 0),\n new Vector3(w, h, 0),\n new Vector3(w, -h, 0),\n new Vector3(-w, -h, 0),\n ];\n\n if (pos) {\n points.forEach(vec => {\n vec.add(pos);\n });\n }\n\n return {\n points,\n indices: [\n 0, 1, 1, 2, 2, 3, 3, 0,\n ],\n };\n}\n\nfunction combineGeometries (geometries: GeometryData[]) {\n const points: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n\n if (geometry) {\n geometry.points.forEach(point => {\n points.push(point.x, point.y, point.z);\n });\n geometry.indices.forEach(index => indices.push(index + indicesBase));\n indicesBase += geometry.points.length;\n }\n }\n\n return {\n points: new Float32Array(points),\n indices: new Uint16Array(indices),\n };\n}\n\nconst Shapes: Record<string, (arg: any) => GeometryData[]> = {\n Texture (arg: any) {\n const ret = [];\n\n if (arg.detail) {\n const anchors = arg.detail.anchors;\n const block = arg.detail.block;\n const width = arg.width;\n const height = arg.height;\n\n for (let i = 0; i < anchors.length; i += 2) {\n ret.push(rect(block[0] * width, block[1] * height, [\n width * (anchors[i] - 0.5),\n height * (anchors[i + 1] - 0.5),\n 0,\n ]));\n }\n } else {\n ret.unshift(Shapes.Rectangle(arg)[0]);\n }\n\n return ret;\n },\n Circle (arg: any) {\n const { radius, arc } = arg;\n\n return [\n arcPath(radius, arc),\n arc !== 360 && line([0, 0, 0], [radius, 0, 0]),\n arc !== 360 && line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n },\n Box: function (arg: any) {\n const {\n width, height, depth, center,\n } = arg;\n const data = box(width, height, depth, center);\n\n return [data];\n },\n Sphere: function (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, -radius], [0, 0, radius]),\n arcPath(radius, arc > 180 ? 360 : 180, { plane: 'xz', rotate: [0, 90, 0] }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 180, { plane: 'xz', rotate: [0, 90, arc] }),\n ];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 360 : 180, { plane: 'yz', rotate: [-90, 0, 0] }));\n }\n\n return ret;\n },\n Hemisphere (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, radius], [0, 0, 0]), //z\n line([arc > 180 ? -radius : 0, 0, 0], [radius, 0, 0]), //x\n arg > 90 && line([0, arc > 270 ? -radius : 0, 0], [0, radius, 0]), //y\n arcPath(radius, (arc > 180 ? 360 : 180) / 2, { plane: 'xz' }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 90, { plane: 'xz', rotate: [0, 0, arc] }),\n line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 180 : 90, { plane: 'yz' }));\n }\n\n return ret;\n },\n Cone (arg) {\n const { radius, arc } = arg;\n const outerRadius = radius * Math.tan(arg.angle * DEG2RAD) + radius;\n\n return [\n arcPath(outerRadius, arc, { translate: [0, 0, radius] }),\n line([radius, 0, 0], [outerRadius, 0, radius]),\n arc > 90 && line([0, radius, 0], [0, outerRadius, radius]),\n arc > 180 && line([-radius, 0, 0], [-outerRadius, 0, radius]),\n arc > 270 && line([0, -radius, 0], [0, -outerRadius, radius]),\n line([Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n [Math.cos(arc * DEG2RAD) * outerRadius, Math.sin(arc * DEG2RAD) * outerRadius, radius]),\n ].concat(Shapes.Circle(arg)) as GeometryData[];\n },\n Edge (arg) {\n const hw = arg.width / 2;\n\n return [\n line([-hw, 0, 0], [hw, 0, 0]),\n ];\n },\n Rectangle (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n RectangleEdge (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n Donut (arg) {\n const { arc, radius, donutRadius } = arg;\n\n return [\n arcPath(donutRadius, 360, { translate: [radius, 0, 0], rotate: [90, 0, 0] }),\n arcPath(radius - donutRadius, arc),\n arcPath(radius + donutRadius, arc),\n arcPath(radius, arc, { translate: [0, 0, donutRadius] }),\n arcPath(radius, arc, { translate: [0, 0, -donutRadius] }),\n arc % 360 === 0 ? arcPath(donutRadius, 360, {\n translate: [-radius, 0, 0],\n rotate: [90, 0, 0],\n }) : arcPath(donutRadius, 360, {\n translate: [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n rotate: [90, 0, arc],\n }),\n ];\n },\n path (arg) {\n const positions = arg.keys;\n const ret = [];\n\n for (let i = 0; i < positions.length - 1; i++) {\n ret.push(rect(rectSize, rectSize, positions[i]));\n ret.push(line(positions[i], positions[i + 1]));\n }\n ret.push(rect(rectSize, rectSize, positions[positions.length - 1]));\n\n return ret;\n },\n};\n\nShapes['0'] = Shapes.None;\nShapes['1'] = Shapes.Sphere;\nShapes['2'] = Shapes.Cone;\nShapes['3'] = Shapes.Hemisphere;\nShapes['4'] = Shapes.Circle;\nShapes['5'] = Shapes.Donut;\nShapes['6'] = Shapes.Rectangle;\nShapes['7'] = Shapes.RectangleEdge;\nShapes['8'] = Shapes.Edge;\nShapes['9'] = Shapes.Texture;\n\nexport function createMeshFromShape (engine: Engine, args: { shape: string, type?: number }, options: { color?: vec3, depthTest?: boolean }): Mesh {\n const ret = Shapes[args.type || args.shape](args);\n const geo = combineGeometries(ret);\n\n return createMesh(engine, geo.points, geo.indices, options.color || [1, 0, 0], options.depthTest, args.shape);\n}\n\nfunction createMesh (engine: Engine, points: Float32Array, indices: Uint16Array, color: vec3, depthTest = false, name?: string): Mesh {\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(color),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixVP;\n void main(){\n gl_Position = effects_MatrixVP * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', Vector3.fromArray(color));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = depthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n const geometry = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: points,\n },\n },\n indices: {\n data: indices,\n },\n mode: glContext.LINES,\n drawCount: indices.length,\n });\n\n return Mesh.create(\n engine,\n {\n name,\n geometry,\n material,\n priority: 3000,\n });\n}\n","import type { Composition, Mesh, RenderFrame, Scene, Texture, VFXItem } from '@galacean/effects';\nimport { AbstractPlugin, RenderPass, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, TextureLoadAction, removeItem } from '@galacean/effects';\nimport { GizmoVFXItemType } from './define';\nimport { destroyWireframeMesh } from './wireframe';\nimport { axisIconMap } from './constants';\nimport { createImage, createTexture } from './util';\nimport { GeometryType } from './geometry';\nimport { GizmoComponent } from './gizmo-component';\n\nconst editorRenderPassName = 'editor-gizmo';\nconst frontRenderPassName = 'front-gizmo';\nconst behindRenderPassName = 'behind-gizmo';\nconst iconImages: Map<string, HTMLImageElement> = new Map();\n\nexport const iconTextures: Map<string, Texture> = new Map();\n\nexport class EditorGizmoPlugin extends AbstractPlugin {\n meshToAdd: Mesh[] = [];\n meshToRemove: Mesh[] = [];\n override order = 1001;\n\n static override async prepareResource (scene: Scene): Promise<any> {\n if (iconImages.size !== axisIconMap.size) {\n for (const [name, data] of axisIconMap) {\n iconImages.set(name, await createImage(data));\n }\n }\n\n return true;\n }\n\n override onCompositionConstructed (composition: Composition, scene: Scene) {\n const engine = composition.renderer.engine;\n\n iconTextures.clear();\n\n iconImages.forEach((image, name) => {\n iconTextures.set(name, createTexture(engine, image));\n });\n iconImages.clear();\n }\n\n override onCompositionReset (composition: Composition) {\n const items = composition.items;\n const targetMap: { [key: string]: VFXItem[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const gizmoComponent = item.getComponent(GizmoComponent);\n\n if (gizmoComponent) {\n if (!targetMap[gizmoComponent.target]) {\n targetMap[gizmoComponent.target] = [];\n }\n targetMap[gizmoComponent.target].push(item);\n }\n }\n composition.loaderData.gizmoTarget = targetMap;\n composition.loaderData.gizmoItems = [];\n }\n\n // override onCompositionItemLifeBegin (composition: Composition, item: VFXItem<any>) {\n // if (item.type === '7') {\n // return;\n // }\n // const gizmoVFXItemList: GizmoVFXItem[] = composition.loaderData.gizmoTarget[item.id];\n\n // if (gizmoVFXItemList && gizmoVFXItemList.length > 0) {\n // for (const gizmoVFXItem of gizmoVFXItemList) {\n // switch (gizmoVFXItem.subType) {\n // case GizmoSubType.particleEmitter:\n // gizmoVFXItem.createParticleContent(item, this.meshToAdd);\n\n // break;\n // case GizmoSubType.modelWireframe:\n // gizmoVFXItem.createModelContent(item, this.meshToAdd);\n\n // break;\n // case GizmoSubType.box:\n // case GizmoSubType.sphere:\n // case GizmoSubType.cylinder:\n // case GizmoSubType.cone:\n // case GizmoSubType.torus:\n // case GizmoSubType.sprite:\n // case GizmoSubType.frustum:\n // case GizmoSubType.directionLight:\n // case GizmoSubType.pointLight:\n // case GizmoSubType.spotLight:\n // case GizmoSubType.floorGrid:\n // gizmoVFXItem.createBasicContent(item, this.meshToAdd, gizmoVFXItem.subType);\n\n // break;\n // case GizmoSubType.camera:\n // case GizmoSubType.light:\n // gizmoVFXItem.createBasicContent(item, this.meshToAdd, gizmoVFXItem.subType, iconTextures);\n\n // break;\n // case GizmoSubType.rotation:\n // case GizmoSubType.scale:\n // case GizmoSubType.translation:\n // gizmoVFXItem.createCombinationContent(item, this.meshToAdd, gizmoVFXItem.subType);\n\n // break;\n // case GizmoSubType.viewHelper:\n // gizmoVFXItem.createCombinationContent(item, this.meshToAdd, gizmoVFXItem.subType, iconTextures);\n\n // break;\n // case GizmoSubType.boundingBox:\n // gizmoVFXItem.createBoundingBoxContent(item, this.meshToAdd);\n\n // break;\n // default:\n // break;\n // }\n // }\n // }\n // if (item.type === GizmoVFXItemType) {\n // composition.loaderData.gizmoItems.push(item);\n // }\n // }\n\n override onCompositionItemRemoved (composition: Composition, item: VFXItem) {\n if (item.type === GizmoVFXItemType) {\n this.removeGizmoItem(composition, item);\n } else {\n const gizmoVFXItemList: VFXItem[] = composition.loaderData.gizmoTarget[item.id];\n\n if (gizmoVFXItemList && gizmoVFXItemList.length > 0) {\n gizmoVFXItemList.forEach(gizmoVFXItem => {\n this.removeGizmoItem(composition, gizmoVFXItem);\n });\n }\n }\n }\n\n removeGizmoItem (composition: Composition, gizmoVFXItem: VFXItem) {\n const gizmoMesh = gizmoVFXItem.getComponent(GizmoComponent).mesh;\n\n if (gizmoMesh && !gizmoMesh.isDestroyed) {\n gizmoMesh.dispose();\n\n if (gizmoMesh.name === GeometryType.FloorGrid.toString() || gizmoMesh.name === 'Box') {\n this.getFrontRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n }\n }\n if (gizmoVFXItem.getComponent(GizmoComponent).contents) {\n for (const [mesh] of gizmoVFXItem.getComponent(GizmoComponent).contents!) {\n if (!mesh.isDestroyed) {\n mesh.dispose();\n if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(composition.renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n }\n }\n }\n\n const gizmoComponent = gizmoVFXItem.getComponent(GizmoComponent);\n\n if (gizmoComponent && gizmoComponent.wireframeMeshes.length > 0) {\n gizmoComponent.wireframeMeshes.forEach(mesh => {\n if (!mesh.isDestroyed) {\n destroyWireframeMesh(mesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n });\n } else {\n const wireframeMesh = gizmoVFXItem.getComponent(GizmoComponent).wireframeMesh;\n\n if (wireframeMesh && !wireframeMesh.isDestroyed) {\n destroyWireframeMesh(wireframeMesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh);\n }\n }\n\n const arr: VFXItem[] = composition.loaderData.gizmoItems;\n const index = arr.indexOf(gizmoVFXItem);\n\n if (index > -1) {\n arr.splice(index, 1);\n }\n }\n\n override prepareRenderFrame (composition: Composition, renderFrame: RenderFrame): boolean {\n this.meshToAdd.forEach(mesh => {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).addMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).addMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).addMesh(mesh);\n }\n });\n this.meshToRemove.forEach(mesh => {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).removeMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).removeMesh(mesh);\n }\n removeItem(this.meshToAdd, mesh);\n });\n this.meshToRemove.length = 0;\n // composition.loaderData.gizmoItems.forEach((item: GizmoVFXItem) => item.updateRenderData());\n\n return false;\n }\n\n getBehindRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === behindRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: behindRenderPassName,\n priority: RenderPassPriorityPostprocess + RenderPassPriorityPostprocess,\n clearAction: {\n depthAction: TextureLoadAction.clear,\n },\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getEditorRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === editorRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: editorRenderPassName,\n priority: RenderPassPriorityPostprocess + 2,\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getFrontRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === frontRenderPassName);\n\n if (!rp) {\n rp = new RenderPass(pipeline.renderer, {\n name: frontRenderPassName,\n priority: RenderPassPriorityPrepare + 2,\n });\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n}\n","import * as EFFECTS from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin } from '@galacean/effects';\nimport { EditorGizmoPlugin } from './gizmo-loader';\nimport { GizmoSubType } from './define';\nimport { GeometryType, createGeometry } from './geometry';\n\nregisterPlugin('editor-gizmo', EditorGizmoPlugin, VFXItem);\n\nexport { DirectionLightData } from './geometry/direction-light';\nexport {\n GizmoSubType,\n GeometryType,\n createGeometry,\n};\nexport * from './gizmo-component';\n\n/**\n * 插件版本号\n */\nexport const version = __VERSION__;\n\nlogger.info(`Plugin editor gizmo version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Editor Gizmo 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Editor Gizmo plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n"],"names":["GizmoSubType","WireframeGeometryType","GeometryType","BoundingType","CoordinateSpace","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","toString","slice","name","from","test","__decorate","decorators","target","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__generator","thisArg","body","f","y","t","_","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","push","e","_extends","assign","source","hasOwnProperty","SuppressedError","Vector4","math","destroyWireframeMesh","mesh","geometry","dispose","geometries","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","type","material","cloneUniforms","_step","wireframeGeometry","firstGeometry","_iterator","keys","enabledMacros","macro","enableMacro","drawCount","Math","abs","getDrawCount","indexData","getIndexData","data","getTriangleIndexData","oid","faceCount","Uint32Array","idx","base","p0","p1","p2","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","Uint16Array","SharedGeometry","GLGeometry","engine","options","attributes","index","_this","indices","drawStart","mode","_proto","initialize","isInitialized","buffers","bufferProps","indicesBuffer","createIndicesBuffer","flush","initialized","getAttributeNames","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","Map","createImage","imageUrl","image","Image","src","onload","onerror","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","scalerVecCameraItem","normalVecCameraItem","normalize","multiply","vecItemScaler","vecScalerItem","add","set","GeometryData","points","uvs","normals","createXYPlaneCircle","radius","z","segments","thetaStart","thetaLength","startIndex","theta","x","cos","sin","createXZPlaneCircle","createYZPlaneCircle","Vector3","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","iy","verticesRow","uOffset","ix","_this_normals","u","normal","toArray","a","b","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","point","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateCap","top","centerIndexStart","sign","halfHeight","centerIndexEnd","cosTheta","sinTheta","px","py","pz","uvU","uvV","indexArray","generateTorso","slope","indexRow","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","ix1","Euler","Matrix4","FrustumGeometryData","position","rotation","fov","aspect","near","far","_this_points","halfY","tan","fovY","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","FloorLineEdgeGeometryData","sideLength","parts","end","createGeometry","size","geometryData","segments4","Geometry","a_Position","Float32Array","a_Normal","a_UV1","Ray","Vector2","computeOrthographicOffCenter","left","right","bottom","tx","ty","tz","createMeshFromSubType","subType","boundingMap","iconTexture","result","scale","boundSize","xCircle","yCircle","zCircle","center","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","yCircleTransform","zCircleTransform","centerTransform","WebGLRenderingContext","sprite","createSpriteMesh","camera","get","light","translation","createTranslationMesh","axisSize","axisMesh","createAxisMesh","transform","arrowSize","xArrow","createBasicMesh","cone","depthTest","yArrow","zArrow","xArrowTransform","Transform","valid","yArrowTransform","zArrowTransform","setRotation","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","triangle","triangles","getTriangle","backfaceCulling","createScaleMesh","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","sphere","pow","viewHelper","createViewHelperMesh","texture","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","radiusSegments","torus","alpha","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","projectPoint","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","myColor","myAlpha","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","Material","uniformValues","u_color","u_alpha","u_model","shader","shared","fragment","vertex","setVector3","setVector2","setMatrix","IDENTITY","stencilTest","blending","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","depthMask","u_cameraPos","u_center","ZERO","Mesh","priority","_instanceof","hasInstance","Texture","setTexture","line","DEG2RAD","arcPath","_options_translate","rotate","rotMat4","_options_rotate","negate","addPoint","angle","transformNormal","rect","pos","h","forEach","vec","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","myCenter","map","item","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","createMeshFromShape","geo","combineGeometries","indicesBase","shape","LINES","None","Quaternion","constants","GizmoComponent","RendererComponent1","coordinateSpace","mat","fromIdentity","wireframeMeshes","getHitTestParams","worldMat4","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","newPos","composition","setPosition","HitTestType","custom","collect","ray","pointInCanvas","hitPositions","gizmoComponent","getComponent","hitBounding","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","mvpMat4","vpMat4","screenCenter","up","elements","screenPoint","screenCenter2","toVector2","screenPoint2","screenRadius","distance","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","intersectRayLine","out","radiusPoint","getModelViewProjection","screenStart","screenEnd","screenRadiusVector","screenRadiusPoint","distanceOfPointAndLine","AC","BC","AB","subtractVectors","sqrt","P","lengthAC","lengthBC","lengthAB","isInLine","l2","line0","line1","l1","worldAP","screenPosition","worldAB","inverseViewProjection","getInverseViewProjectionMatrix","behavior","spec","InteractBehavior","NOTIFY","onStart","_this_item_composition","_this_item_composition_items","items","id","_step1","pluginSystem","plugins","_iterator1","plugin","gizmoPlugin","particleEmitter","createParticleContent","meshToAdd","modelWireframe","needCreateModelContent","createModelContent","createBasicContent","iconTextures","createCombinationContent","boundingBox","createBoundingBoxContent","loaderData","gizmoItems","onUpdate","dt","updateRenderData","render","wireframeMesh","_this_targetItem_getComponent","pMesh","RendererComponent","content","meshes","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","contents","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","cameraPos","getDefaultRenderMode","getDefaultSize","meshesToAdd","psubMesh","modelComponent","assertExist","materialOptions","originMesh","shaderData","props","macros","glslVersion","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","gizmoItem","fromData","duration","_data_options_color","serialize","effectsClass","editorRenderPassName","frontRenderPassName","behindRenderPassName","iconImages","EditorGizmoPlugin","AbstractPlugin","meshToRemove","order","onCompositionConstructed","scene","clear","onCompositionReset","targetMap","gizmoTarget","onCompositionItemRemoved","removeGizmoItem","gizmoVFXItemList","gizmoVFXItem","gizmoMesh","isDestroyed","getFrontRenderPass","renderFrame","removeMesh","getEditorRenderPass","getBehindRenderPass","indexOf","splice","prepareRenderFrame","addMesh","removeItem","pipeline","rp","renderPasses","find","renderPass","RenderPass","RenderPassPriorityPostprocess","clearAction","depthAction","TextureLoadAction","addRenderPass","RenderPassPriorityPrepare","prepareResource","_state","registerPlugin","VFXItem","version","logger","EFFECTS","console"],"mappings":";;;;;;yUAiBYA,EC2BAC,EC1BAC,ECPAC,EC+sBAC,uSC1tBZ,SAASC,EAAmBC,CAAG,CAAEC,CAAO,CAAEC,CAAM,CAAEC,CAAK,CAAEC,CAAM,CAAEC,CAAG,CAAEC,CAAG,EACrE,GAAI,CACA,IAAIC,EAAOP,CAAG,CAACK,EAAI,CAACC,GAChBE,EAAQD,EAAKC,KAAK,AAC1B,CAAE,MAAOC,EAAO,CACZP,EAAOO,GACP,MACJ,CACIF,EAAKG,IAAI,CAAET,EAAQO,GAClBG,QAAQV,OAAO,CAACO,GAAOI,IAAI,CAACT,EAAOC,EAC5C,CACA,SAASS,EAAoBC,CAAE,EAC3B,OAAO,WACH,IAAIC,EAAO,IAAI,CAAEC,EAAOC,UAExB,OAAO,IAAIN,QAAQ,SAASV,CAAO,CAAEC,CAAM,EACvC,IAAIF,EAAMc,EAAGI,KAAK,CAACH,EAAMC,GAEzB,SAASb,EAAMK,CAAK,EAChBT,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQI,EACpE,CAEA,SAASJ,EAAOe,CAAG,EACfpB,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASe,EACrE,CAEAhB,EAAMiB,KAAAA,EACV,EACJ,CACJ,CC7BA,SAASC,EAAkBC,CAAC,CAAEC,CAAC,EAO3B,MAAOF,AANPA,CAAAA,EAAoBG,OAAOC,cAAc,EAAI,SAAwBH,CAAC,CAAEC,CAAC,EAGrE,OAFAD,EAAEI,SAAS,CAAGH,EAEPD,CACX,CAAA,EAEyBA,EAAGC,EAChC,CCNA,SAASI,EAAUC,CAAQ,CAAEC,CAAU,EACnC,GAAI,AAAsB,YAAtB,OAAOA,GAA6BA,AAAe,OAAfA,EACpC,MAAM,AAAIC,UAAU,qDAGxBF,CAAAA,EAASG,SAAS,CAAGP,OAAOQ,MAAM,CAACH,GAAcA,EAAWE,SAAS,CAAE,CAAEE,YAAa,CAAEzB,MAAOoB,EAAUM,SAAU,CAAA,EAAMC,aAAc,CAAA,CAAK,CAAE,GAE1IN,GAAYR,EAAkBO,EAAUC,EAChD,CCVA,SAASO,EAAqBC,CAAG,CAAEC,CAAG,EAC9BA,CAAAA,AAAO,MAAPA,GAAeA,EAAMD,EAAIE,MAAM,AAANA,GAAQD,CAAAA,EAAMD,EAAIE,MAAM,EAErD,IAAK,IAAIC,EAAI,EAAGC,EAAO,AAAIC,MAAMJ,GAAME,EAAIF,EAAKE,IAAKC,CAAI,CAACD,EAAE,CAAGH,CAAG,CAACG,EAAE,CAErE,OAAOC,CACX,CCJA,SAASE,EAAqCrB,CAAC,CAAEsB,CAAc,EAC3D,IAAIC,EAAK,AAAkB,aAAlB,OAAOC,QAA0BxB,CAAC,CAACwB,OAAOC,QAAQ,CAAC,EAAIzB,CAAC,CAAC,aAAa,CAE/E,GAAIuB,EAAI,MAAO,AAACA,CAAAA,EAAKA,EAAGG,IAAI,CAAC1B,EAAC,EAAG2B,IAAI,CAACC,IAAI,CAACL,GAE3C,GAAIH,MAAMS,OAAO,CAAC7B,IAAOuB,CAAAA,EAAKO,ACLlC,SAAwC9B,CAAC,CAAE+B,CAAM,EAC7C,GAAK/B,GACL,GAAI,AAAa,UAAb,OAAOA,EAAgB,OAAOc,EAAqBd,EAFhB+B,KAAAA,GAIvC,IAAIC,EAAI9B,OAAOO,SAAS,CAACwB,QAAQ,CAACP,IAAI,CAAC1B,GAAGkC,KAAK,CAAC,EAAG,IAGnD,GADU,WAANF,GAAkBhC,EAAEW,WAAW,EAAEqB,CAAAA,EAAIhC,EAAEW,WAAW,CAACwB,IAAI,EACvDH,AAAM,QAANA,GAAeA,AAAM,QAANA,EAAa,OAAOZ,MAAMgB,IAAI,CAACJ,GAClD,GAAIA,AAAM,cAANA,GAAqB,2CAA2CK,IAAI,CAACL,GAAI,OAAOlB,EAAqBd,EARlE+B,KAAAA,GAS3C,EDJiE/B,EAAC,GAAMsB,GAAkBtB,GAAK,AAAoB,UAApB,OAAOA,EAAEiB,MAAM,CAAe,CACjHM,GAAIvB,CAAAA,EAAIuB,GAEZ,IAAIL,EAAI,EAER,OAAO,kBACH,AAAIA,GAAKlB,EAAEiB,MAAM,CAAS,CAAE7B,KAAM,CAAA,CAAK,EAEhC,CAAEA,KAAM,CAAA,EAAOF,MAAOc,CAAC,CAACkB,IAAI,AAAC,CACxC,CACJ,CAEA,MAAM,AAAIV,UAAU,wIACxB,CEkCO,SAAS8B,EAAWC,CAAU,CAAEC,CAAM,CAAEzD,CAAG,CAAE0D,CAAI,EACtD,IAA2HC,EAAvHC,EAAIhD,UAAUsB,MAAM,CAAE2B,EAAID,EAAI,EAAIH,EAASC,AAAS,OAATA,EAAgBA,EAAOvC,OAAO2C,wBAAwB,CAACL,EAAQzD,GAAO0D,EACrH,GAAI,AAAmB,UAAnB,OAAOK,SAAwB,AAA4B,YAA5B,OAAOA,QAAQC,QAAQ,CAAiBH,EAAIE,QAAQC,QAAQ,CAACR,EAAYC,EAAQzD,EAAK0D,QACpH,IAAK,IAAIvB,EAAIqB,EAAWtB,MAAM,CAAG,EAAGC,GAAK,EAAGA,IAASwB,CAAAA,EAAIH,CAAU,CAACrB,EAAE,AAAA,GAAE0B,CAAAA,EAAKD,AAAAA,CAAAA,EAAI,EAAID,EAAEE,GAAKD,EAAI,EAAID,EAAEF,EAAQzD,EAAK6D,GAAKF,EAAEF,EAAQzD,KAAS6D,CAAAA,EAChJ,OAAOD,EAAI,GAAKC,GAAK1C,OAAO8C,cAAc,CAACR,EAAQzD,EAAK6D,GAAIA,CAC9D,CAiEO,SAASK,EAAYC,CAAO,CAAEC,CAAI,EACvC,IAAsGC,EAAGC,EAAGC,EAAxGC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAIH,AAAO,EAAPA,CAAC,CAAC,EAAE,CAAM,MAAMA,CAAC,CAAC,EAAE,CAAE,OAAOA,CAAC,CAAC,EAAE,AAAE,EAAGI,KAAM,EAAE,CAAEC,IAAK,EAAE,AAAC,EAAYC,EAAI1D,OAAOQ,MAAM,CAAC,AAAC,CAAA,AAAoB,YAApB,OAAOmD,SAA0BA,SAAW3D,MAAK,EAAGO,SAAS,EAC/L,OAAOmD,EAAEjC,IAAI,CAAGmC,EAAK,GAAIF,EAAE,KAAQ,CAAGE,EAAK,GAAIF,EAAE,MAAS,CAAGE,EAAK,GAAI,AAAkB,YAAlB,OAAOtC,QAA0BoC,CAAAA,CAAC,CAACpC,OAAOC,QAAQ,CAAC,CAAG,WAAa,OAAO,IAAI,AAAE,CAAA,EAAImC,EAC1J,SAASE,EAAK9B,CAAC,EAAI,OAAO,SAAU+B,CAAC,EAAI,OAAOC,AAChD,SAAcC,CAAE,EACZ,GAAIb,EAAG,MAAM,AAAI5C,UAAU,mCAC3B,KAAOoD,GAAMA,CAAAA,EAAI,EAAGK,CAAE,CAAC,EAAE,EAAKV,CAAAA,EAAI,CAAA,CAAA,EAAKA,GAAG,GAAI,CAC1C,GAAIH,EAAI,EAAGC,GAAMC,CAAAA,EAAIW,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAOZ,EAAE,MAAS,CAAGY,CAAE,CAAC,EAAE,CAAGZ,EAAE,KAAQ,EAAMC,CAAAA,AAAAA,CAAAA,EAAID,EAAE,MAAS,GAAKC,EAAE5B,IAAI,CAAC2B,GAAI,CAAA,EAAKA,EAAE1B,IAAI,AAAA,GAAK,CAAE2B,AAAAA,CAAAA,EAAIA,EAAE5B,IAAI,CAAC2B,EAAGY,CAAE,CAAC,EAAE,CAAA,EAAG7E,IAAI,CAAE,OAAOkE,EAE3J,OADID,EAAI,EAAJA,AAAOC,GAAGW,CAAAA,EAAK,CAACA,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAMX,EAAEpE,KAAK,CAAC,AAAA,EAC/B+E,CAAE,CAAC,EAAE,EACT,KAAK,EAAG,KAAK,EAAGX,EAAIW,EAAI,KACxB,MAAK,EAAc,OAAXV,EAAEC,KAAK,GAAW,CAAEtE,MAAO+E,CAAE,CAAC,EAAE,CAAE7E,KAAM,CAAA,CAAM,CACtD,MAAK,EAAGmE,EAAEC,KAAK,GAAIH,EAAIY,CAAE,CAAC,EAAE,CAAEA,EAAK,CAAC,EAAE,CAAE,QACxC,MAAK,EAAGA,EAAKV,EAAEI,GAAG,CAACO,GAAG,GAAIX,EAAEG,IAAI,CAACQ,GAAG,GAAI,QACxC,SACI,GAAMZ,CAAYA,CAAAA,EAAIA,AAAhBA,CAAAA,EAAIC,EAAEG,IAAI,EAAQzC,MAAM,CAAG,GAAKqC,CAAC,CAACA,EAAErC,MAAM,CAAG,EAAE,AAAF,GAAQgD,CAAAA,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAUA,AAAU,IAAVA,CAAE,CAAC,EAAE,AAAK,EAAI,CAAEV,EAAI,EAAG,QAAU,CAC3G,GAAIU,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAW,CAAA,CAACX,GAAMW,CAAE,CAAC,EAAE,CAAGX,CAAC,CAAC,EAAE,EAAIW,CAAE,CAAC,EAAE,CAAGX,CAAC,CAAC,EAAE,AAAF,EAAM,CAAEC,EAAEC,KAAK,CAAGS,CAAE,CAAC,EAAE,CAAE,KAAO,CACrF,GAAIA,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAUV,EAAEC,KAAK,CAAGF,CAAC,CAAC,EAAE,CAAE,CAAEC,EAAEC,KAAK,CAAGF,CAAC,CAAC,EAAE,CAAEA,EAAIW,EAAI,KAAO,CACpE,GAAIX,GAAKC,EAAEC,KAAK,CAAGF,CAAC,CAAC,EAAE,CAAE,CAAEC,EAAEC,KAAK,CAAGF,CAAC,CAAC,EAAE,CAAEC,EAAEI,GAAG,CAACQ,IAAI,CAACF,GAAK,KAAO,CAC9DX,CAAC,CAAC,EAAE,EAAEC,EAAEI,GAAG,CAACO,GAAG,GACnBX,EAAEG,IAAI,CAACQ,GAAG,GAAI,QACtB,CACAD,EAAKd,EAAKzB,IAAI,CAACwB,EAASK,EAC5B,CAAE,MAAOa,EAAG,CAAEH,EAAK,CAAC,EAAGG,EAAE,CAAEf,EAAI,SAAa,CAAED,EAAIE,EAAI,CAAG,CACzD,GAAIW,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAM,MAAMA,CAAE,CAAC,EAAE,CAAE,MAAO,CAAE/E,MAAO+E,CAAE,CAAC,EAAE,CAAGA,CAAE,CAAC,EAAE,CAAG,KAAK,EAAG7E,KAAM,CAAA,CAAK,CACnF,EAtBqD,CAAC4C,EAAG+B,EAAE,CAAG,CAAG,CAuBnE,CCtJA,SAASM,IAUL,MAAOA,AATPA,CAAAA,EAAWnE,OAAOoE,MAAM,EAAI,SAAgB9B,CAAM,EAC9C,IAAK,IAAItB,EAAI,EAAGA,EAAIvB,UAAUsB,MAAM,CAAEC,IAAK,CACvC,IAAIqD,EAAS5E,SAAS,CAACuB,EAAE,CACzB,IAAK,IAAInC,KAAOwF,EAAYrE,OAAOO,SAAS,CAAC+D,cAAc,CAAC9C,IAAI,CAAC6C,EAAQxF,IAAMyD,CAAAA,CAAM,CAACzD,EAAI,CAAGwF,CAAM,CAACxF,EAAI,AAAA,CAC5G,CAEA,OAAOyD,CACX,CAAA,EAEgB5C,KAAK,CAAC,IAAI,CAAED,UAChC,CD4TuB,AAA2B,YAA3B,OAAO8E,iBAAiCA,uCXtTnDrG,EAAAA,EAAAA,YAAAA,EAAAA,CAAAA,cAAAA,CAAAA,CAAAA,CAAAA,0kBCdZ,IAAQsG,EAAYC,EAAZD,IAAAA,CAAAA,OAAAA,CA8CD,SAASE,EAAsBC,CAAU,EAC9CA,IAAAA,CAAAA,AAAAA,OAAAA,CAAAA,EAAAA,EAAKC,QAAQ,GAAbD,EAAeE,OAAO,GACtBF,EAAKE,OAAO,CAAC,CAAEC,WAAYC,iBAAeC,IAAI,AAAC,EACjD,CAEO,SAASC,EAAqBC,CAAwB,CAAEC,CAAwB,CAAEC,CAAe,CAAEC,CAA2B,EACnID,EAAUE,QAAQ,CAACC,aAAa,CAACJ,GAKjC,IAAA,IAA+DK,EAFzDC,EAAoBL,EAAUM,aAAa,GAEjDC,EAAAxE,EAAoBnB,OAAO4F,IAAI,CAACT,EAAeU,aAAa,GAAG,CAAA,AAAAL,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,CAApD4G,IAAAA,EAAAA,EAAAA,KAAAA,CACTV,EAAUE,QAAQ,CAACS,WAAW,CAACD,EAAOX,EAAeU,aAAa,CAACC,EAAM,CAC3E,CAEA,GAAIT,AAAyC,IAAzCA,EAAyC,CAE3C,IAAMW,EAAYC,KAAKC,GAAG,CAACtB,AATZM,EASqBiB,YAAY,IAEhD,GAAIH,AAAc,IAAdA,GACEA,IAAcP,EAAkBU,YAAY,GAAK,EAAG,CACtD,IAAMC,EAAYxB,AAbPM,EAagBmB,YAAY,GACjCC,EAAOF,EAAYG,AAkGjC,SAA+BC,CAAgB,EAI7C,IAAK,IAHCC,EAAYD,EAAIzF,MAAM,CAAG,EACzBqF,EAAY,IAAIM,YAAYD,AAAY,EAAZA,GAEzBzF,EAAI,EAAGA,EAAIyF,EAAWzF,IAAK,CAClC,IAAM2F,EAAM3F,AAAI,EAAJA,EACN4F,EAAO5F,AAAI,EAAJA,EACP6F,EAAKL,CAAG,CAACI,EAAK,CACdE,EAAKN,CAAG,CAACI,EAAO,EAAE,CAClBG,EAAKP,CAAG,CAACI,EAAO,EAAE,AAExBR,CAAAA,CAAS,CAACO,EAAI,CAAGE,EACjBT,CAAS,CAACO,EAAM,EAAE,CAAGG,EACrBV,CAAS,CAACO,EAAM,EAAE,CAAGG,EACrBV,CAAS,CAACO,EAAM,EAAE,CAAGI,EACrBX,CAAS,CAACO,EAAM,EAAE,CAAGI,EACrBX,CAAS,CAACO,EAAM,EAAE,CAAGE,CACvB,CAEA,OAAOT,CACT,EAtHsDA,GAAaY,AA6EnE,SAAsChB,CAAiB,EAIrD,IAAK,IAHCS,EAAYT,EAAY,EACxBI,EAAY,IAAIM,YAAYD,AAAY,EAAZA,GAEzBzF,EAAI,EAAGA,EAAIyF,EAAWzF,IAAK,CAClC,IAAM2F,EAAM3F,AAAI,EAAJA,EACN6F,EAAK7F,AAAI,EAAJA,EACL8F,EAAKD,EAAK,EACVE,EAAKF,EAAK,CAEhBT,CAAAA,CAAS,CAACO,EAAI,CAAGE,EACjBT,CAAS,CAACO,EAAM,EAAE,CAAGG,EACrBV,CAAS,CAACO,EAAM,EAAE,CAAGG,EACrBV,CAAS,CAACO,EAAM,EAAE,CAAGI,EACrBX,CAAS,CAACO,EAAM,EAAE,CAAGI,EACrBX,CAAS,CAACO,EAAM,EAAE,CAAGE,CACvB,CAEA,OAAOT,CACT,EAhG+FJ,GAEvFP,EAAkBwB,YAAY,CAACX,GAC/Bb,EAAkByB,YAAY,CAACZ,EAAKvF,MAAM,CAC5C,CAEJ,MAAO,GAAIsE,AAAqC,IAArCA,GACLT,AArBWM,EAqBFiB,YAAY,GAAK,GAAMV,EAAkBU,YAAY,GAAK,EAAG,CACxE,IAAMG,EAAOa,AAUnB,SAA2BV,CAAiB,CAAED,CAAgB,EAG5D,IAAK,IAFCJ,EAAY,IAAIgB,YAAYX,AAAY,EAAZA,GAEzBzF,EAAI,EAAGA,EAAIyF,EAAWzF,IAAK,CAClC,IAAM2F,EAAM3F,AAAI,EAAJA,EACN4F,EAAO5F,AAAI,EAAJA,CAEboF,CAAAA,CAAS,CAACO,EAAI,CAAGC,EACjBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAG,EAAIC,EACzBR,CAAS,CAACO,EAAM,EAAE,CAAGC,CACvB,CAEA,OAAOR,CACT,EA5BoCxB,AAtBjBM,EAsB0BiB,YAAY,GAAK,EAAGvB,AAtB9CM,EAsBuDmB,YAAY,IAEhFZ,EAAkBwB,YAAY,CAACX,GAC/Bb,EAAkByB,YAAY,CAACZ,EAAKvF,MAAM,CAC5C,CAGF,OAAOqE,CACT,EA3CYjH,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,CAAAA,+CA4JL,IAAAkJ,EAAK,SAALC,CAAA,WAAMD,EAGEE,CAAc,CAAEC,CAA8B,gBACnDD,EAAQpD,EAAA,CAAEsD,WAAY,CAAC,CAAMD,EAAAA,KAAAA,IAAAA,CACnC,MAAIpB,EAAYoB,EAAQE,KAAK,CAAGF,EAAQE,KAAK,CAACpB,IAAI,CAAGkB,EAAQ5C,QAAQ,CAACyB,YAAY,GAWlF,IAAK,IAAMpE,KATPmE,GAEFA,CAAAA,EAAY,IAAIA,EAAU3F,WAAW,CAAC2F,EAAAA,EAExCuB,EAAKC,OAAO,CAAGxB,EACfuB,EAAKtD,MAAM,CAAGmD,EAAQ5C,QAAQ,CAC9B+C,EAAK3B,SAAS,CAAGwB,EAAQxB,SAAS,EAAI,EACtC2B,EAAKE,SAAS,CAAGL,EAAQK,SAAS,EAAI,EACtCF,EAAKG,IAAI,CAAGN,EAAQM,IAAI,EAAI,EACTH,EAAKtD,MAAM,CAACoD,UAAU,CACvCE,EAAKF,UAAU,CAACxF,EAAK,CAAGkC,EAAA,CAAA,EAAKwD,EAAKtD,MAAM,CAACoD,UAAU,CAACxF,EAAK,WAjBlDoF,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAqBXU,EAASC,UAiBR,CAjBD,WACO,IAAI,CAACC,aAAa,GAGrBrD,AAFiB,IAAI,CAACP,MAAM,CAEnB2D,UAAU,GAEnB,IAAI,CAACE,OAAO,CAAG,IAAI,CAAC7D,MAAM,CAAC6D,OAAO,CAClC,IAAI,CAACC,WAAW,CAAG,IAAI,CAAC9D,MAAM,CAAC8D,WAAW,CAItC,IAAI,CAACP,OAAO,EACd,CAAA,IAAI,CAACQ,aAAa,CAAG,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACT,OAAO,CAAA,EAE5D,IAAI,CAACU,KAAK,GACV,IAAI,CAACC,WAAW,CAAG,CAAA,EAEvB,EAEAR,EAASS,iBAER,CAFD,WACE,OAAO,IAAI,CAACnE,MAAM,CAACmE,iBAAiB,EACtC,EAEAT,EAASO,KAIR,CAJD,WACE,IAAI,CAACjE,MAAM,CAACiE,KAAK,GAEjBhB,EAAA/G,SAAA,CAAM+H,KAAD,CAAA9G,IAAA,CAAA,IAAA,CACP,EAEAuG,EAASlD,OAOR,CAPD,WAEE,IAAI,CAACqD,OAAO,CAAG,GACf,IAAI,CAACC,WAAW,CAAG,GACnBb,EAAA/G,SAAA,CAAMsE,OAAD,CAAArD,IAAA,CAAA,IAAA,EAEL,IAAI,CAAC6C,MAAM,CAAG,IAChB,EAzDWgD,GAAuBC,YA0DnC,EY/PYmB,EAAQ,CACnBC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,IAAI,CAC5CC,WAAY,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,IAAI,CAC5CC,WAAY,CAAC,IAAM,IAAK,GAAK,IAAK,IAAM,IAAI,AAC9C,EACaC,EAAaC,EAAUC,SAAAA,CAAAA,SAAS,CAEhCC,EAAmC,IAAIC,ICA9BC,SAAAA,IAAAA,MAAAA,AAAAA,CAAAA,EAAf7J,EAAA,SAA4B8J,CAAgB,EAC3CC,IAAAA,4BAIN,MAFAA,AAFMA,CAAAA,EAAQ,IAAIC,OAEZC,GAAG,CAAGH,EAEZ,GAAO,IAAIhK,QAA0B,SAACV,CAASC,CAAAA,CAAAA,EAC7C0K,EAAMG,MAAM,CAAG,WACb9K,EAAQ2K,EACV,EACAA,EAAMI,OAAO,CAAG9K,CAClB,KACF,EAAA,EAXsBwK,KAAAA,CAAAA,IAAAA,CAAAA,WAoCf,SAASO,EAA6BC,CAAkB,CAAEC,CAAmB,EAClF,IAAMC,EAAgBD,EAAWE,KAAK,GAAGC,QAAQ,CAACJ,GAG5CK,EAAsBC,AADAJ,EAAcC,KAAK,GAAGI,SAAS,GACXJ,KAAK,GAAGK,QAAQ,CAAC,IAG3DC,EAAgBC,AADAR,EAAcC,KAAK,GAAGC,QAAQ,CAACC,GACjBF,KAAK,GAAGK,QAAQ,CAAC,IAErD,OAAOP,EAAWE,KAAK,GAAGQ,GAAG,CAACF,EAChC,CD5CAnB,EAAYsB,GAAG,CACb,QAAU,krKAsDZtB,EAAYsB,GAAG,CACb,SAAW,04XA0HbtB,EAAYsB,GAAG,CACb,OAAS,ksQAqFXtB,EAAYsB,GAAG,CACb,OAAS,k8OA6EXtB,EAAYsB,GAAG,CACb,OAAS,87OA6EXtB,EAAYsB,GAAG,CACb,OAAS,0/PAmFXtB,EAAYsB,GAAG,CACb,OAAS,84QAuFXtB,EAAYsB,GAAG,CACb,OAAS,s9PE1lBJ,IAAAC,EAAK,WAAUA,SAAAA,IACpBC,IAAAA,CAAAA,MAAAA,CAAmB,EAAE,CACrBC,IAAAA,CAAAA,GAAAA,CAAgB,EAAE,CAClBC,IAAAA,CAAAA,OAAAA,CAAoB,EAAE,CACtB9C,IAAAA,CAAAA,OAAAA,CAAoB,EAAE,CAJF2C,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAiBpBI,EAAAA,mBAkBC,CAlBDA,SACEC,CAAc,CACdC,CAAS,CACTC,CAAgB,CAChBC,CAAkB,CAClBC,CAAmB,CACnBC,CAAkB,CAClBT,CAAgB,CAChB5C,CAAiB,EAEjB,IAAK,IAAI5G,EAAI,EAAGA,EAAI8J,EAAU9J,IAAK,CACjC,IAAMkK,EAAQH,EAAa/J,EAAIgK,EAAcF,EACvCK,EAAIP,EAAS3E,KAAKmF,GAAG,CAACF,GACtB/H,EAAIyH,EAAS3E,KAAKoF,GAAG,CAACH,GAE5BV,EAAOvG,IAAI,CAACkH,EAAGhI,EAAG0H,GAClBjD,EAAQ3D,IAAI,CAACgH,EAAajK,EAAGiK,EAAa,AAACjK,CAAAA,EAAI,CAAA,EAAK8J,EACtD,CACF,EAaAQ,EAAAA,mBAkBC,CAlBDA,SACEV,CAAc,CACdzH,CAAS,CACT2H,CAAgB,CAChBC,CAAkB,CAClBC,CAAmB,CACnBC,CAAkB,CAClBT,CAAgB,CAChB5C,CAAiB,EAEjB,IAAK,IAAI5G,EAAI,EAAGA,EAAI8J,EAAU9J,IAAK,CACjC,IAAMkK,EAAQH,EAAa/J,EAAIgK,EAAcF,EACvCK,EAAIP,EAAS3E,KAAKmF,GAAG,CAACF,GACtBL,EAAID,EAAS3E,KAAKoF,GAAG,CAACH,GAE5BV,EAAOvG,IAAI,CAACkH,EAAGhI,EAAG0H,GAClBjD,EAAQ3D,IAAI,CAACgH,EAAajK,EAAGiK,EAAa,AAACjK,CAAAA,EAAI,CAAA,EAAK8J,EACtD,CACF,EAaAS,EAAAA,mBAkBC,CAlBDA,SACEX,CAAc,CACdO,CAAS,CACTL,CAAgB,CAChBC,CAAkB,CAClBC,CAAmB,CACnBC,CAAkB,CAClBT,CAAgB,CAChB5C,CAAiB,EAEjB,IAAK,IAAI5G,EAAI,EAAGA,EAAI8J,EAAU9J,IAAK,CACjC,IAAMkK,EAAQH,EAAa/J,EAAIgK,EAAcF,EACvCD,EAAID,EAAS3E,KAAKmF,GAAG,CAACF,GACtB/H,EAAIyH,EAAS3E,KAAKoF,GAAG,CAACH,GAE5BV,EAAOvG,IAAI,CAACkH,EAAGhI,EAAG0H,GAClBjD,EAAQ3D,IAAI,CAACgH,EAAajK,EAAGiK,EAAa,AAACjK,CAAAA,EAAI,CAAA,EAAK8J,EACtD,CACF,EAjGoBP,CAkGrB,IClGOiB,EAAY/G,EAAZ+G,IAAAA,CAAAA,OAAAA,CAKDC,EAAK,SAALlB,CAAA,EAAMkB,SAAAA,EAYTb,CAAU,CACVc,CAAiB,CACjBC,CAAkB,CAClBC,CAAY,CACZC,CAAuB,CACvBd,CAAc,CACdC,CAAqB,WANrBJ,GAAAA,CAAAA,EAAS,CAAA,WACTc,GAAAA,CAAAA,EAAgB,CAAA,WAChBC,GAAAA,CAAAA,EAAiB,CAAA,WACjBC,GAAAA,CAAAA,EAAW,CAAA,EACXC,KAAAA,IAAAA,GAAAA,CAAAA,EAAY5F,AAAU,EAAVA,KAAK6F,EAAE,AAAG,WACtBf,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,KAAK6F,EAAE,AAAFA,uBAKnBJ,EAAgBzF,KAAK8F,GAAG,CAAC,EAAG9F,KAAK+F,KAAK,CAACN,IACvCC,EAAiB1F,KAAK8F,GAAG,CAAC,EAAG9F,KAAK+F,KAAK,CAACL,IAMxC,IAAK,IAJCM,EAAWhG,KAAKiG,GAAG,CAACnB,EAAaC,EAAa/E,KAAK6F,EAAE,EACrDK,EAAO,EAAE,CACXzE,EAAQ,EAEH0E,EAAK,EAAGA,GAAMT,EAAgBS,IAAM,CAC3C,IAAMC,EAAc,EAAE,CAChBxI,EAAIuI,EAAKT,EAEXW,EAAU,CAEVF,AAAM,CAAA,GAANA,GAAWrB,AAAc,GAAdA,EACbuB,EAAU,GAAMZ,EACPU,GAAMT,GAAkBM,GAAYhG,KAAK6F,EAAE,EACpDQ,CAAAA,EAAU,IAAQZ,GAGpB,IAAK,IAAIa,EAAK,EAAGA,GAAMb,EAAea,IAAM,CAC1C,MAYAC,EAZMC,EAAIF,EAAKb,EAGTP,EAAI,CAAEP,EAAS3E,KAAKmF,GAAG,CAACQ,EAAWa,EAAIZ,GAAa5F,KAAKoF,GAAG,CAACN,EAAalH,EAAImH,GAC9E7H,EAAIyH,EAAS3E,KAAKmF,GAAG,CAACL,EAAalH,EAAImH,GACvCH,EAAID,EAAS3E,KAAKoF,GAAG,CAACO,EAAWa,EAAIZ,GAAa5F,KAAKoF,GAAG,CAACN,EAAalH,EAAImH,GAElFrD,EAAK6C,MAAM,CAACvG,IAAI,CAACkH,EAAGhI,EAAG0H,GAGvB,IAAM6B,EAAS,IAAIlB,EAAQL,EAAGhI,EAAG0H,GAAGZ,SAAS,GAE7C,AAAAuC,CAAAA,EAAA7E,EAAK+C,OAAO,AAAA,EAACzG,IAAI,CAAjBvE,KAAA,CAAA8M,EAAqBE,EAAAA,CAAAA,MAAAA,CAAAA,EAAOC,OAAO,KAGnChF,EAAK8C,GAAG,CAACxG,IAAI,CAACwI,EAAIH,EAAS,EAAIzI,GAE/BwI,EAAYpI,IAAI,CAACyD,IACnB,CAEAyE,EAAKlI,IAAI,CAACoI,EACZ,CAGA,IAAK,IAAID,EAAK,EAAGA,EAAKT,EAAgBS,IACpC,IAAK,IAAIG,EAAK,EAAGA,EAAKb,EAAea,IAAM,CACzC,IAAMK,EAAIT,CAAI,CAACC,EAAG,CAACG,EAAK,EAAE,CACpBM,EAAIV,CAAI,CAACC,EAAG,CAACG,EAAG,CAChB9J,EAAI0J,CAAI,CAACC,EAAK,EAAE,CAACG,EAAG,CACpB/J,EAAI2J,CAAI,CAACC,EAAK,EAAE,CAACG,EAAK,EAAE,CAE1BH,CAAAA,AAAO,IAAPA,GAAYrB,EAAa,CAAA,GAAKpD,EAAKC,OAAO,CAAC3D,IAAI,CAAC2I,EAAGC,EAAGrK,GACtD4J,CAAAA,IAAOT,EAAiB,GAAKM,EAAWhG,KAAK6F,EAAE,AAAFA,GAAMnE,EAAKC,OAAO,CAAC3D,IAAI,CAAC4I,EAAGpK,EAAGD,EACjF,UA5EOiJ,OAAAA,EAAAA,EAAAA,GAAAA,GAA2BlB,GCJjCuC,EAAK,SAALvC,CAAA,EAAMuC,SAAAA,EAOEC,CAAS,CAAEC,CAAU,CAAEC,CAAS,WAAhCF,GAAAA,CAAAA,EAAQ,CAAA,WAAGC,GAAAA,CAAAA,EAAS,CAAA,WAAGC,GAAAA,CAAAA,EAAQ,CAAA,QAYjCC,EAAT,SAAqBT,CAAS,CAAE5I,CAAS,CAAEsJ,CAAS,CAAEC,CAAY,CAChEC,CAAY,CAAEN,CAAa,CAAEC,CAAc,CAAEC,CAAa,CAC1DzC,CAAgB,CAAEC,CAAa,CAAEC,CAAiB,CAAE9C,CAAiB,EAQrE,IAAK,IANC0F,EAAYP,EAAQ,EACpBQ,EAAaP,EAAS,EACtBQ,EAAYP,EAAQ,EACpBQ,EAAmB,CAAC,EAAG,EAAG,EAAE,CAC9BC,EAAgB,EAEXtB,EAAK,EAAGA,EAAK,EAAGA,IAGvB,IAAK,IAFCjJ,EAAIiJ,EAAKY,EAASO,EAEfhB,EAAK,EAAGA,EAAK,EAAGA,IAAM,CAC7B,IAAMpB,EAAIoB,EAAKQ,EAAQO,CAEvBG,CAAAA,CAAK,CAAChB,EAAE,CAAGtB,EAAIiC,EACfK,CAAK,CAAC5J,EAAE,CAAGV,EAAIkK,EACfI,CAAK,CAACN,EAAE,CAAGK,EAEXhD,AAAAA,EAAOvG,IAAI,CAAXuG,MAAAA,EAAeiD,EAAAA,CAAAA,MAAAA,CAAAA,IAEfA,CAAK,CAAChB,EAAE,CAAG,EACXgB,CAAK,CAAC5J,EAAE,CAAG,EACX4J,CAAK,CAACN,EAAE,CAAGF,EAAQ,EAAI,EAAI,GAE3BvC,AAAAA,EAAQzG,IAAI,CAAZyG,MAAAA,EAAgB+C,EAAAA,CAAAA,MAAAA,CAAAA,IAEhBhD,EAAIxG,IAAI,CAACsI,GACT9B,EAAIxG,IAAI,CAAC,EAAImI,GAEbsB,GAAiB,CACnB,CAGF,IAAK,IAAItB,EAAK,EAAGA,EAAK,EAAGA,IACvB,IAAK,IAAIG,EAAK,EAAGA,EAAK,EAAGA,IAAM,CAC7B,IAAMK,EAAIe,EAAmBpB,EAAK,EAAIH,EAChCS,EAAIc,EAAmBpB,EAAK,EAAKH,CAAAA,EAAK,CAAA,EACtC3J,EAAIkL,EAAoBpB,CAAAA,EAAK,CAAA,EAAK,EAAKH,CAAAA,EAAK,CAAA,EAC5C5J,EAAImL,EAAoBpB,CAAAA,EAAK,CAAA,EAAK,EAAIH,EAE5CxE,EAAQ3D,IAAI,CAAC2I,EAAGC,EAAGrK,GACnBoF,EAAQ3D,IAAI,CAAC4I,EAAGpK,EAAGD,EACrB,CAGFmL,GAAoBD,CACtB,uBAzDA,IAAIC,EAAmB,SAEvBT,EAAW,EAAG,EAAG,EAAG,GAAK,GAAKD,EAAOD,EAAQD,EAAOpF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACrGsF,EAAW,EAAG,EAAG,EAAG,EAAG,GAAKD,EAAOD,EAAQ,CAAED,EAAOpF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACrGsF,EAAW,EAAG,EAAG,EAAG,EAAG,EAAGH,EAAOE,EAAOD,EAAQrF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACjGsF,EAAW,EAAG,EAAG,EAAG,EAAG,GAAKH,EAAOE,EAAO,CAAED,EAAQrF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACrGsF,EAAW,EAAG,EAAG,EAAG,EAAG,GAAKH,EAAOC,EAAQC,EAAOtF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACnGsF,EAAW,EAAG,EAAG,EAAG,GAAK,GAAKH,EAAOC,EAAQ,CAAEC,EAAOtF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,IAjB9FkF,OAAAA,EAAAA,EAAAA,GAAAA,GAAwBvC,GCD7BiB,EAAY/G,EAAZ+G,IAAAA,CAAAA,OAAAA,CAKDoC,EAAK,SAALrD,CAAA,EAAMqD,SAAAA,EAaTC,CAAa,CACbC,CAAgB,CAChBd,CAAU,CACVe,CAAkB,CAClBpC,CAAkB,CAClBqC,CAAiB,CACjBjD,CAAc,CACdC,CAAyB,WAPzB6C,GAAAA,CAAAA,EAAY,CAAA,WACZC,GAAAA,CAAAA,EAAe,CAAA,WACfd,GAAAA,CAAAA,EAAS,CAAA,WACTe,GAAAA,CAAAA,EAAiB,CAAA,WACjBpC,GAAAA,CAAAA,EAAiB,CAAA,WACjBqC,GAAAA,CAAAA,EAAY,CAAA,CAAA,WACZjD,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,AAAU,EAAVA,KAAK6F,EAAE,AAAG,QA+DfmC,EAAT,SAAsBC,CAAY,CAAE1D,CAAgB,CAAEC,CAAa,CAAEC,CAAiB,CAAE9C,CAAiB,EAMvG,IAAK,IALCuG,EAAmBzG,EAEnBkD,EAAUsD,AAAQ,CAAA,IAARA,EAAgBL,EAAYC,EACtCM,EAAQF,AAAQ,CAAA,IAARA,EAAgB,EAAI,GAEzB/C,EAAI,EAAGA,GAAK4C,EAAgB5C,IACnCX,EAAOvG,IAAI,CAAC,EAAGoK,EAAaD,EAAM,GAClC1D,EAAQzG,IAAI,CAAC,EAAGmK,EAAM,GACtB3D,EAAIxG,IAAI,CAAC,GAAK,IAEdyD,IAKF,IAAK,IAFC4G,EAAiB5G,EAEdyD,EAAI,EAAGA,GAAK4C,EAAgB5C,IAAK,CAGxC,IAAMD,EAAQuB,AADJtB,EAAI4C,EACI/C,EAAcD,EAE1BwD,EAAWtI,KAAKmF,GAAG,CAACF,GACpBsD,EAAWvI,KAAKoF,GAAG,CAACH,GAEpBuD,EAAK7D,EAAS4D,EACdE,EAAKL,EAAaD,EAClBO,EAAK/D,EAAS2D,EAEpB/D,EAAOvG,IAAI,CAACwK,EAAIC,EAAIC,GAEpBjE,EAAQzG,IAAI,CAAC,EAAGmK,EAAM,GAEtB,IAAMQ,EAAML,AAAY,GAAZA,EAAmB,GACzBM,EAAOL,AAAW,GAAXA,EAAiBJ,EAAQ,GAEtC3D,EAAIxG,IAAI,CAAC2K,EAAKC,GAEdnH,GACF,CAEA,IAAK,IAAIyD,EAAI,EAAGA,EAAI4C,EAAgB5C,IAAK,CACvC,IAAM1I,EAAI0L,EAAmBhD,EACvBnK,EAAIsN,EAAiBnD,CAEvB+C,AAAQ,EAAA,IAARA,EACFtG,EAAQ3D,IAAI,CAACjD,EAAGA,EAAI,EAAGyB,GAEvBmF,EAAQ3D,IAAI,CAACjD,EAAI,EAAGA,EAAGyB,EAE3B,CACF,uBA9GAsL,EAAiB9H,KAAK+F,KAAK,CAAC+B,GAC5BpC,EAAiB1F,KAAK+F,KAAK,CAACL,GAE5B,IAAIjE,EAAQ,EACNoH,EAAyB,EAAE,CAC3BT,EAAarB,EAAS,SAE5B+B,AAOA,SAAwBvE,CAAgB,CAAEC,CAAa,CAAEC,CAAiB,CAAE9C,CAAiB,EAI3F,IAAK,IAFCoH,EAASlB,AAAAA,CAAAA,EAAeD,CAAAA,EAAab,EAElC7J,EAAI,EAAGA,GAAKwI,EAAgBxI,IAAK,CAMxC,IAAK,IALC8L,EAAW,EAAE,CACbpL,EAAIV,EAAIwI,EAERf,EAAS/G,EAAKiK,CAAAA,EAAeD,CAAQ,EAAKA,EAEvC1C,EAAI,EAAGA,GAAK4C,EAAgB5C,IAAK,CACxC,IAAMsB,EAAItB,EAAI4C,EACR7C,EAAQuB,EAAIzB,EAAcD,EAC1ByD,EAAWvI,KAAKoF,GAAG,CAACH,GACpBqD,EAAWtI,KAAKmF,GAAG,CAACF,GAEpBuD,EAAK7D,EAAS4D,EACdE,EAAK,CAAE7K,EAAImJ,EAASqB,EACpBM,EAAK/D,EAAS2D,EAEpB/D,EAAOvG,IAAI,CAACwK,EAAIC,EAAIC,GAEpB,IAAMjC,EAAS,IAAIlB,EAAQgD,EAAUQ,EAAOT,GAAUtE,SAAS,GAE/DS,AAAAA,EAAQzG,IAAI,CAAZyG,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAgBgC,EAAOC,OAAO,KAE9BlC,EAAIxG,IAAI,CAACwI,EAAG,EAAI5I,GAEhBoL,EAAShL,IAAI,CAACyD,IAChB,CACAoH,EAAW7K,IAAI,CAACgL,EAClB,CAEA,IAAK,IAAI9D,EAAI,EAAGA,EAAI4C,EAAgB5C,IAClC,IAAK,IAAIhI,EAAI,EAAGA,EAAIwI,EAAgBxI,IAAK,CACvC,IAAMyJ,EAAIkC,CAAU,CAAC3L,EAAE,CAACgI,EAAE,CACpB0B,EAAIiC,CAAU,CAAC3L,EAAI,EAAE,CAACgI,EAAE,CACxB1I,EAAIqM,CAAU,CAAC3L,EAAI,EAAE,CAACgI,EAAI,EAAE,CAC5B3I,EAAIsM,CAAU,CAAC3L,EAAE,CAACgI,EAAI,EAAE,CAE9BvD,EAAQ3D,IAAI,CAAC2I,EAAGC,EAAGrK,GACnBoF,EAAQ3D,IAAI,CAAC4I,EAAGpK,EAAGD,EACrB,CAEJ,EAnDcmF,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EAE7C,CAAA,IAAdoG,IACEH,EAAY,GAAKI,EAAY,CAAA,EAAMtG,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,EACpFkG,EAAe,GAAKG,EAAY,CAAA,EAAOtG,EAAK6C,MAAM,CAAE7C,EAAK8C,GAAG,CAAE9C,EAAK+C,OAAO,CAAE/C,EAAKC,OAAO,KAlCrFgG,OAAAA,EAAAA,EAAAA,GAAAA,GAA6BrD,GCHnC2E,EAAK,SAALtB,CAAA,EAAMsB,SAAAA,EAYTtE,CAAU,CACVoC,CAAU,CACVe,CAAkB,CAClBpC,CAAkB,CAClBqC,CAAiB,CACjBjD,CAAc,CACdC,CAAyB,EAEnB,gBARNJ,GAAAA,CAAAA,EAAS,CAAA,WACToC,GAAAA,CAAAA,EAAS,CAAA,WACTe,GAAAA,CAAAA,EAAiB,CAAA,WACjBpC,GAAAA,CAAAA,EAAiB,CAAA,WACjBqC,GAAAA,CAAAA,EAAY,CAAA,CAAA,WACZjD,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,AAAU,EAAVA,KAAK6F,EAAE,AAAG,EAElB8B,EAAApM,IAAA,CAAA,IAAA,CAAA,EAAGoJ,EAAQoC,EAAQe,EAAgBpC,EAAgBqC,EAAWjD,EAAYC,GApBvEkE,OAAAA,EAAAA,EAAAA,GAAAA,GAAyBtB,GCF9BpC,EAAY/G,EAAZ+G,IAAAA,CAAAA,OAAAA,CAKD2D,EAAK,SAAL5E,CAAA,WAAM4E,EAUTvE,CAAU,CACVwE,CAAU,CACVrB,CAAmB,CACnBsB,CAAoB,CACpBC,CAAiB,WAJjB1E,GAAAA,CAAAA,EAAS,CAAA,WACTwE,GAAAA,CAAAA,EAAO,EAAA,WACPrB,GAAAA,CAAAA,EAAiB,EAAA,WACjBsB,GAAAA,CAAAA,EAAkB,EAAA,EAClBC,KAAAA,IAAAA,GAAAA,CAAAA,EAAMrJ,AAAU,EAAVA,KAAK6F,EAAE,AAAG,uBAIhBiC,EAAiB9H,KAAK+F,KAAK,CAAC+B,GAC5BsB,EAAkBpJ,KAAK+F,KAAK,CAACqD,GAE7B,IAAK,IAAIE,EAAI,EAAGA,GAAKxB,EAAgBwB,IACnC,IAAK,IAAIvO,EAAI,EAAGA,GAAKqO,EAAiBrO,IAAK,CAEzC,MAeAwL,EAfMC,EAAIzL,EAAIqO,EAAkBC,EAC1BzL,EAAI0L,EAAIxB,EAAiB9H,KAAK6F,EAAE,CAAG,EAEnC2C,EAAM7D,AAAAA,CAAAA,EAASwE,EAAOnJ,KAAKmF,GAAG,CAACvH,EAAC,EAAKoC,KAAKmF,GAAG,CAACqB,GAC9CiC,EAAM9D,AAAAA,CAAAA,EAASwE,EAAOnJ,KAAKmF,GAAG,CAACvH,EAAC,EAAKoC,KAAKoF,GAAG,CAACoB,GAC9CkC,EAAKS,EAAOnJ,KAAKoF,GAAG,CAACxH,GAE3B8D,EAAK6C,MAAM,CAACvG,IAAI,CAACwK,EAAIC,EAAIC,GAEzB,IAAMa,EAAK5E,EAAS3E,KAAKmF,GAAG,CAACqB,GACvBgD,EAAK7E,EAAS3E,KAAKoF,GAAG,CAACoB,GACvB1M,EAAI,IAAIyL,EAAQiD,EAAIC,EAAIC,GACxBlM,EAAI,IAAI+I,EAAQgE,EAAIC,EAAI,GACxB/C,EAAS3M,EAAE+J,QAAQ,CAACrH,GAAGwH,SAAS,GAEtC,AAAAuC,CAAAA,EAAA7E,EAAK+C,OAAO,AAAA,EAACzG,IAAI,CAAjBvE,KAAA,CAAA8M,EAAqBE,EAAAA,CAAAA,MAAAA,CAAAA,EAAOC,OAAO,KAEnChF,EAAK8C,GAAG,CAACxG,IAAI,CAACjD,EAAIqO,GAClB1H,EAAK8C,GAAG,CAACxG,IAAI,CAACsL,EAAIxB,EACpB,CAGF,IAAK,IAAIwB,EAAI,EAAGA,GAAKxB,EAAgBwB,IACnC,IAAK,IAAIvO,EAAI,EAAGA,GAAKqO,EAAiBrO,IAAK,CACzC,IAAM4L,EAAI,AAACyC,CAAAA,EAAkB,CAAA,EAAKE,EAAIvO,EAAI,EACpC6L,EAAI,AAACwC,CAAAA,EAAkB,CAAA,EAAME,CAAAA,EAAI,CAAA,EAAKvO,EAAI,EAC1CyB,EAAI,AAAC4M,CAAAA,EAAkB,CAAA,EAAME,CAAAA,EAAI,CAAA,EAAKvO,EACtCwB,EAAI,AAAC6M,CAAAA,EAAkB,CAAA,EAAKE,EAAIvO,EAEtC2G,EAAKC,OAAO,CAAC3D,IAAI,CAAC2I,EAAGC,EAAGrK,GACxBmF,EAAKC,OAAO,CAAC3D,IAAI,CAAC4I,EAAGpK,EAAGD,EAC1B,UAvDO2M,OAAAA,EAAAA,EAAAA,GAAAA,GAA0B5E,GCHhCmF,EAAK,SAALnF,CAAA,EAAMmF,SAAAA,EAST3C,CAAS,CACTC,CAAU,CACVtB,CAAiB,CACjBC,CAAkB,WAHlBoB,GAAAA,CAAAA,EAAQ,CAAA,WACRC,GAAAA,CAAAA,EAAS,CAAA,WACTtB,GAAAA,CAAAA,EAAgB,CAAA,WAChBC,GAAAA,CAAAA,EAAiB,CAAA,uBAgBjB,IAAK,MAZC2B,EAAYP,EAAQ,EACpBQ,EAAaP,EAAS,EAEtB2C,EAAQ1J,KAAK+F,KAAK,CAACN,GACnBkE,EAAQ3J,KAAK+F,KAAK,CAACL,GAEnBkE,EAASF,EAAQ,EACjBG,EAASF,EAAQ,EAEjBG,EAAehD,EAAQ4C,EACvBK,EAAgBhD,EAAS4C,EAEtBxD,EAAK,EAAGA,EAAK0D,EAAQ1D,IAG5B,IAAK,IAFCjJ,EAAIiJ,EAAK4D,EAAgBzC,EAEtBhB,EAAK,EAAGA,EAAKsD,EAAQtD,IAAM,CAClC,IAAMpB,EAAIoB,EAAKwD,EAAezC,EAE9B3F,EAAK6C,MAAM,CAACvG,IAAI,CAACkH,EAAG,CAAEhI,EAAG,GACzBwE,EAAK+C,OAAO,CAACzG,IAAI,CAAC,EAAG,EAAG,GACxB0D,EAAK8C,GAAG,CAACxG,IAAI,CAACsI,EAAKoD,GACnBhI,EAAK8C,GAAG,CAACxG,IAAI,CAAC,EAAKmI,EAAKwD,EAC1B,CAEF,IAAK,IAAIxD,EAAK,EAAGA,EAAKwD,EAAOxD,IAC3B,IAAK,IAAIG,EAAK,EAAGA,EAAKoD,EAAOpD,IAAM,CACjC,IAAMK,EAAIL,EAAKsD,EAASzD,EAClBS,EAAIN,EAAKsD,EAAUzD,CAAAA,EAAK,CAAA,EACxB3J,EAAIwN,EAAM,EAAKJ,EAAUzD,CAAAA,EAAK,CAAA,EAC9B5J,EAAK+J,EAAK,EAAKsD,EAASzD,EAE9BzE,EAAKC,OAAO,CAAC3D,IAAI,CAAC2I,EAAGC,EAAGrK,GACxBmF,EAAKC,OAAO,CAAC3D,IAAI,CAAC4I,EAAGpK,EAAGD,EAC1B,UAjDOkN,OAAAA,EAAAA,EAAAA,GAAAA,GAA0BnF,GCD/B2F,EAA4BzL,EAAAA,IAA5ByL,CAAAA,KAAAA,CAAO1E,EAAqB/G,EAArB+G,IAAAA,CAAAA,OAAAA,CAAS2E,EAAY1L,EAAZ0L,IAAAA,CAAAA,OAAAA,CAKjBC,EAAK,SAAL7F,CAAA,WAAM6F,EAWTC,CAAmB,CACnBC,CAAmB,CACnBC,CAAW,CACXC,CAAc,CACdC,CAAY,CACZC,CAAW,uBAMX,IAYAC,IAZMC,EAAQF,EAAMzK,KAAK4K,GAAG,CAACC,AAFhBP,EAAM,IAAMtK,KAAK6F,EAAE,CAEI,GAC9BiF,EAAQH,EAFAJ,EAGRQ,EAAS,IAAIxF,EAAQuF,EAAOH,EAAOF,GACnCO,EAAS,IAAIzF,EAAQ,CAACuF,EAAOH,EAAOF,GACpCQ,EAAS,IAAI1F,EAAQ,CAACuF,EAAO,CAACH,EAAOF,GACrCS,EAAS,IAAI3F,EAAQuF,EAAO,CAACH,EAAOF,GACpCU,EAASlB,EAAMmB,SAAS,CAACf,GAAUgB,SAAS,CAAC,IAAInB,GACjDoB,EAAUH,EAAOI,cAAc,CAACR,GAAQ3G,GAAG,CAACgG,GAC5CoB,EAAUL,EAAOI,cAAc,CAACP,GAAQ5G,GAAG,CAACgG,GAC5CqB,EAAUN,EAAOI,cAAc,CAACN,GAAQ7G,GAAG,CAACgG,GAC5CsB,EAAUP,EAAOI,cAAc,CAACL,GAAQ9G,GAAG,CAACgG,SAElD,AAAAM,CAAAA,EAAAhJ,EAAK6C,MAAM,AAANA,EAAOvG,IAAI,CAAhBvE,MAAAiR,EACKN,EAAAA,CAAAA,MAAAA,CAAAA,EACAkB,EAAQ5E,OAAO,GAAO8E,EAAQ9E,OAAO,GACrC+E,EAAQ/E,OAAO,GAAOgF,EAAQhF,OAAO,KAE1ChF,EAAKC,OAAO,CAAC3D,IAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAvCtDmM,OAAAA,EAAAA,EAAAA,GAAAA,GAA4B7F,GCHlCqH,EAAK,SAALrH,CAAA,WAAMqH,EAWThH,CAAU,CACV7J,CAAU,CACV+J,CAAa,CACb+G,CAAe,CACf9G,CAAc,CACdC,CAAyB,WALzBJ,GAAAA,CAAAA,EAAS,CAAA,WACT7J,GAAAA,CAAAA,EAAS,CAAA,WACT+J,GAAAA,CAAAA,EAAW,EAAA,WACX+G,GAAAA,CAAAA,EAAc,CAAA,WACd9G,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,AAAU,EAAVA,KAAK6F,EAAE,AAAG,EAIxBnE,uBAAKgD,mBAAmB,CAACC,EAAQ,EAAGE,EAAUC,EAAYC,EAAa,EAAGrD,EAAK6C,MAAM,CAAE7C,EAAKC,OAAO,EAInG,IAAK,MAHCkK,EAAQhH,EAAW+G,EAAc,EACjC/N,EAAOgH,EAAW+G,EAEf7Q,EAAI,EAAGA,EAAI6Q,EAAa7Q,IAAK,CACpC,IAAM0G,EAAQoK,EAAQ9Q,EAAI8C,EACpBqH,EAAIxD,EAAK6C,MAAM,CAAC,EAAI9C,EAAM,CAC1BvE,EAAIwE,EAAK6C,MAAM,CAAC,EAAI9C,EAAQ,EAAE,CAC9BmD,EAAI,CAAC9J,EAEX4G,EAAK6C,MAAM,CAACvG,IAAI,CAACkH,EAAGhI,EAAG0H,GACvBlD,EAAKC,OAAO,CAAC3D,IAAI,CAACyD,EAAOoD,EAAW9J,EACtC,UAhCS4Q,OAAAA,EAAAA,EAAAA,GAAAA,GAA2BrH,GCAjCwH,EAAK,SAALxH,CAAA,EAAMwH,SAAAA,EASTC,CAAU,CACVlH,CAAa,CACbC,CAAc,CACdC,CAAyB,wBAHzBgH,GAAAA,CAAAA,EAAQ,EAAA,WACRlH,GAAAA,CAAAA,EAAW,EAAA,WACXC,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,AAAU,EAAVA,KAAK6F,EAAE,AAAG,EAGxBnE,uBAAKgD,mBAAmB,CAACqH,EAAO,EAAGlH,EAAUC,EAAYC,EAAa,EAAGrD,EAAK6C,MAAM,CAAE7C,EAAKC,OAAO,EAClGD,EAAK2D,mBAAmB,CAAC0G,EAAO,EAAGlH,EAAUC,EAAYC,EAAaF,EAAUnD,EAAK6C,MAAM,CAAE7C,EAAKC,OAAO,EACzGD,EAAK4D,mBAAmB,CAACyG,EAAO,EAAGlH,EAAUC,EAAYC,EAAa,EAAIF,EAAUnD,EAAK6C,MAAM,CAAE7C,EAAKC,OAAO,IAjBpGmK,OAAAA,EAAAA,EAAAA,GAAAA,GAAuBxH,GCA7B0H,EAAK,SAAL1H,CAAA,WAAM0H,EAUTD,CAAU,CACVE,CAAc,CACdpH,CAAa,CACbC,CAAc,CACdC,CAAyB,WAJzBgH,GAAAA,CAAAA,EAAQ,EAAA,WACRE,GAAAA,CAAAA,EAAY,EAAA,WACZpH,GAAAA,CAAAA,EAAW,EAAA,WACXC,GAAAA,CAAAA,EAAa,CAAA,EACbC,KAAAA,IAAAA,GAAAA,CAAAA,EAAc/E,AAAU,EAAVA,KAAK6F,EAAE,AAAG,uBAKxB,MAAMlB,EAASoH,EAAQ/L,KAAK4K,GAAG,CADjBqB,EAAY,EAAI,IAAMjM,KAAK6F,EAAE,EAG3CnE,EAAKgD,mBAAmB,CAACC,EAAQ,CAACoH,EAAOlH,EAAUC,EAAYC,EAAa,EAAGrD,EAAK6C,MAAM,CAAE7C,EAAKC,OAAO,EACxGD,EAAK6C,MAAM,CAACvG,IAAI,CAAC,EAAG,EAAG,GAIvB,IAAK,IAHCH,EAAOgH,EAAW,EAClBgH,EAAQhH,EAAW,EAAI,EAEpB9J,EAAI,EAAGA,EAAI,EAAGA,IACrB2G,EAAKC,OAAO,CAAC3D,IAAI,CAAC6G,EAAUgH,EAAQ9Q,EAAI8C,YA3BjCmO,OAAAA,EAAAA,EAAAA,GAAAA,GAAsB1H,GCA5B4H,EAAK,SAAL5H,CAAA,WAAM4H,EAMEC,CAAe,CAAEC,CAAS,WAA1BD,GAAAA,CAAAA,EAAa,EAAA,WAAIC,GAAAA,CAAAA,EAAQ,CAAA,uBASpC,IAAK,MAND3K,EAAQ,EAGN4K,EAAMF,EAAa,EACnBN,EAAQ,CAACM,EAAa,EAEnBpR,EAAI,EAAGA,GAAKqR,EAAOrR,IAAK,CAC/B,IAAM6C,EAAIiO,EAAQ9Q,EAAIoR,EAAaC,EAEnC1K,EAAK6C,MAAM,CAACvG,IAAI,CAACJ,EAAGiO,EAPZ,EAOsBjO,EAAGyO,EAPzB,EAOiCR,EAAOjO,EAPxC,EAO8CyO,EAAKzO,EAPnD,GAQR8D,EAAKC,OAAO,CAAC3D,IAAI,CAACyD,EAAOA,EAAQ,EAAGA,EAAQ,EAAGA,EAAQ,GACvDA,GAAS,CACX,UArBSyK,OAAAA,EAAAA,EAAAA,GAAAA,GAAkC5H,GxB4ExC,SAASgI,EAAgBhL,CAAc,CAAElC,CAAkB,CAAEmN,CAAyB,CAAE3J,CAA6B,MACtH4J,EAEJ,OAAQpN,GACN,KAAA,EACEoN,EAAe,IAAIhH,EAAmB+G,EAAK5H,MAAM,CAAE4H,EAAK9G,aAAa,CAAE8G,EAAK7G,cAAc,EAE1F,KACF,MAAA,EACE8G,EAAe,IAAI7E,EAAqB4E,EAAK5H,MAAM,CAAE4H,EAAK5H,MAAM,CAAE4H,EAAKxF,MAAM,EAE7E,KACF,MAAA,EACEyF,EAAe,IAAIvD,EAAiBsD,EAAK5H,MAAM,CAAE4H,EAAKxF,MAAM,EAE5D,KACF,MAAA,EACEyF,EAAe,IAAItD,EAAkBqD,EAAK5H,MAAM,CAAE4H,EAAKpD,IAAI,CAAEoD,EAAKzE,cAAc,CAAEyE,EAAKnD,eAAe,CAAEmD,EAAKlD,GAAG,EAEhH,KACF,MAAA,EACA,KAAA,EACEmD,EAAe,IAAI/C,EAAkB8C,EAAKzF,KAAK,CAAEyF,EAAKxF,MAAM,EAE5D,KACF,MAAA,EACEyF,EAAe,IAAIrC,EAAoBoC,EAAKnC,QAAQ,CAAEmC,EAAKlC,QAAQ,CAAEkC,EAAKjC,GAAG,CAAEiC,EAAKhC,MAAM,CAAEgC,EAAK/B,IAAI,CAAE+B,EAAK9B,GAAG,EAE/G,KACF,MAAA,EACE+B,EAAe,IAAIb,EAAmBY,EAAK5H,MAAM,CAAE4H,EAAKzR,MAAM,CAAEyR,EAAKE,SAAS,CAAEF,EAAKX,WAAW,CAAEW,EAAKzH,UAAU,CAAEyH,EAAKxH,WAAW,EAEnI,KACF,MAAA,GACEyH,EAAe,IAAIV,EAAeS,EAAKR,KAAK,CAAEQ,EAAK1H,QAAQ,CAAE0H,EAAKzH,UAAU,CAAEyH,EAAKxH,WAAW,EAE9F,KACF,MAAA,EACEyH,EAAe,IAAIR,EAAcO,EAAKR,KAAK,CAAEQ,EAAKN,SAAS,CAAEM,EAAK1H,QAAQ,CAAE0H,EAAKzH,UAAU,CAAEyH,EAAKxH,WAAW,EAE7G,KACF,MAAA,GACEyH,EAAe,IAAIN,EAA0BK,EAAKJ,UAAU,CAAEI,EAAKH,KAAK,EAExE,KACF,SACEI,EAAe,IAAI3F,EAAgB0F,EAAKzF,KAAK,CAAEyF,EAAKxF,MAAM,CAAEwF,EAAKvF,KAAK,CAG1E,CAyBA,OAxBe0F,EAAAA,QAAAA,CAASnS,MAAM,CAC5B+G,EACA,CACEE,WAAY,CACVmL,WAAY,CACVJ,KAAM,EACNlM,KAAM,IAAIuM,aAAaJ,EAAajI,MAAM,CAC5C,EACAsI,SAAU,CACRN,KAAM,EACNlM,KAAM,IAAIuM,aAAaJ,EAAa/H,OAAO,CAC7C,EACAqI,MAAO,CACLP,KAAM,EACNlM,KAAM,IAAIuM,aAAaJ,EAAahI,GAAG,CACzC,CACF,EACA7C,QAAS,CACPtB,KAAM,IAAIc,YAAYqL,EAAa7K,OAAO,CAC5C,EACAE,KAAMe,EACN7C,UAAWyM,EAAa7K,OAAO,CAAC7G,MAAM,AACxC,EAGJ,wBA3IY3C,EAAAA,cAAAA,EAAAA,CAAAA,EAAAA,YAAAA,CAAAA,CAAAA,CAAAA,mTCZaqG,EAAAA,IAAAA,CAAjB+G,OAASwH,CAAQvO,EAAAA,IAARuO,CAAAA,GAAAA,EAKL3U,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,CAAAA,uFwBNZ,IAAQ8R,EAAqB1L,EAAAA,IAAAA,CAArB0L,OAAS8C,CAAAA,EAAYxO,EAAAA,IAAZwO,CAAAA,OAAAA,CAmEV,SAASC,EACdC,CAAY,CACZC,CAAa,CACbC,CAAc,CACdnF,CAAW,CACXuC,CAAY,CACZC,CAAW,EAEX,IAAI9D,EAAI,EAAOwG,CAAAA,EAAQD,CAAG,EACtBtG,EAAI,EAAOqB,CAAAA,EAAMmF,CAAK,EACtB5Q,EAAI,EAAOiO,CAAAA,EAAMD,CAAG,EAElB6C,EAAK,CAAEF,CAAAA,EAAQD,CAAG,EAAKvG,EACvB2G,EAAK,CAAErF,CAAAA,EAAMmF,CAAK,EAAKxG,EACvB2G,EAAK,CAAE9C,CAAAA,EAAMD,CAAG,EAAKhO,EAM3B,OAAO,IAAI0N,EAJXvD,GAAK,EAMH,EACA,EACA,EAEA,EATFC,GAAK,EAWH,EACA,EAEA,EACA,EAdFpK,GAAK,GAgBH,EAEA6Q,EACAC,EACAC,EACA,EAEJ,CCrGA,IAAQP,EAA8BxO,EAAAA,IAA9BwO,CAAAA,OAAAA,CAASzH,EAAqB/G,EAArB+G,IAAAA,CAAAA,OAAAA,CAAS2E,EAAY1L,EAAZ0L,IAAAA,CAAAA,OAAAA,CAUnB,SAASsD,EACdlM,CAAc,CACdmM,CAAqB,CACrBC,CAA2C,CAC3CC,CAAkC,CAClCpM,CAAoB,MAEhBqM,EAqDJrM,EAGMqM,EACAC,EACAtB,EAOAuB,EACA9R,EACA+R,EAGAC,EAGAC,EAGAC,EAGAC,EAKAC,EAKAC,EAMAC,EAGAC,EAGAC,EAGAC,EAlGN,OAJKlN,GACHA,CAAAA,EAAU,CAAEgL,KAAM,EAAG3J,WAAY8L,sBAAsB,SAAY,AAAC,CAAA,EAG9DjB,GACN,KAAKxV,eAAa0W,MAAM,CACtBf,EAASgB,GAAiBtN,EAAQC,GAElC,KACF,MAAKtJ,eAAa4W,MAAM,CACtBjB,EAASgB,GAAiBtN,EAAQC,EAASoM,EAAcA,EAAYmB,GAAG,CAAC,UAAYnV,KAAAA,EAAW+T,GAEhG,KACF,MAAKzV,eAAa8W,KAAK,CACrBnB,EAASgB,GAAiBtN,EAAQC,EAASoM,EAAcA,EAAYmB,GAAG,CAAC,SAAWnV,KAAAA,EAAW+T,GAE/F,KACF,MAAKzV,eAAa+W,WAAW,CAC3BpB,EAASqB,AA4Jf,SAAgC3N,CAAc,CAAEC,CAAmB,CAAEmM,CAA2C,EAW9G,IAAA,IAA0CnO,EAVpCqO,EAA+B,IAAI5K,IACnC6K,EAAQtM,EAAQgL,IAAI,CAACsB,KAAK,EAAI,EAC9BqB,EAAW,CACfpI,MAAO,GAAM+G,EACb9G,OAAQ,IAAO8G,EACf7G,MAAO,IAAO6G,CAChB,EACM7R,EAAO,cACPmT,EAAWC,GAAe9N,EAAQ4N,EAAU,CAAA,EAAOlT,GAEzD0D,EAAAxE,EAAgCiU,GAAU,CAAA,AAAA5P,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,eAA9ByF,EAAM2Q,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAChBzB,EAAOvJ,GAAG,CAAC3F,EAAM2Q,EACnB,CAZA,IAcMC,EAAY,CAChB3K,OAAQ,IAAOkJ,EACf9G,OAAQ,GAAM8G,CAChB,EACM0B,EAASC,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAawX,IAAI,CAAE,CACxDlD,KAAM+C,EACN9M,MAAOA,EAAMC,UAAU,CACvBG,WAAAA,EACA8M,UAAW,CAAA,EACX1T,KAAAA,CACC,EAAA,SACG2T,EAASH,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAawX,IAAI,CAAE,CACxDlD,KAAM+C,EACN9M,MAAOA,EAAME,UAAU,CACvBE,WAAAA,EACA8M,UAAW,CAAA,EACX1T,KAAAA,CACC,EAAA,SACG4T,EAASJ,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAawX,IAAI,CAAE,CACxDlD,KAAM+C,EACN9M,MAAOA,EAAMG,UAAU,CACvBC,WAAAA,EACA5G,KAAAA,EACA0T,UAAW,CAAA,CACV,EAAA,SACGG,EAAkB,IAAIC,WAAU,CAAA,CACpCC,MAAO,CAAA,CACT,GACMC,EAAkB,IAAIF,WAAU,CAAA,CACpCC,MAAO,CAAA,CACT,GACME,EAAkB,IAAIH,WAAU,CAAA,CACpCC,MAAO,CAAA,CACT,GAEAF,EAAgBK,WAAW,CAAC,EAAG,EAAG,IAClCF,EAAgBE,WAAW,CAAC,EAAG,EAAG,GAClCD,EAAgBC,WAAW,CAAC,IAAK,EAAG,GACpCL,EAAgBM,SAAS,CAACjB,EAASpI,KAAK,CAAE,EAAG,GAC7CkJ,EAAgBG,SAAS,CAAC,EAAGjB,EAASpI,KAAK,CAAE,GAC7CmJ,EAAgBE,SAAS,CAAC,EAAG,EAAGjB,EAASpI,KAAK,EAE9C,IAAMsJ,EAAY,CAChBtJ,MAAO,GAAM+G,EACb9G,OAAQ,GAAM8G,CAChB,EACMwC,EAAUb,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqY,KAAK,CAAE,CAC1D/D,KAAM6D,EAAW5N,MAAOA,EAAMG,UAAU,CAAUC,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CACjF,GACMuU,EAAUf,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqY,KAAK,CAAE,CAC1D/D,KAAM6D,EAAW5N,MAAOA,EAAMC,UAAU,CAAUG,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CACjF,GACMwU,EAAUhB,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqY,KAAK,CAAE,CAC1D/D,KAAM6D,EAAW5N,MAAOA,EAAME,UAAU,CAAUE,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CACjF,GACMyU,EAAmB,IAAIX,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMW,EAAmB,IAAIZ,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMY,EAAmB,IAAIb,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMa,EAAQ1B,EAASpI,KAAK,CAAG,EAkC/B,OAhCA2J,EAAiBN,SAAS,CAACC,EAAUtJ,KAAK,CAAG,EAAI8J,EAAOR,EAAUrJ,MAAM,CAAG,EAAI6J,EAAO,GACtFF,EAAiBR,WAAW,CAAC,EAAG,GAAI,GACpCQ,EAAiBP,SAAS,CAAC,EAAGC,EAAUrJ,MAAM,CAAG,EAAI6J,EAAOR,EAAUtJ,KAAK,CAAG,EAAI8J,GAClFD,EAAiBT,WAAW,CAAC,IAAK,EAAG,GACrCS,EAAiBR,SAAS,CAACC,EAAUtJ,KAAK,CAAG,EAAI8J,EAAO,EAAGR,EAAUrJ,MAAM,CAAG,EAAI6J,GAElFhD,EAAOvJ,GAAG,CAACkL,EAAQM,GACnBjC,EAAOvJ,GAAG,CAACsL,EAAQK,GACnBpC,EAAOvJ,GAAG,CAACuL,EAAQK,GACnBrC,EAAOvJ,GAAG,CAACgM,EAASI,GACpB7C,EAAOvJ,GAAG,CAACkM,EAASG,GACpB9C,EAAOvJ,GAAG,CAACmM,EAASG,GAEpBE,GAAmB,CAAE/J,MAAOwI,AAAmB,IAAnBA,EAAU3K,MAAM,CAAQ7J,OAAQoU,EAASpI,KAAK,CAAGwI,EAAUvI,MAAM,CAAG,CAAK2G,EAAAA,GACrGA,EAAYrJ,GAAG,CAAC,UAAW,CACzBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAWV,EAAQ5Q,aAAa,GAAKuR,GAAYX,EAAQ5Q,aAAa,GAAIgR,GAAoB,EAAE,CAChGQ,gBAAiB,CAAA,CACnB,GAGAvD,EAAYrJ,GAAG,CAAC,UAAW,CACzBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAWR,EAAQ9Q,aAAa,GAAKuR,GAAYT,EAAQ9Q,aAAa,GAAIiR,GAAoB,EAAE,CAChGO,gBAAiB,CAAA,CACnB,GACAvD,EAAYrJ,GAAG,CAAC,UAAW,CACzBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAWP,EAAQ/Q,aAAa,GAAKuR,GAAYR,EAAQ/Q,aAAa,GAAIkR,GAAoB,EAAE,CAChGM,gBAAiB,CAAA,CACnB,GAEOrD,CACT,EA9QqCtM,EAAQC,EAASmM,GAEhD,KACF,MAAKzV,eAAa4V,KAAK,CACrBD,EAASsD,AAmRf,SAA0B5P,CAAc,CAAEC,CAAmB,CAAEmM,CAA2C,EAWxG,IAAA,IAA0CnO,EAVpCqO,EAA+B,IAAI5K,IACnC6K,EAAQtM,EAAQgL,IAAI,CAACsB,KAAK,EAAI,EAC9BqB,EAAW,CACfpI,MAAO,GAAM+G,EACb9G,OAAQ,IAAO8G,EACf7G,MAAO,IAAO6G,CAChB,EACM7R,EAAO,QACPmT,EAAWC,GAAe9N,EAAQ4N,EAAU,CAAA,EAAOlT,GAEzD0D,EAAAxE,EAAgCiU,GAAU,CAAA,AAAA5P,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,eAA9ByF,EAAM2Q,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAChBzB,EAAOvJ,GAAG,CAAC3F,EAAM2Q,EACnB,CAZA,IAaM8B,EAAU,CACdrK,MAAO,GAAM+G,EACb9G,OAAQ,GAAM8G,EACd7G,MAAO,GAAM6G,CACf,EACMuD,EAAgB,CACpBtK,MAAO,GAAM+G,EACb9G,OAAQ,GAAM8G,EACd7G,MAAO,GAAM6G,CACf,EACMwD,EAAQ7B,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM4E,EAAS3O,MAAOA,EAAMC,UAAU,CAAUG,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAC5E,EAAA,SACGuV,EAAQ/B,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM4E,EAAS3O,MAAOA,EAAME,UAAU,CAAUE,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAC5E,EAAA,SACGwV,EAAQhC,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM4E,EAAS3O,MAAOA,EAAMG,UAAU,CAAUC,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAC5E,EAAA,SACGyV,EAAajC,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CAC3D/E,KAAM6E,EACN5O,MAAO,CAAC,GAAK,GAAK,GAAI,CACtBI,WAAAA,EACA8M,UAAW,CAAA,EACX1T,KAAAA,CACC,EAAA,SACG0V,EAAiB,IAAI5B,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GACM4B,EAAiB,IAAI7B,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GACM6B,EAAiB,IAAI9B,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GACM8B,EAAsB,IAAI/B,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GAiBA,OAfA2B,EAAevB,SAAS,CAACjB,EAASpI,KAAK,CAAE,EAAG,GAC5C6K,EAAexB,SAAS,CAAC,EAAGjB,EAASpI,KAAK,CAAE,GAC5C8K,EAAezB,SAAS,CAAC,EAAG,EAAGjB,EAASpI,KAAK,EAC7C8G,EAAOvJ,GAAG,CAACoN,EAAYI,GACvBjE,EAAOvJ,GAAG,CAACgN,EAAOK,GAClB9D,EAAOvJ,GAAG,CAACkN,EAAOI,GAClB/D,EAAOvJ,GAAG,CAACmN,EAAOI,GAElBf,GAAmB,CAAE/J,MAAOqK,AAAgB,IAAhBA,EAAQrK,KAAK,CAAQhM,OAAQoU,EAASpI,KAAK,CAAGqK,EAAQrK,KAAK,CAAG,CAAK4G,EAAAA,GAC/FA,EAAYrJ,GAAG,CAAC,SAAU,CACxBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQ,IAAI3I,EACZZ,OAAQ3E,KAAK+R,GAAG,CAAC/R,KAAK+R,GAAG,CAACX,EAActK,KAAK,CAAE,GAAK9G,KAAK+R,GAAG,CAACX,EAAcrK,MAAM,CAAE,GAAK/G,KAAK+R,GAAG,CAACX,EAAcpK,KAAK,CAAE,GAAI,IAAO,CACnI,GAEO4G,CACT,EAxV+BtM,EAAQC,EAASmM,GAE1C,KACF,MAAKzV,eAAa+Z,UAAU,CAC1BpE,EAASqE,AA6Vf,SAA+B3Q,CAAc,CAAEC,CAAmB,CAAEmM,CAA2C,CAAEwE,CAA6B,EAU5I,IAAA,IAA0C3S,EATpCqO,EAA+B,IAAI5K,IACnC6K,EAAQtM,EAAQgL,IAAI,CAACsB,KAAK,EAAI,EAC9BqB,EAAW,CACfpI,MAAO,GAAM+G,EACb9G,OAAQ,IAAO8G,EACf7G,MAAO,IAAO6G,CAChB,EACMsB,EAAWC,GAAe9N,EAAQ4N,EAAU,CAAA,GAElDxP,EAAAxE,EAAgCiU,GAAU,CAAA,AAAA5P,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,eAA9ByF,EAAM2Q,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAChBzB,EAAOvJ,GAAG,CAAC3F,EAAM2Q,EACnB,CAXA,IAYMe,EAAY,CAChBtJ,MAAO,IAAO+G,EACd9G,OAAQ,IAAO8G,CACjB,EACM/S,EAAS,AAACoU,CAAAA,EAASpI,KAAK,CAAGsJ,EAAUtJ,KAAI,AAAA,EAAK,EAE9CqL,EAAavD,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UADzD,CAAA,CACsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9FsD,EAAaxD,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UAFzD,CAAA,CAEsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9FuD,EAAazD,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UAHzD,CAAA,CAGsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9FwD,EAAsB,IAAIxC,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GACMwC,EAAsB,IAAIzC,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GACMyC,EAAsB,IAAI1C,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GAEAuC,EAAoBnC,SAAS,CAACrV,EAAQ,EAAG,GACzCyX,EAAoBpC,SAAS,CAAC,EAAGrV,EAAQ,GACzC0X,EAAoBrC,SAAS,CAAC,EAAG,EAAGrV,GACpC,IAAM2X,EAAa7D,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UAjBzD,CAAA,CAiBsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9F4D,EAAa9D,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UAlBzD,CAAA,CAkBsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9F6D,EAAa/D,GAAiBtN,EAAQ,CAAEiL,KAAM6D,EAAWxN,WAAAA,EAAY8M,UAnBzD,CAAA,CAmBsEwC,EAAAA,EAAQpD,GAAG,CAAC,SAC9F8D,EAAsB,IAAI9C,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GACM8C,EAAsB,IAAI/C,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GACM+C,EAAsB,IAAIhD,WAAU,CAAA,CACxCC,MAAO,CAAA,CACT,GAEA6C,EAAoBzC,SAAS,CAAC,CAACrV,EAAQ,EAAG,GAC1C+X,EAAoB1C,SAAS,CAAC,EAAG,CAACrV,EAAQ,GAC1CgY,EAAoB3C,SAAS,CAAC,EAAG,EAAG,CAACrV,GAErC8S,EAAOvJ,GAAG,CAAC8N,EAAYG,GACvB1E,EAAOvJ,GAAG,CAAC+N,EAAYG,GACvB3E,EAAOvJ,GAAG,CAACgO,EAAYG,GACvB5E,EAAOvJ,GAAG,CAACoO,EAAYG,GACvBhF,EAAOvJ,GAAG,CAACqO,EAAYG,GACvBjF,EAAOvJ,GAAG,CAACsO,EAAYG,GAEvB,IAAMnO,EAAUyL,EAAUrJ,MAAM,CAAG,EAAK,IAiCxC,OA/BA2G,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQoE,EAAoBlI,QAAQ,CACpCzF,OAAQA,CACV,GACA+I,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQqE,EAAoBnI,QAAQ,CACpCzF,OAAQA,CACV,GACA+I,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQsE,EAAoBpI,QAAQ,CACpCzF,OAAQA,CACV,GACA+I,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQ0E,EAAoBxI,QAAQ,CACpCzF,OAAQA,CACV,GACA+I,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQ2E,EAAoBzI,QAAQ,CACpCzF,OAAQA,CACV,GACA+I,EAAYrJ,GAAG,CAAC,OAAQ,CACtBjF,KAAMhH,EAAa0Z,MAAM,CACzB5D,OAAQ4E,EAAoB1I,QAAQ,CACpCzF,OAAQA,CACV,GAEOiJ,CACT,EA1boCtM,EAAQC,EAASmM,EAAaC,GAE5D,KACF,MAAK1V,eAAaoS,QAAQ,CAsB5B9I,EArBwCA,EAwBlCqM,EAA+B,IAAI5K,IAEnCuJ,EAAO,CACX5H,OAAQ,IAFJkJ,EAAQtM,EAAQgL,IAAI,CAACsB,KAAK,EAAI,GAGlC1E,KAAM,IAAO0E,EACbkF,eAAgB,GAAKlF,EACrBpI,cAAe,GACfC,eAAgB,EAClB,EACMoI,EAAY5P,EAAKqO,CAAAA,EAAAA,EAAAA,CAAMpD,KAAMoD,AAAY,EAAZA,EAAKpD,IAAI,GACtCnN,EAAO,WACP+R,EAAUyB,GAnCgBlO,EAmCQrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAC1DzG,KAAAA,EAAM/J,MAAOA,EAAMC,UAAU,CAAUG,WAAAA,EAAY5G,KAAAA,CAClD,EAAA,YACGgS,EAAUwB,GAtCgBlO,EAsCQrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAC1DzG,KAAAA,EAAM/J,MAAOA,EAAME,UAAU,CAAUE,WAAAA,EAAY5G,KAAAA,CAClD,EAAA,YACGiS,EAAUuB,GAzCgBlO,EAyCQrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAC1DzG,KAAAA,EAAM/J,MAAOA,EAAMG,UAAU,CAAUC,WAAAA,EAAY5G,KAAAA,CAClD,EAAA,YACGkS,EAASsB,GA5CiBlO,EA4COrJ,EAAAA,YAAAA,CAAa6Z,MAAM,CAAE,CAC1DvF,KAAAA,EAAM/J,MAAO,CAAC,GAAK,GAAK,GAAI,CAAEyQ,MAAO,GAAKrQ,WAAAA,EAAY5G,KAAAA,CACrD,EAAA,SACGmS,EAAkBqB,GA/CQlO,EA+CgBrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAClEzG,KAAMuB,EACNtL,MAAOA,EAAMC,UAAU,CACvBG,WAAAA,CACF,GACMwL,EAAkBoB,GApDQlO,EAoDgBrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAClEzG,KAAMuB,EACNtL,MAAOA,EAAME,UAAU,CACvBE,WAAAA,CACF,GACMyL,EAAkBmB,GAzDQlO,EAyDgBrJ,EAAAA,YAAAA,CAAa+a,KAAK,CAAE,CAClEzG,KAAMuB,EACNtL,MAAOA,EAAMG,UAAU,CACvBC,WAAAA,CACF,GAEM0L,EAAmB,IAAIwB,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMxB,EAAmB,IAAIuB,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMvB,EAAmB,IAAIsB,WAAU,CAAA,CACrCC,MAAO,CAAA,CACT,GACMtB,EAAkB,IAAIqB,WAAU,CAAA,CACpCC,MAAO,CAAA,CACT,GAEAzB,EAAiB4B,WAAW,CAAC,EAAG,GAAI,GACpC3B,EAAiB2B,WAAW,CAAC,IAAK,EAAG,GACrC1B,EAAiB0B,WAAW,CAAC,EAAG,EAAG,GACnCtC,EAAOvJ,GAAG,CAAC6J,EAAQO,GACnBb,EAAOvJ,GAAG,CAAC0J,EAASO,GACpBV,EAAOvJ,GAAG,CAAC2J,EAASO,GACpBX,EAAOvJ,GAAG,CAAC4J,EAASO,GAEpBd,AApFiDA,EAoFrCrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAW5C,EAAgB1O,aAAa,GAAKuR,GAAY7C,EAAgB1O,aAAa,GAAI6O,GAAoB,EAAE,CAChH2C,gBAAiB,CAAA,CACnB,GACAvD,AAzFiDA,EAyFrCrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAW3C,EAAgB3O,aAAa,GAAKuR,GAAY5C,EAAgB3O,aAAa,GAAI8O,GAAoB,EAAE,CAChH0C,gBAAiB,CAAA,CACnB,GACAvD,AA9FiDA,EA8FrCrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAa0Y,QAAQ,CAC3BC,UAAW1C,EAAgB5O,aAAa,GAAKuR,GAAY3C,EAAgB5O,aAAa,GAAI+O,GAAoB,EAAE,CAChHyC,gBAAiB,CAAA,CACnB,GAlGIrD,EAoGGA,EAlGH,KACF,SACEA,EAAS4B,GAAgBlO,EAAQmM,EAASlM,EAG9C,CAEA,OAAOqM,CACT,CAoGA,SAASoD,GAAarS,CAAkB,CAAE0Q,CAAoB,EAC5D,IAAMzB,EAAyB,EAAE,CAC3BjM,EAAUhD,EAASyB,YAAY,GAC/BmE,EAAS5F,EAASuU,gBAAgB,CAAC,cACnCC,EAAO9D,EAAU+D,cAAc,GAErC,GAAI7O,GAAU5C,GAAWA,EAAQ7G,MAAM,CAAG,EACxC,IAAK,IAAIC,EAAI,EAAGA,EAAI4G,EAAQ7G,MAAM,CAAEC,GAAK,EAAG,CAC1C,IAAMsY,EAAK1R,AAAa,EAAbA,CAAO,CAAC5G,EAAE,CACfuY,EAAK3R,AAAiB,EAAjBA,CAAO,CAAC5G,EAAI,EAAE,CACnBwY,EAAK5R,AAAiB,EAAjBA,CAAO,CAAC5G,EAAI,EAAE,CACnB6F,EAAK,IAAI2E,EAAQhB,CAAM,CAAC8O,EAAG,CAAE9O,CAAM,CAAC8O,EAAK,EAAE,CAAE9O,CAAM,CAAC8O,EAAK,EAAE,EAC3DxS,EAAK,IAAI0E,EAAQhB,CAAM,CAAC+O,EAAG,CAAE/O,CAAM,CAAC+O,EAAK,EAAE,CAAE/O,CAAM,CAAC+O,EAAK,EAAE,EAC3DxS,EAAK,IAAIyE,EAAQhB,CAAM,CAACgP,EAAG,CAAEhP,CAAM,CAACgP,EAAK,EAAE,CAAEhP,CAAM,CAACgP,EAAK,EAAE,EAEjE3F,EAAO5P,IAAI,CAAC,CACV4C,GAAIuS,EAAKK,YAAY,CAAC5S,GACtBC,GAAIsS,EAAKK,YAAY,CAAC3S,GACtBC,GAAIqS,EAAKK,YAAY,CAAC1S,EACxB,EAEF,CAGF,OAAO8M,CACT,CAwTA,SAASwB,GAAgB9N,CAAc,CAAE4N,CAA0D,CAAEuE,CAAkB,CAAEzX,CAAa,WAAjCyX,GAAAA,CAAAA,EAAa,CAAA,CAAA,EAChH,IAAM7F,EAA+B,IAAI5K,IACnC0Q,EAAQlE,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM2C,EAAU1M,MAAOA,EAAMC,UAAU,CAAUG,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAChF,GACM2X,EAAQnE,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM2C,EAAU1M,MAAOA,EAAME,UAAU,CAAUE,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAChF,GACM4X,EAAQpE,GAAgBlO,EAAQrJ,EAAAA,YAAAA,CAAaqZ,GAAG,CAAE,CACtD/E,KAAM2C,EAAU1M,MAAOA,EAAMG,UAAU,CAAUC,WAAAA,EAAY8M,UAAW,CAAA,EAAM1T,KAAAA,CAChF,GAEM6X,EAAiB,IAAI/D,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GACM+D,EAAiB,IAAIhE,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GACMgE,EAAiB,IAAIjE,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GAaA,OAXA+D,EAAe5D,WAAW,CAAC,EAAG,EAAG,IACjC6D,EAAe7D,WAAW,CAAC,EAAG,IAAK,GAC9BuD,IACHI,EAAe1D,SAAS,CAACjB,EAASpI,KAAK,CAAG,EAAG,EAAG,GAChDgN,EAAe3D,SAAS,CAAC,EAAGjB,EAASpI,KAAK,CAAG,EAAG,GAChDiN,EAAe5D,SAAS,CAAC,EAAG,EAAGjB,EAASpI,KAAK,CAAG,IAElD8G,EAAOvJ,GAAG,CAACqP,EAAOG,GAClBjG,EAAOvJ,GAAG,CAACsP,EAAOG,GAClBlG,EAAOvJ,GAAG,CAACuP,EAAOG,GAEXnG,CACT,CASA,SAAS4B,GAAiBlO,CAAc,CAAEmM,CAAqB,CAAElM,CAAmB,CAAEyS,CAAwB,WAAxBA,GAAAA,CAAAA,EAAe,SAAA,EACnG,IA4PMC,EAEAC,EAEA7U,EA5EA4U,EAGA5U,EAxDA4U,EAGA5U,EA/HF8U,EAqDA9U,EAvDFkN,EACEhL,EADFgL,IAAAA,CAAM/J,EACJjB,EADIiB,MAAOyQ,EACX1R,EADW0R,KAAOrQ,CAAAA,EAClBrB,EADkBqB,UAAY8M,CAAAA,EAC9BnO,EAD8BmO,SAAAA,CAAW1T,EACzCuF,EADyCvF,IAAAA,CAI7C,OAAQyR,GACN,KAAKxV,eAAa6Z,MAAM,CACtBqC,EAAehc,eAAaic,MAAM,CAElC,KACF,MAAKnc,eAAaoc,QAAQ,CACxBF,EAAehc,eAAamc,QAAQ,CAEpC,KACF,MAAKrc,eAAawX,IAAI,CACpB0E,EAAehc,eAAaoc,IAAI,CAEhC,KACF,MAAKtc,eAAa+a,KAAK,CACrBmB,EAAehc,eAAaqc,KAAK,CAEjC,KACF,MAAKvc,eAAa0W,MAAM,CACtBwF,EAAehc,eAAasc,MAAM,CAElC,KACF,MAAKxc,eAAaqY,KAAK,CACrB6D,EAAehc,eAAauc,KAAK,CAEjC,KACF,MAAKzc,eAAa0c,OAAO,CACvBR,EAAehc,eAAayc,OAAO,CAEnC,KACF,MAAK3c,eAAa4c,cAAc,CAC9BV,EAAehc,eAAa2c,cAAc,CAE1C,KACF,MAAK7c,eAAa8c,SAAS,CACzBZ,EAAehc,eAAa6c,SAAS,CAErC,KACF,MAAK/c,eAAagd,UAAU,CAC1Bd,EAAehc,eAAa+c,UAAU,CAEtC,KACF,MAAKjd,eAAakd,SAAS,CACzBhB,EAAehc,eAAaid,SAAS,CAErC,KACF,SACEjB,EAAehc,eAAakd,GAAG,AAGnC,CACA,IAAM1W,EAAW2N,EAAehL,EAAQ6S,EAAc5H,EAAM3J,GAG5D,OAAQoR,GACN,IAAK,QAiMDC,EAAUzR,AAhM2BA,EAgMnB+C,EAAQ6F,SAAS,CAhME5I,GAgMQ,IAAI+C,EAAQ,IAAK,IAAK,KAEnE2O,EAAUjB,AAlM6CA,GAkM7B,EAmChC5T,CAjCMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CApMG+G,EAsMjC,CACEiU,cAAe,CACbC,QAAS,IAAI5I,aAAaqH,EAAQvN,OAAO,IACzC+O,QAAS,IAAI7I,aAAa,CAACsH,EAAS,EAAE,EACtCwB,QAAS,IAAI9I,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAC5E,EACA+I,OAAQ,CACNC,OAAQ,CAAA,EACRC,SAAW,yLASXC,OAAS,uSAWX,CACF,IAEOC,UAAU,CAAC,UAAW9B,GAC/B5U,EAAS2W,UAAU,CAAC,UAAW,IAAIhJ,EAAQkH,EAAS,IACpD7U,EAAS4W,SAAS,CAAC,UAAW/L,EAAQgM,QAAQ,EAC9C7W,EAASqQ,SAAS,CAvCEA,EAjM8BA,GAAAA,EAyOlDrQ,EAAS8W,WAAW,CAAG,CAAA,EACvB9W,EAAS+W,QAAQ,CAAG,CAAA,EACpB/W,EAASgX,aAAa,CAAG,CAACxT,EAAAA,SAAAA,CAAUyT,QAAQ,CAAEzT,EAAAA,SAAAA,CAAUyT,QAAQ,CAAC,CACjEjX,EAASkX,aAAa,CAAG,CAAC1T,EAAAA,SAAAA,CAAU2T,SAAS,CAAE3T,EAAAA,SAAAA,CAAU4T,mBAAmB,CAAE5T,EAAAA,SAAAA,CAAU2T,SAAS,CAAE3T,EAAAA,SAAAA,CAAU4T,mBAAmB,CAAC,CACjIpX,EAASqX,SAAS,CAAG,CAAA,EA7OjBrX,EA+OGA,EA7OH,KACF,KAAK,WAqHD4U,EAAUzR,AApH8BA,EAoHtB+C,EAAQ6F,SAAS,CApHK5I,GAoHK,IAAI+C,EAAQ,IAAK,IAAK,KAkDzElG,CA/CMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CAvHM+G,EAyHpC,CACEiU,cAAe,CACbC,QAAS,IAAI5I,aAAaqH,EAAQvN,OAAO,IACzCgP,QAAS,IAAI9I,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,EAC1E+J,YAAa,IAAI/J,aAAa,CAAC,EAAG,EAAG,EAAE,EACvCgK,SAAU,IAAIhK,aAAa,CAAC,EAAG,EAAG,EAAE,CACtC,EACA+I,OAAQ,CACNE,SAAW,sPAcXC,OAAS,glBAmBTF,OAAQ,CAAA,CACV,CACF,IAEOG,UAAU,CAAC,UAAW9B,GAC/B5U,EAAS4W,SAAS,CAAC,UAAW/L,EAAQgM,QAAQ,EAC9C7W,EAAS0W,UAAU,CAAC,cAAexQ,EAAQsR,IAAI,EAC/CxX,EAAS0W,UAAU,CAAC,WAAYxQ,EAAQsR,IAAI,EAE5CxX,EAASqQ,SAAS,CAtDEA,EArHiCA,GAAAA,EA4KrDrQ,EAAS8W,WAAW,CAAG,CAAA,EACvB9W,EAAS+W,QAAQ,CAAG,CAAA,EACpB/W,EAASqX,SAAS,CAAG,CAAA,EA9KjBrX,EAgLGA,EA9KH,KACF,SA4DI4U,EAAUzR,AA3DsBA,EA2Dd+C,EAAQ6F,SAAS,CA3DH5I,GA2Da,IAAI+C,EAAQ,IAAK,IAAK,KAmCzElG,CAhCMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CA9DF+G,EAgE5B,CACEiU,cAAe,CACbC,QAAS,IAAI5I,aAAaqH,EAAQvN,OAAO,IACzCgP,QAAS,IAAI9I,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAC5E,EACA+I,OAAQ,CACNE,SAAW,sJAQXC,OAAS,0SAYTF,OAAQ,CAAA,CACV,CACF,IAEOG,UAAU,CAAC,UAAW9B,GAC/B5U,EAAS4W,SAAS,CAAC,UAAW/L,EAAQgM,QAAQ,EAC9C7W,EAASqQ,SAAS,CApCEA,EA5DyBA,GAAAA,EAiG7CrQ,EAAS8W,WAAW,CAAG,CAAA,EACvB9W,EAAS+W,QAAQ,CAAG,CAAA,EACpB/W,EAASqX,SAAS,CAAG,CAAA,EAnGjBrX,EAqGGA,CAlGP,CAEA,OAAOyX,EAAAA,IAAAA,CAAKvc,MAAM,CAChB+G,EACA,CACEtF,KAAMA,GAAcmY,EAAarY,QAAQ,GACzC6C,SAAAA,EACAU,SAAAA,EACA0X,SAAU,GACZ,EACJ,CASA,SAASnI,GAAkBtN,CAAc,CAAEC,CAAmB,CAAE2Q,CAAiB,CAAExE,CAA4C,EAC7H,IAmN6CrN,EAAuBqP,EA4D9DlN,EA1DA+S,EAKAlW,EA1NAV,EAAW2N,EAAehL,EAAQnJ,EAAAA,YAAAA,CAAasc,MAAM,CAAElT,EAAQgL,IAAI,CAAE3J,GASrEvD,GA0MuCgB,EAhNzC6R,GAGY3Q,EAAQiB,KAAK,CA6MuCkN,EA1MTnO,EAAQmO,SAAS,CA4MtE6F,EAAgB,CACpBG,QAAS,IAAI9I,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,EAC1E6I,QAAS,IAAI7I,aAAa,CAAC,EAAG,EAAE,CAClC,EAgDAvN,CA9CMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CAjNM+G,EAmNpC,CACEiU,cAAAA,EACAI,OAAQ,CACNC,OAAQ,CAAA,EACRC,SAAW,qaAiBXC,OAAS,wmBAoBX,CACF,IAEOG,SAAS,CAAC,UAAW/L,EAAQgM,QAAQ,EAC9C7W,EAAS2W,UAAU,CAAC,UAAW,IAAIhJ,EAAQ,EAAG,KAEtCgK,AC94BV,SAASA,EAAY9J,CAAI,CAAEC,CAAK,SAC5B,AAAIA,AAAS,MAATA,GAAiB,AAAkB,aAAlB,OAAO9R,QAA0B8R,CAAK,CAAC9R,OAAO4b,WAAW,CAAC,CACpE,CAAC,CAAC9J,CAAK,CAAC9R,OAAO4b,WAAW,CAAC,CAAC/J,GACzBA,EAAAA,EAAgBC,EAClC,ED04BM9M,EAAgB6W,EAAAA,OAAS,GAOzB1U,EADEnC,AAAS1G,KAAAA,IAAT0G,EACM,IAAIkF,EAAQ,IAAK,IAAK,KAEtBA,EAAQ6F,SAAS,CAAC/K,GAE5BhB,EAAS0W,UAAU,CAAC,UAAWvT,IAV/BnD,EAAS8X,UAAU,CAAC,YAAa9W,GAcnChB,EAASqQ,SAAS,CAtEEA,EAAAA,GAAYA,EAuEhCrQ,EAAS8W,WAAW,CAAG,CAAA,EACvB9W,EAAS+W,QAAQ,CAAG,CAAA,EACpB/W,EAASgX,aAAa,CAAG,CAACxT,EAAAA,SAAAA,CAAUyT,QAAQ,CAAEzT,EAAAA,SAAAA,CAAUyT,QAAQ,CAAC,CACjEjX,EAASkX,aAAa,CAAG,CAAC1T,EAAAA,SAAAA,CAAU2T,SAAS,CAAE3T,EAAAA,SAAAA,CAAU4T,mBAAmB,CAAE5T,EAAAA,SAAAA,CAAU2T,SAAS,CAAE3T,EAAAA,SAAAA,CAAU4T,mBAAmB,CAAC,CAE1HpX,GA9QP,OAPIqO,GACFA,EAAYrJ,GAAG,CAAC,SAAU,CACxBjF,KAAMhH,EAAa0Z,MAAM,CACzBnN,OAAQ3E,KAAK+R,GAAG,CAAC/R,KAAK+R,GAAG,CAACxQ,EAAQgL,IAAI,CAACzF,KAAK,CAAE,GAAK9G,KAAK+R,GAAG,CAACxQ,EAAQgL,IAAI,CAACxF,MAAM,CAAE,GAAI,IAAO,CAC9F,GAGK+P,EAAAA,IAAAA,CAAKvc,MAAM,CAChB+G,EACA,CACEtF,KAAMuF,EAAQvF,IAAI,EAAI,SACtB2C,SAAAA,EACAU,SAAAA,EACA0X,SAAU,GACZ,EACJ,CA+QA,SAASlG,GAAoBtE,CAAuC,CAAEmB,CAA2C,EAC/GA,EAAYrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAagf,IAAI,CACvB7S,OAAQ,CAAC,IAAIgB,EAAQ,EAAG,EAAG,GAAI,IAAIA,EAAQgH,EAAKzR,MAAM,CAAE,EAAG,GAAG,CAC9DgM,MAAOyF,EAAKzF,KAAK,AACnB,GACA4G,EAAYrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAagf,IAAI,CACvB7S,OAAQ,CAAC,IAAIgB,EAAQ,EAAG,EAAG,GAAI,IAAIA,EAAQ,EAAGgH,EAAKzR,MAAM,CAAE,GAAG,CAC9DgM,MAAOyF,EAAKzF,KAAK,AACnB,GACA4G,EAAYrJ,GAAG,CAAC,QAAS,CACvBjF,KAAMhH,EAAagf,IAAI,CACvB7S,OAAQ,CAAC,IAAIgB,EAAQ,EAAG,EAAG,GAAI,IAAIA,EAAQ,EAAG,EAAGgH,EAAKzR,MAAM,EAAE,CAC9DgM,MAAOyF,EAAKzF,KAAK,AACnB,EACF,CEp7BA,IAAQoD,GAA8B1L,EAAAA,IAA9B0L,CAAAA,OAAAA,AAA8B1L,CAAAA,EAAAA,IAArBwO,CAAAA,OAAAA,CAASzH,IAAAA,GAAY/G,EAAAA,IAAZ+G,CAAAA,OAAAA,CCDlB0E,GAA4BzL,EAAAA,IAA5ByL,CAAAA,KAAAA,CAAO1E,GAAqB/G,EAArB+G,IAAAA,CAAAA,OAAAA,CAAS2E,GAAY1L,EAAZ0L,IAAAA,CAAAA,OAAAA,CAGlBmN,GAAUrX,KAAK6F,EAAE,CAAG,IAa1B,SAASyR,GAAS3S,CAAc,CAAE0E,CAAW,CAAE9H,CAA4B,EAA5BA,KAAAA,IAAAA,GAAAA,CAAAA,EAA0B,CAAA,CAAA,EACvE,IAAQ+O,EAAqD/O,EAArD+O,KAAqD/O,CAAAA,EAAAA,EAA9C4O,UAAAA,EAAYoH,AAAA,KAAA,IAAAA,EAAA,CAAC,EAAG,EAAG,EAAE,CAAyBhW,EAAAA,EAAAA,EAAvBiW,OAChCC,EAAUxN,GAAMmB,SAAS,CADgBsM,AAAA,KAAA,IAAAA,EAAA,CAAC,EAAG,EAAG,EAAE,CAAAA,GAChBC,MAAM,GAAGtM,SAAS,CAAC,IAAInB,IACzD3F,EAAoB,EAAE,CACtB5C,EAAU,EAAE,CAElBiW,EAASjT,EAAQ,GAGjB,IAFA,IAAI5J,EAAI,EAEDA,GAAKsO,EAAKtO,IAAK,CACpB,IAAM8c,EAAQ9c,EAAIsc,GAElB1V,EAAQ3D,IAAI,CAACjD,EAAI,EAAGA,GACpB6c,EAAS5X,KAAKmF,GAAG,CAAC0S,GAASlT,EAAQ3E,KAAKoF,GAAG,CAACyS,GAASlT,EACvD,CAEA,MAAO,CACLJ,OAAAA,EACA5C,QAAAA,CACF,EAEA,SAASiW,EAAUzS,CAAW,CAAEC,CAAW,EACzC,IAAMoC,EAAQ,IAAIjC,EAEd+K,AAAU,CAAA,OAAVA,EACF9I,EAAMnD,GAAG,CAACc,EAAK,EAAGC,GACTkL,AAAU,OAAVA,EACT9I,EAAMnD,GAAG,CAAC,EAAGc,EAAKC,GAElBoC,EAAMnD,GAAG,CAACc,EAAKC,EAAK,GAEtBqS,EAAQK,eAAe,CAACtQ,GACxBjD,EAAOvG,IAAI,CAACwJ,EAAMpD,GAAG,CAAC+L,GACxB,CACF,CAEA,SAASiH,GAAMxW,CAAQ,CAAEC,CAAQ,EAC/B,MAAO,CACL0D,OAAQ,CACNgB,GAAQ6F,SAAS,CAACxK,GAClB2E,GAAQ6F,SAAS,CAACvK,GACnB,CACDc,QAAS,CAAC,EAAG,EAAE,AACjB,CACF,CAwBA,SAASoW,GAAMjR,CAAa,CAAEC,CAAc,CAAEiR,CAAU,EACtD,IAAM9Q,EAAIJ,EAAQ,EACZmR,EAAIlR,EAAS,EACbxC,EAAoB,CACxB,IAAIgB,GAAQ,CAAC2B,EAAG+Q,EAAG,GACnB,IAAI1S,GAAQ2B,EAAG+Q,EAAG,GAClB,IAAI1S,GAAQ2B,EAAG,CAAC+Q,EAAG,GACnB,IAAI1S,GAAQ,CAAC2B,EAAG,CAAC+Q,EAAG,GACrB,CAQD,OANID,GACFzT,EAAO2T,OAAO,CAACC,SAAAA,CAAAA,EACbA,EAAI/T,GAAG,CAAC4T,EACV,GAGK,CACLzT,OAAAA,EACA5C,QAAS,CACP,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACtB,AACH,CACF,CAwBA,IAAMyW,GAAuD,CAC3DlB,QAAAA,SAASre,CAAQ,EACf,IAAMwf,EAAM,EAAE,CAEd,GAAIxf,EAAIyf,MAAM,CAMZ,IAAK,IALCC,EAAU1f,EAAIyf,MAAM,CAACC,OAAO,CAC5BC,EAAQ3f,EAAIyf,MAAM,CAACE,KAAK,CACxB1R,EAAQjO,EAAIiO,KAAK,CACjBC,EAASlO,EAAIkO,MAAM,CAEhBhM,EAAI,EAAGA,EAAIwd,EAAQzd,MAAM,CAAEC,GAAK,EACvCsd,EAAIra,IAAI,CAAC+Z,GAAKS,CAAK,CAAC,EAAE,CAAG1R,EAAO0R,CAAK,CAAC,EAAE,CAAGzR,EAAQ,CACjDD,EAASyR,CAAAA,CAAO,CAACxd,EAAE,CAAG,IACtBgM,EAAUwR,CAAAA,CAAO,CAACxd,EAAI,EAAE,CAAG,EAAA,EAC3B,EACD,QAGHsd,EAAII,OAAO,CAACL,GAAOM,SAAS,CAAC7f,EAAI,CAAC,EAAE,EAGtC,OAAOwf,CACT,EACAM,OAAAA,SAAQ9f,CAAQ,EACd,IAAQ8L,EAAgB9L,EAAhB8L,MAAQ0E,CAAAA,EAAQxQ,EAARwQ,GAAAA,CAEhB,MAAO,CACLiO,GAAQ3S,EAAQ0E,GAChBA,AAAQ,MAARA,GAAe+N,GAAK,CAAC,EAAG,EAAG,EAAE,CAAE,CAACzS,EAAQ,EAAG,EAAE,EAC7C0E,AAAQ,MAARA,GAAe+N,GAAK,CAAC,EAAG,EAAG,EAAE,CAAE,CAACpX,KAAKmF,GAAG,CAACkE,EAAMgO,IAAW1S,EAAQ3E,KAAKoF,GAAG,CAACiE,EAAMgO,IAAW1S,EAAQ,EAAE,EACvG,AACH,EACA0Q,IAAK,SAAUxc,CAAQ,EACrB,IApGIqO,EACA+Q,EACA1b,EACAqc,EAkGF9R,EACEjO,EADFiO,KAAAA,CAAOC,EACLlO,EADKkO,OAAQC,EACbnO,EADamO,KAAOkH,CAAAA,EACpBrV,EADoBqV,MAAAA,CAIxB,MAAO,EAzGHhH,EAAIJ,AAuGSA,EAvGD,EACZmR,EAAIlR,AAsGgBA,EAtGP,EACbxK,EAAIyK,AAqGwBA,EArGhB,EACZ4R,EAAW1K,MAoGwBA,EAAAA,EApGd,CAAC,EAAG,EAAG,EAAE,CAQ7B,CACL3J,OARwB,CACxB,CAAC,CAAC2C,EAAG+Q,EAAG,CAAC1b,EAAE,CAAE,CAAC,CAAC2K,EAAG,CAAC+Q,EAAG,CAAC1b,EAAE,CAAE,CAAC,CAAC2K,EAAG+Q,EAAG1b,EAAE,CAAE,CAAC,CAAC2K,EAAG,CAAC+Q,EAAG1b,EAAE,CAClD,CAAC2K,EAAG+Q,EAAG,CAAC1b,EAAE,CAAE,CAAC2K,EAAG,CAAC+Q,EAAG,CAAC1b,EAAE,CAAE,CAAC2K,EAAG+Q,EAAG1b,EAAE,CAAE,CAAC2K,EAAG,CAAC+Q,EAAG1b,EAAE,CAC/C,CAACsc,GAAG,CAACC,SAAAA,CAAAA,EACJ,OAAO,IAAIvT,GAAQuT,CAAI,CAAC,EAAE,CAAGF,CAAQ,CAAC,EAAE,CAAEE,CAAI,CAAC,EAAE,CAAGF,CAAQ,CAAC,EAAE,CAAEE,CAAI,CAAC,EAAE,CAAGF,CAAQ,CAAC,EAAE,CACxF,GAIEjX,QAAS,CACP,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACtB,AACH,GAuFe,AACf,EACAyS,OAAQ,SAAUvb,CAAG,EACnB,IAAQ8L,EAAgB9L,EAAhB8L,MAAQ0E,CAAAA,EAAQxQ,EAARwQ,GAAAA,CACVgP,EAAM,CACVjB,GAAK,CAAC,EAAG,EAAG,CAACzS,EAAO,CAAE,CAAC,EAAG,EAAGA,EAAO,EACpC2S,GAAQ3S,EAAQ0E,EAAM,IAAM,IAAM,IAAK,CAAEiH,MAAO,KAAMkH,OAAQ,CAAC,EAAG,GAAI,EAAE,AAAC,GACzEF,GAAQ3S,EAAQ0E,EAAK,CAAEiH,MAAO,IAAK,GACnCgH,GAAQ3S,EAAQ,IAAK,CAAE2L,MAAO,KAAMkH,OAAQ,CAAC,EAAG,GAAInO,EAAI,AAAC,GAC1D,CAMD,OAJIA,EAAM,IACRgP,EAAIra,IAAI,CAACsZ,GAAQ3S,EAAQ0E,EAAM,IAAM,IAAM,IAAK,CAAEiH,MAAO,KAAMkH,OAAQ,CAAC,IAAK,EAAG,EAAE,AAAC,IAG9Ea,CACT,EACAU,WAAAA,SAAYlgB,CAAG,EACb,IAAQ8L,EAAgB9L,EAAhB8L,MAAQ0E,CAAAA,EAAQxQ,EAARwQ,GAAAA,CACVgP,EAAM,CACVjB,GAAK,CAAC,EAAG,EAAGzS,EAAO,CAAE,CAAC,EAAG,EAAG,EAAE,EAC9ByS,GAAK,CAAC/N,EAAM,IAAM,CAAC1E,EAAS,EAAG,EAAG,EAAE,CAAE,CAACA,EAAQ,EAAG,EAAE,EACpD9L,EAAM,IAAMue,GAAK,CAAC,EAAG/N,EAAM,IAAM,CAAC1E,EAAS,EAAG,EAAE,CAAE,CAAC,EAAGA,EAAQ,EAAE,EAChE2S,GAAQ3S,EAAQ,AAAC0E,CAAAA,EAAM,IAAM,IAAM,GAAE,EAAK,EAAG,CAAEiH,MAAO,IAAK,GAC3DgH,GAAQ3S,EAAQ0E,EAAK,CAAEiH,MAAO,IAAK,GACnCgH,GAAQ3S,EAAQ,GAAI,CAAE2L,MAAO,KAAMkH,OAAQ,CAAC,EAAG,EAAGnO,EAAI,AAAC,GACvD+N,GAAK,CAAC,EAAG,EAAG,EAAE,CAAE,CAACpX,KAAKmF,GAAG,CAACkE,EAAMgO,IAAW1S,EAAQ3E,KAAKoF,GAAG,CAACiE,EAAMgO,IAAW1S,EAAQ,EAAE,EACxF,CAMD,OAJI0E,EAAM,IACRgP,EAAIra,IAAI,CAACsZ,GAAQ3S,EAAQ0E,EAAM,IAAM,IAAM,GAAI,CAAEiH,MAAO,IAAK,IAGxD+H,CACT,EACA9D,KAAAA,SAAM1b,CAAG,EACP,IAAQ8L,EAAgB9L,EAAhB8L,MAAQ0E,CAAAA,EAAQxQ,EAARwQ,GAAAA,CACV2P,EAAcrU,EAAS3E,KAAK4K,GAAG,CAAC/R,EAAIgf,KAAK,CAAGR,IAAW1S,EAE7D,MAAO,CACL2S,GAAQ0B,EAAa3P,EAAK,CAAE8G,UAAW,CAAC,EAAG,EAAGxL,EAAO,AAAC,GACtDyS,GAAK,CAACzS,EAAQ,EAAG,EAAE,CAAE,CAACqU,EAAa,EAAGrU,EAAO,EAC7C0E,EAAM,IAAM+N,GAAK,CAAC,EAAGzS,EAAQ,EAAE,CAAE,CAAC,EAAGqU,EAAarU,EAAO,EACzD0E,EAAM,KAAO+N,GAAK,CAAC,CAACzS,EAAQ,EAAG,EAAE,CAAE,CAAC,CAACqU,EAAa,EAAGrU,EAAO,EAC5D0E,EAAM,KAAO+N,GAAK,CAAC,EAAG,CAACzS,EAAQ,EAAE,CAAE,CAAC,EAAG,CAACqU,EAAarU,EAAO,EAC5DyS,GAAK,CAACpX,KAAKmF,GAAG,CAACkE,EAAMgO,IAAW1S,EAAQ3E,KAAKoF,GAAG,CAACiE,EAAMgO,IAAW1S,EAAQ,EAAE,CAC1E,CAAC3E,KAAKmF,GAAG,CAACkE,EAAMgO,IAAW2B,EAAahZ,KAAKoF,GAAG,CAACiE,EAAMgO,IAAW2B,EAAarU,EAAO,EACzF,CAACsU,MAAM,CAACb,GAAOO,MAAM,CAAC9f,GACzB,EACAqgB,KAAAA,SAAMrgB,CAAG,EACP,IAAMsgB,EAAKtgB,EAAIiO,KAAK,CAAG,EAEvB,MAAO,CACLsQ,GAAK,CAAC,CAAC+B,EAAI,EAAG,EAAE,CAAE,CAACA,EAAI,EAAG,EAAE,EAC7B,AACH,EACAT,UAAAA,SAAW7f,CAAG,EACZ,MAAO,CACLkf,GAAKlf,EAAIiO,KAAK,CAAEjO,EAAIkO,MAAM,EAC3B,AACH,EACAqS,cAAAA,SAAevgB,CAAG,EAChB,MAAO,CACLkf,GAAKlf,EAAIiO,KAAK,CAAEjO,EAAIkO,MAAM,EAC3B,AACH,EACAsS,MAAAA,SAAOxgB,CAAG,EACR,IAAQwQ,EAA6BxQ,EAA7BwQ,GAAAA,CAAK1E,EAAwB9L,EAAxB8L,MAAAA,CAAQ2U,EAAgBzgB,EAAhBygB,WAAAA,CAErB,MAAO,CACLhC,GAAQgC,EAAa,IAAK,CAAEnJ,UAAW,CAACxL,EAAQ,EAAG,EAAE,CAAE6S,OAAQ,CAAC,GAAI,EAAG,EAAE,AAAC,GAC1EF,GAAQ3S,EAAS2U,EAAajQ,GAC9BiO,GAAQ3S,EAAS2U,EAAajQ,GAC9BiO,GAAQ3S,EAAQ0E,EAAK,CAAE8G,UAAW,CAAC,EAAG,EAAGmJ,EAAY,AAAC,GACtDhC,GAAQ3S,EAAQ0E,EAAK,CAAE8G,UAAW,CAAC,EAAG,EAAG,CAACmJ,EAAY,AAAC,GACvDjQ,EAAM,KAAQ,EAAIiO,GAAQgC,EAAa,IAAK,CAC1CnJ,UAAW,CAAC,CAACxL,EAAQ,EAAG,EAAE,CAC1B6S,OAAQ,CAAC,GAAI,EAAG,EAAE,GACfF,GAAQgC,EAAa,IAAK,CAC7BnJ,UAAW,CAACnQ,KAAKmF,GAAG,CAACkE,EAAMgO,IAAW1S,EAAQ3E,KAAKoF,GAAG,CAACiE,EAAMgO,IAAW1S,EAAQ,EAAE,CAClF6S,OAAQ,CAAC,GAAI,EAAGnO,EAAI,AACtB,GACD,AACH,EACAkQ,KAAAA,SAAM1gB,CAAG,EAIP,IAAK,IAHC2gB,EAAY3gB,EAAI8G,IAAI,CACpB0Y,EAAM,EAAE,CAELtd,EAAI,EAAGA,EAAIye,EAAU1e,MAAM,CAAG,EAAGC,IACxCsd,EAAIra,IAAI,CAAC+Z,GA/PE,IAAA,IA+PuByB,CAAS,CAACze,EAAE,GAC9Csd,EAAIra,IAAI,CAACoZ,GAAKoC,CAAS,CAACze,EAAE,CAAEye,CAAS,CAACze,EAAI,EAAE,GAI9C,OAFAsd,EAAIra,IAAI,CAAC+Z,GAlQI,IAAA,IAkQqByB,CAAS,CAACA,EAAU1e,MAAM,CAAG,EAAE,GAE1Dud,CACT,CACF,EAaO,SAASoB,GAAqBnY,CAAc,CAAE/H,CAAsC,CAAEgI,CAA8C,EAEzI,IAKmCgD,EAAsB5C,EAAsBa,EAAakN,EAAmB1T,EACzGqD,EAmCAV,EAzCA+a,EAAMC,AA3Kd,SAA4B9a,CAA0B,EAIpD,IAAK,oBACH,IAAMF,EAAWE,CAAU,CAAC9D,EAAE,CAE1B4D,IACFA,EAAS4F,MAAM,CAAC2T,OAAO,CAAC1Q,SAAAA,CAAAA,EACtBjD,EAAOvG,IAAI,CAACwJ,EAAMtC,CAAC,CAAEsC,EAAMtK,CAAC,CAAEsK,EAAM5C,CAAC,CACvC,GACAjG,EAASgD,OAAO,CAACuW,OAAO,CAACzW,SAAAA,CAAAA,SAASE,EAAQ3D,IAAI,CAACyD,EAAQmY,KACvDA,GAAejb,EAAS4F,MAAM,CAACzJ,MAAM,KAEzC,EAbMyJ,EAAmB,EAAE,CACrB5C,EAAoB,EAAE,CAEnB5G,EAAI,EAAG6e,EAAc,EAAG7e,EAAI8D,EAAW/D,MAAM,CAAEC,IAAAA,EAAAA,EAAAA,GAYxD,MAAO,CACLwJ,OAAQ,IAAIqI,aAAarI,GACzB5C,QAAS,IAAIR,YAAYQ,EAC3B,CACF,EAsJcyW,EAAM,CAAC7e,EAAK6F,IAAI,EAAI7F,EAAKsgB,KAAK,CAAC,CAACtgB,IAG5C,OAGmCgL,EAHTmV,EAAInV,MAAM,CAGqB5C,EAHnB+X,EAAI/X,OAAO,CAG8Ba,EAH5BjB,EAAQiB,KAAK,EAAI,CAAC,EAAG,EAAG,EAAE,CAGekN,EAHbnO,EAAQmO,SAAS,CAGe1T,EAHbzC,EAAKsgB,KAAK,UAGhBnK,GAAAA,CAAAA,EAAY,CAAA,CAAA,EA8BxGrQ,CA7BMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CAJd+G,EAMhB,CACEiU,cAAe,CACbC,QAAS,IAAI5I,aAAapK,GAC1BkT,QAAS,IAAI9I,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAC5E,EACA+I,OAAQ,CACNC,OAAQ,CAAA,EACRC,SAAW,kIAQXC,OAAS,4NASX,CACF,IAEOC,UAAU,CAAC,UAAWxQ,GAAQ6F,SAAS,CAAC5I,IACjDnD,EAAS4W,SAAS,CAAC,UAAW/L,GAAQgM,QAAQ,EAC9C7W,EAASqQ,SAAS,CAAGA,EACrBrQ,EAAS8W,WAAW,CAAG,CAAA,EACvB9W,EAAS+W,QAAQ,CAAG,CAAA,EACpB/W,EAASqX,SAAS,CAAG,CAAA,EACf/X,EAAW+N,EAAAA,QAAAA,CAASnS,MAAM,CAvCd+G,EAyChB,CACEE,WAAY,CACVmL,WAAY,CACVJ,KAAM,EACNlM,KAAMkE,CACR,CACF,EACA5C,QAAS,CACPtB,KAAMsB,CACR,EACAE,KAAMgB,YAAUiX,KAAK,CACrB/Z,UAAW4B,EAAQ7G,MAAM,AAC3B,GAEKgc,EAAAA,IAAAA,CAAKvc,MAAM,CAvDA+G,EAyDhB,CACEtF,KAAAA,EACA2C,SAAAA,EACAU,SAAAA,EACA0X,SAAU,GACZ,EA7DJ,CAhBAqB,EAAM,CAAC,IAAI,CAAGA,GAAO2B,IAAI,CACzB3B,EAAM,CAAC,IAAI,CAAGA,GAAOhE,MAAM,CAC3BgE,EAAM,CAAC,IAAI,CAAGA,GAAO7D,IAAI,CACzB6D,EAAM,CAAC,IAAI,CAAGA,GAAOW,UAAU,CAC/BX,EAAM,CAAC,IAAI,CAAGA,GAAOO,MAAM,CAC3BP,EAAM,CAAC,IAAI,CAAGA,GAAOiB,KAAK,CAC1BjB,EAAM,CAAC,IAAI,CAAGA,GAAOM,SAAS,CAC9BN,EAAM,CAAC,IAAI,CAAGA,GAAOgB,aAAa,CAClChB,EAAM,CAAC,IAAI,CAAGA,GAAOc,IAAI,CACzBd,EAAM,CAAC,IAAI,CAAGA,GAAOlB,OAAO,C3BvQ5B,IAAQlK,GAA0CxO,EAA1CwO,IAAAA,CAAAA,OAAAA,CAASzH,GAAiC/G,EAAAA,IAAAA,CAAjC+G,QAAS2E,GAAwB1L,EAAAA,IAAAA,CAAxB0L,OAAS8P,CAAAA,GAAexb,EAAAA,IAAfwb,CAAAA,UAAAA,CAC7BC,GAAYpX,EAAAA,SAAAA,AAGLqX,CAAAA,EAAAA,cAAAA,CAAD,SAALC,CAAA,EAAMD,SAAAA,iDAQXxM,EAAAA,WAAAA,CAA8C,IAAI1K,IAIlDoX,EAAAA,eAAAA,CAAAA,EAKAC,EAAAA,GAAAA,CAAMnQ,GAAQoQ,YAAY,GAC1BC,EAAAA,eAAAA,CAA0B,EAAE,GAE5B7b,IAAoB,CAAA,KAocnBgD,EACO8Y,gBAAmB,CAAA,WACzB,IAAM1B,EAAOpX,EAAKoX,IAAI,CAChBpL,EAAchM,EAAKgM,WAAW,CAEpC,GAAIA,EAAYnB,IAAI,CAAG,EAAG,CACxB,IACIkO,EADEC,EAAehN,EAAY/N,IAAI,GAMrC,GAHA8a,EAAY/Y,EAAK2N,SAAS,CAAC+D,cAAc,GACtB1R,EAAKiZ,UAAU,CAElB,CAEd,IAAMC,EAAW,IAAIrV,GACfsV,EAAY,IAAIb,GAChBc,EAAW,IAAIvV,GAAQ,EAAG,EAAG,GAC7BwV,EAAerZ,EAAK+L,OAAO,AAG7B/L,AAAoB,CAAA,GAApBA,EAAK0Y,eAAe,EAA6BW,IAAiB9iB,EAAAA,YAAAA,CAAa4V,KAAK,CACtFnM,EAAKiZ,UAAU,CAACtL,SAAS,CAAC2L,cAAc,CAACJ,EAAUC,GAEnDnZ,EAAKiZ,UAAU,CAACtL,SAAS,CAAC2L,cAAc,CAACJ,GAG3C,IAAMK,EAAkB,IAAInL,WAAU,CAAA,CACpC1F,SAAUwQ,EACVM,KAAML,EACNhN,MAAOiN,EACP/K,MAAO,CAAA,CACT,GAGA,GACEgL,IAAiB9iB,EAAAA,YAAaoS,CAAAA,QAAQ,EACtC0Q,IAAiB9iB,EAAAA,YAAAA,CAAa4V,KAAK,EACnCkN,IAAiB9iB,eAAa+W,WAAW,EACzC+L,IAAiB9iB,EAAa4W,YAAAA,CAAAA,MAAM,EACpCkM,IAAiB9iB,EAAAA,YAAAA,CAAa8W,KAAK,CACnC,CAIA,IAAMoM,EAAS3X,EAFGqL,AADHiK,EAAKsC,WAAW,CAAEvM,MAAM,CACdzE,QAAQ,EAAI,CAAC,EAAG,EAAG,EAAE,CAC9B6Q,EAAgB7Q,QAAQ,EAGxC6Q,EAAgBI,WAAW,CAACF,EAAOjW,CAAC,CAAEiW,EAAOje,CAAC,CAAEie,EAAOvW,CAAC,EACxD6V,EAAYQ,EAAgB7H,cAAc,QAE1CqH,EAAYQ,EAAgB7H,cAAc,EAE9C,CAKA,MAAO,CACLhU,KAAMkc,cAAYC,MAAM,CAOxBC,QAAAA,SAASC,CAAQ,CAAEC,CAAsB,EACvC,IAAMC,EAAe,EAAE,CACjBC,EAAiBtiB,AAZdwf,EAYmB+C,YAAY,CA1hBrC3B,EA4hBH0B,CAAAA,EAAeE,WAAW,CAAGniB,KAAAA,EAC7B,IAAkB+gB,IAAAA,EAAAA,EAAAA,EAAAA,GAAAA,CAAAA,AAAAA,CAAAA,EAAAA,GAAAA,EAAAA,IAAAA,GAAAA,WAAP9hB,IAAAA,EAAAA,EAAAA,KAAAA,CACHmjB,EAAWrO,EAAYoB,GAAG,CAAClW,GAC3BsV,EAAS,IAAI3I,GACbyW,EAAc,IAAIzW,GAEpBwW,CAAAA,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU3c,IAAI,AAAA,IAAKhH,EAAakZ,GAAG,EAAIyK,AAAAA,CAAAA,MAAAA,SAAAA,EAAU3c,IAAI,AAAA,IAAKhH,EAAa0Z,MAAM,IAC3EiK,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU7N,MAAM,AAANA,GACZA,EAAO+N,QAAQ,CAACF,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU7N,MAAM,EAElCuM,EAAUjH,YAAY,CAACtF,EAAQ8N,IAEjC,IAAI5R,EAAAA,KAAAA,EAEJ,OAAQ2R,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU3c,IAAI,EACpB,KAAKhH,EAAakZ,GAAG,CAEjB,IAAM4K,EAAcH,EAASxP,IAAI,CAAC3I,KAAK,GAAGK,QAAQ,CAAC,IAC7CkY,EAASjO,EAAOtK,KAAK,GAAGQ,GAAG,CAAC8X,GAC5BE,EAASlO,EAAOtK,KAAK,GAAGC,QAAQ,CAACqY,GAEvC9R,EAAWqR,EAAIY,YAAY,CAAC,CAAEpW,IAAKmW,EAAQtW,IAAKqW,CAAO,EAAG,IAAI5W,IAGhE,KACF,MAAKnN,EAAa0Z,MAAM,CAGtB,GAAI8J,EAAenO,OAAO,GAAKxV,EAAAA,YAAAA,CAAa+Z,UAAU,CAAE,CAEtD,IAAMsK,EAAWhjB,AA5ChBwf,EA4CqBsC,WAAW,CAAEvM,MAAM,CAAC0N,aAAa,GAEjDC,EAAcljB,AA9CnBwf,EA8CwBsC,WAAW,CAAEqB,QAAQ,CAACC,QAAQ,GACjDC,EAAerjB,AA/CpBwf,EA+CyBsC,WAAW,CAAEqB,QAAQ,CAACG,SAAS,GAEnD9V,EAAQ,EAAI9G,KAAK4K,GAAG,CAACN,AAJf,GAIqBtK,KAAK6F,EAAE,CAAG,KAD1B,GAGXkB,EAASD,EADA0V,CAAAA,EAAcG,GAEvBE,EAAU5P,EAA6B,CAACnG,EAAQ,EAAGA,EAAQ,EAAG,CAACC,EAAS,EAAGA,EAAS,EAAG,IAJ5E,IAOX+V,EAAkBxjB,AAvDvBwf,EAuD4BsC,WAAW,CAAEvM,MAAM,CAACkO,oBAAoB,GAC/DC,EAAiB,IAAIlN,WAAU,CAAA,CACnCC,MAAO,CAAA,CACT,GAEAiN,EAAeC,eAAe,CAACxC,GAC/B,IAAMzC,EAAMgF,EAAe5S,QAAQ,CAC7B8S,EAAUtB,EAAerP,IAAI,CAAC2Q,OAAO,EAAI,EAE/CF,EAAe3B,WAAW,CAAErD,EAAI9S,CAAC,CAAG4B,EAAQ,EAAKoW,EAAUlF,EAAI9a,CAAC,CAAG6J,EAAS,EAAKmW,EAASlF,EAAIpT,CAAC,EAC/F,IAAMuY,EAAYH,EAAe5J,cAAc,GACzCgK,EAAYN,EAAgBlZ,KAAK,GAAGK,QAAQ,CAACkZ,GAEnDC,EAAU5J,YAAY,CAACtF,EAAQ8N,GAI/B,IAAMqB,EAAUC,AADDT,EAAQjZ,KAAK,GAAGK,QAAQ,CAACqY,GACjB1Y,KAAK,GAAGK,QAAQ,CAACmZ,GAClCG,EAAeF,EAAQ7J,YAAY,CAACtF,EAAQ,IAAI3I,IAKhDZ,EAASoX,EAASpX,MAAM,CAOxB6C,EAAQgW,AANH,IAAIjY,GACb4X,EAAUM,QAAQ,CAAC,EAAE,CACrBN,EAAUM,QAAQ,CAAC,EAAE,CACrBN,EAAUM,QAAQ,CAAC,EAAE,EACrBzZ,SAAS,GAEMJ,KAAK,GAAGK,QAAQ,CAACU,GAElC6C,EAAMpD,GAAG,CAAC8J,GAEV,IAAMwP,EAAcL,EAAQ7J,YAAY,CAAChM,EAAO,IAAIjC,IAK9CoY,EAAgBJ,EAAaK,SAAS,GACtCC,EAAeH,EAAYE,SAAS,GACpCE,EAAeH,EAAcI,QAAQ,CAACF,GAExCnC,EAAcqC,QAAQ,CAACJ,GAAiBG,AAAe,IAAfA,GAC1C1T,CAAAA,EAAW4R,CAAAA,OAGb5R,EAAWqR,EAAIuC,eAAe,CAAC,CAAE9P,OAAQ8N,EAAarX,OAAQoX,EAASpX,MAAM,AAAC,EAAG,IAAIY,IAGvF,KACF,MAAKnN,EAAa0Y,QAAQ,CAKxB,IAAK,IAJGC,EAA+BgL,EAA/BhL,SAAWE,CAAAA,EAAoB8K,EAApB9K,eAAAA,CACbgN,EAA0B,EAAE,CAC9BC,EAAAA,KAAAA,EAEK5U,EAAI,EAAGA,EAAIyH,EAAUjW,MAAM,CAAEwO,IAAK,CACzC,IAAMwH,EAAWC,CAAS,CAACzH,EAAE,CACvB6U,EAA8B,CAClCvd,GAAI6Z,EAAUjH,YAAY,CAAC1C,EAASlQ,EAAE,CAAa,IAAI2E,IACvD1E,GAAI4Z,EAAUjH,YAAY,CAAC1C,EAASjQ,EAAE,CAAa,IAAI0E,IACvDzE,GAAI2Z,EAAUjH,YAAY,CAAC1C,EAAShQ,EAAE,CAAa,IAAIyE,GACzD,EAEA2Y,CAAAA,EAAczC,EAAI2C,iBAAiB,CAACD,EAAe,IAAI5Y,GAAW0L,EAAAA,GAEhEgN,EAAajgB,IAAI,CAACkgB,EAEtB,CAEA,GAAID,EAAanjB,MAAM,CAAG,EAAG,CAC3B,IAAIujB,EAAAA,KAAAA,EAEJJ,EAAa/F,OAAO,CAACY,SAAAA,CAAAA,EACnB,IAAMiF,EAAWtC,EAAI6C,MAAM,CAACC,eAAe,CAACzF,GAExC,CAAA,CAACuF,GAAgBN,EAAWM,KAC9BA,EAAeN,EACf3T,EAAW0O,EAEf,EACF,CAEA,KAEF,MAAK1gB,EAAagf,IAAI,CACpB,IAAQ7S,EAAkBwX,EAAlBxX,MAAQuC,CAAAA,EAAUiV,EAAVjV,KAAAA,CAEhBsD,EAAWoU,A0BjqBpB,SACLC,CAAY,CACZ/C,CAAsB,CACtBnX,CAAkC,CAClCI,CAAc,CACd8V,CAAkB,CAClB5L,CAAc,EASd,IAAM6P,EAAclB,AANT,IAAIjY,GACbkV,EAAUgD,QAAQ,CAAC,EAAE,CACrBhD,EAAUgD,QAAQ,CAAC,EAAE,CACrBhD,EAAUgD,QAAQ,CAAC,EAAE,EACrBzZ,SAAS,GAEYJ,KAAK,GAAGK,QAAQ,CAACU,GAExC+Z,EAAYta,GAAG,CAACG,CAAM,CAAC,EAAE,EAGzB,IAAM8Y,EAAUxO,EAAO8P,sBAAsB,CAAC,IAAIzU,GAAWuQ,GAEvDmE,EAAcvB,EAAQ7J,YAAY,CAACjP,CAAM,CAAC,EAAE,CAAE,IAAIgB,IAClDsZ,EAAYxB,EAAQ7J,YAAY,CAACjP,CAAM,CAAC,EAAE,CAAE,IAAIgB,IAKhDuY,EAAegB,AAFMC,AAFD1B,EAAQ7J,YAAY,CAACkL,EAAa,IAAInZ,IAEnB3B,KAAK,GAAGC,QAAQ,CAAC+a,GAEtB9jB,MAAM,GAGfkkB,GH3CuB5H,EG2Ce,CAACwH,EAAYhB,SAAS,GAAIiB,EAAUjB,SAAS,GAAG,CHzC/GqB,EAAK,IAAIjS,EACTkS,EAAK,IAAIlS,EACTmS,EAAK,IAAInS,EAEfiS,EAAGG,eAAe,CGqCoC1D,EHrC5BtE,CAAI,CAAC,EAAE,EACjC8H,EAAGE,eAAe,CGoCoC1D,EHpC5BtE,CAAI,CAAC,EAAE,EACjC+H,EAAGC,eAAe,CAAChI,CAAI,CAAC,EAAE,CAAEA,CAAI,CAAC,EAAE,EAU7B2G,EAAW,EAFD/d,KAAKC,GAAG,CAACD,KAAKqf,IAAI,CAACC,CAD7BA,EAAI,AAACC,CAAAA,CANLA,EAAWN,EAAGnkB,MAAM,KACpB0kB,EAAWN,EAAGpkB,MAAM,KACpB2kB,EAAWN,EAAGrkB,MAAM,GAIO2kB,EAAY,GACLH,CAAAA,EAAIC,CAAAA,EAAaD,CAAAA,EAAIE,CAAO,EAAMF,CAAAA,EAAIG,CAAAA,IAE7CA,EAG7BC,EAAW,CAAA,EAFJ1f,KAAKqf,IAAI,CAACrf,KAAK+R,GAAG,CAACwN,EAAU,GAAKvf,KAAK+R,GAAG,CAACgM,EAAU,KAItD0B,GAAYE,AAHX3f,KAAKqf,IAAI,CAACrf,KAAK+R,GAAG,CAACyN,EAAU,GAAKxf,KAAK+R,GAAG,CAACgM,EAAU,KAGpC0B,GAC1BC,CAAAA,EAAW,CAAA,CAAA,EAGN,CACL3B,SAAAA,EACA2B,SAAAA,CACF,GGaQ3B,EAAuBiB,EAAvBjB,QAAU2B,CAAAA,EAAaV,EAAbU,QAAAA,CAElB,GAAI3B,GAAYD,GAAgB4B,EAAU,CAExC,IH/CoDtI,EAEhD6H,EACAC,EACAC,EAKAI,EACAC,EACAC,EAIAH,EAGAvB,EAGF2B,EAYoDtI,EAClD6H,EACAC,EACAC,EACAS,EACAC,EAKAN,EACAC,EACAC,EAIAH,EAGAvB,EACA+B,EAKAC,EGXEC,GHdgD5I,EGcS,CAACwH,EAAaC,EAAU,CHbnFI,EAAK,IAAIjS,EACTkS,EAAK,IAAIlS,EACTmS,EAAK,IAAInS,EACT4S,EAAQxI,CAAI,CAAC,EAAE,CAACwG,SAAS,GACzBiC,EAAQzI,CAAI,CAAC,EAAE,CAACwG,SAAS,GAE/BqB,EAAGG,eAAe,CGOgC1D,EHPxBkE,GAC1BV,EAAGE,eAAe,CGMgC1D,EHNxBmE,GAC1BV,EAAGC,eAAe,CAACS,EAAOD,GAUpB7B,EAAW,EAFD/d,KAAKC,GAAG,CAACD,KAAKqf,IAAI,CAACC,CAD7BA,EAAI,AAACC,CAAAA,CANLA,EAAWN,EAAGnkB,MAAM,KACpB0kB,EAAWN,EAAGpkB,MAAM,KACpB2kB,EAAWN,EAAGrkB,MAAM,GAIO2kB,EAAY,GACLH,CAAAA,EAAIC,CAAAA,EAAaD,CAAAA,EAAIE,CAAO,EAAMF,CAAAA,EAAIG,CAAAA,IAE7CA,EAC3BK,EAAK9f,KAAKqf,IAAI,CAACrf,KAAK+R,GAAG,CAACwN,EAAU,GAAKvf,KAAK+R,GAAG,CAACgM,EAAU,IAK1DgC,EAAUE,AAFA7I,CAAI,CAAC,EAAE,CAACxT,KAAK,GAAGC,QAAQ,CAACuT,CAAI,CAAC,EAAE,EAExBxT,KAAK,GAAGK,QAAQ,CAAC6b,EAAMA,CAAAA,EAJpC9f,KAAKqf,IAAI,CAACrf,KAAK+R,GAAG,CAACyN,EAAU,GAAKxf,KAAK+R,GAAG,CAACgM,EAAU,GAIX,GAEtC3G,CAAI,CAAC,EAAE,CAACxT,KAAK,GAAGQ,GAAG,CAAC2b,IGRjC,OAFAG,AAF8BrR,EAAOsR,8BAA8B,GAE7C3M,YAAY,CAACwM,EAAgBvB,GAE5CA,CACT,CACF,E1BunB4C,IAAIlZ,GAAWmW,EAAenX,EAAQuC,EAAQ,EAAG2T,EAAWnhB,AA/IrFwf,EA+I0FsC,WAAW,CAAEvM,MAAM,CAMpH,CACIzE,IACFuR,EAAa3d,IAAI,CAACoM,GAEdwR,EAAeE,WAAW,CACXL,EAAI6C,MAAM,CAACC,eAAe,CAACnU,GACvBqR,EAAI6C,MAAM,CAACC,eAAe,CAAC3C,EAAeE,WAAW,CAAC1R,QAAQ,IAGjFwR,EAAeE,WAAW,CAACljB,GAAG,CAAGA,EACjCgjB,EAAeE,WAAW,CAAC1R,QAAQ,CAAGA,GAGxCwR,EAAeE,WAAW,CAAG,CAC3BljB,IAAAA,EACAwR,SAAAA,CACF,EAGN,IAKA,OAJ4B,IAAxBuR,EAAa7gB,MAAM,EACrB8gB,CAAAA,EAAeE,WAAW,CAAGniB,KAAAA,GAGxBgiB,CACT,EACAyE,SAAUC,EAAAA,IAAAA,CAAKC,gBAAgB,CAACC,MAAM,AACxC,CACF,CACF,IAhsBWrG,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAsBXpY,EAAS0e,OA2ER,CA3ED,WACE,IAAI,CAAC1H,IAAI,CAAC0B,gBAAgB,CAAG,IAAI,CAACA,gBAAgB,CAClD,IAAA,IAAmBiG,EAAAC,EAAoCnhB,EAAvDG,EAAAxE,EAAmB,AAAA,MAAAwlB,CAAAA,EAAA,AAAqB,MAArBD,CAAAA,EAAA,IAAI,CAAC3H,IAAI,CAACsC,WAAW,EAAA,KAAA,EAArBqF,EAAuBE,KAAK,EAA5BD,EAAgC,EAAE,EAAE,CAAA,AAAAnhB,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,CAA5C6f,IAAAA,EAAAA,EAAAA,KAAAA,AACLA,CAAAA,EAAK8H,EAAE,GAAK,IAAI,CAACvkB,MAAM,EACzB,CAAA,IAAI,CAACse,UAAU,CAAG7B,EAEtB,CACA,IAAM6B,EAAa,IAAI,CAACA,UAAU,CAElC,GAAKA,GAML,IAAqBS,IAAAA,EAAyCyF,EAFxDzF,EAAc,IAAI,CAACtC,IAAI,CAACsC,WAAW,CAEpBA,EAAAA,EAAAA,AAAiC,MAAjCA,CAAAA,EAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAa0F,YAAY,CAACC,OAAO,AAAPA,EAA1B3F,EAAqC,EAAE,EAAE,CAAA,AAAAyF,CAAAA,EAAAG,GAAA,EAAA/nB,IAAA,EAAA,CAAnDgoB,IAAAA,EAAAA,EAAAA,KAAAA,AACW,CAAA,iBAAhBA,EAAOjlB,IAAI,EACb,CAAA,IAAI,CAACklB,WAAW,CAAGD,EAEvB,CANA,IAOMC,EAAc,IAAI,CAACA,WAAW,CAGpC,GAAIvG,AAAoB,MAApBA,EAAWvb,IAAI,EAAa8hB,GAGhC,IAAMnG,EAAe,IAAI,CAACtN,OAAO,CAEjC,OAAQsN,GACN,KAAK9iB,eAAakpB,eAAe,CAC/B,IAAI,CAACC,qBAAqB,CAACzG,EAAYuG,EAAYG,SAAS,EAE5D,KACF,MAAKppB,eAAaqpB,cAAc,CAC9B,IAAI,CAACC,sBAAsB,CAAG,CAAA,EAC9B,IAAI,CAACC,kBAAkB,CAAC7G,EAAYuG,EAAYG,SAAS,EAEzD,KACF,MAAKppB,EAAAA,aAAaqZ,GAAG,CACrB,KAAKrZ,EAAAA,aAAa6Z,MAAM,CACxB,KAAK7Z,EAAAA,aAAaoc,QAAQ,CAC1B,KAAKpc,EAAAA,aAAawX,IAAI,CACtB,KAAKxX,EAAAA,aAAa+a,KAAK,CACvB,KAAK/a,EAAAA,aAAa0W,MAAM,CACxB,KAAK1W,EAAAA,aAAa0c,OAAO,CACzB,KAAK1c,EAAAA,aAAa4c,cAAc,CAChC,KAAK5c,EAAAA,aAAagd,UAAU,CAC5B,KAAKhd,EAAAA,aAAa8c,SAAS,CAC3B,KAAK9c,eAAakd,SAAS,CACzB,IAAI,CAACsM,kBAAkB,CAAC9G,EAAYuG,EAAYG,SAAS,CAAEtG,GAE3D,KACF,MAAK9iB,EAAAA,aAAa4W,MAAM,CACxB,KAAK5W,eAAa8W,KAAK,CACrB,IAAI,CAAC0S,kBAAkB,CAAC9G,EAAYuG,EAAYG,SAAS,CAAEtG,EAAc2G,IAEzE,KACF,MAAKzpB,EAAAA,aAAaoS,QAAQ,CAC1B,KAAKpS,EAAAA,aAAa4V,KAAK,CACvB,KAAK5V,eAAa+W,WAAW,CAC3B,IAAI,CAAC2S,wBAAwB,CAAChH,EAAYuG,EAAYG,SAAS,CAAEtG,GAEjE,KACF,MAAK9iB,eAAa+Z,UAAU,CAC1B,IAAI,CAAC2P,wBAAwB,CAAChH,EAAYuG,EAAYG,SAAS,CAAEtG,EAAc2G,IAE/E,KACF,MAAKzpB,eAAa2pB,WAAW,CAC3B,IAAI,CAACC,wBAAwB,CAAClH,EAAYuG,EAAYG,SAAS,CAKnE,CACAjG,AAAAA,MAAAA,GAAAA,EAAa0G,UAAU,CAACC,UAAU,CAAC/jB,IAAI,CAAC,IAAI,CAAC8a,IAAI,GACnD,EAEAhX,EAASkgB,QAER,CAFD,SAAmBC,CAAU,EAC3B,IAAI,CAACC,gBAAgB,EACvB,EAEApgB,EAASqgB,MAeR,CAfD,SAAiB1F,CAAkB,EAEjC,GAAI,IAAI,CAAChP,OAAO,GAAKxV,EAAAA,YAAAA,CAAaqpB,cAAc,EAC1C,IAAI,CAACc,aAAa,EAAI,IAAI,CAACzH,UAAU,CAAE,CAEzC,IAAc0H,EAARC,EAAAA,AAAQ,MAAAD,CAAAA,EAAA,IAAI,CAAC1H,UAAU,CAACkB,YAAY,CAAC0G,EAA7BA,iBAAA,CAAA,EAAA,KAAA,EAAAF,EAAiDG,OAAO,CAChEC,EAASH,EAAMI,SAAS,CACxBnI,EAAkB,IAAI,CAACA,eAAe,CAExCkI,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQ3nB,MAAM,AAAA,EAAG,IACnByf,CAAe,CAAC,EAAE,CAACoI,WAAW,CAAC1G,QAAQ,CAACqG,EAAMnX,MAAM,EACpDnM,EAAoByjB,CAAM,CAAC,EAAE,CAAC9jB,QAAQ,CAACA,QAAQ,CAAE8jB,CAAM,CAAC,EAAE,CAACpjB,QAAQ,CAACujB,cAAc,CAAErI,CAAe,CAAC,EAAE,CAAEriB,EAAsB4Y,QAAQ,EAE1I,CAEJ,EAEAoR,EAAAA,gBAkJC,CAlJDA,WACE,IAAMpJ,EAAO,IAAI,CAACA,IAAI,CAChBiC,EAAe,IAAI,CAACtN,OAAO,CAEjC,GAAIsN,IAAiB9iB,EAAakpB,YAAAA,CAAAA,eAAe,CAK/C,CAAA,GAJI,IAAI,CAACxG,UAAU,EAAI,IAAI,CAACjc,IAAI,GAC9B,IAAI,CAAC2b,GAAG,CAAG,IAAI,CAACM,UAAU,CAACtL,SAAS,CAAC+D,cAAc,GACnD,IAAI,CAAC1U,IAAI,CAACW,QAAQ,CAAC4W,SAAS,CAAC,UAAW,IAAI,CAACoE,GAAG,GAE9C,IAAI,CAAC+H,aAAa,EAAI,IAAI,CAACzH,UAAU,CAAE,CACzC,IAAMkI,EAAW,IAAI,CAAClI,UAAU,CAACkB,YAAY,CAACiH,EAAAA,sBAAAA,EAE1CD,IACF7jB,EAAoB6jB,EAASE,YAAY,CAACrkB,IAAI,CAACC,QAAQ,CAAEkkB,EAASE,YAAY,CAACrkB,IAAI,CAACW,QAAQ,CAAE,IAAI,CAAC+iB,aAAa,CAAElqB,EAAsB8qB,IAAI,EAC5I,IAAI,CAACZ,aAAa,CAACO,WAAW,CAAGE,EAASE,YAAY,CAACrkB,IAAI,CAACikB,WAAW,CAE3E,CAAA,MAEA,GAAI,IAAI,CAAChI,UAAU,CAAE,CACnB,GAAI,IAAI,CAACsI,QAAQ,CAAE,CAGjB,IAAMrI,EAAW,IAAIrV,GACfsV,EAAY,IAAIb,GAChBkJ,EAAa,IAAI3d,GAAQ,EAAG,EAAG,EAGjC,IAAA,IAAI,CAAC6U,eAAe,EAA6BW,IAAiB9iB,EAAAA,YAAAA,CAAa4V,KAAK,CACtF,IAAI,CAAC8M,UAAU,CAACtL,SAAS,CAAC2L,cAAc,CAACJ,EAAUC,GAEnD,IAAI,CAACF,UAAU,CAACtL,SAAS,CAAC2L,cAAc,CAACJ,GAG3C,IAAMK,EAAkB,IAAInL,WAAU,CAAA,CACpC1F,SAAUwQ,EACVM,KAAML,EACNhN,MAAOqV,EACPnT,MAAO,CAAA,CACT,GAGA,GAAIgL,IAAiB9iB,cAAaoS,CAAAA,QAAQ,EAAI0Q,IAAiB9iB,EAAa4V,YAAAA,CAAAA,KAAK,EAAIkN,IAAiB9iB,EAAa+W,YAAAA,CAAAA,WAAW,CAAE,CAI9H,IAAMmM,EAAS3X,EAFGqL,AADHiK,EAAKsC,WAAW,CAAEvM,MAAM,CACdzE,QAAQ,EAAI,IAAI7E,GACzB0V,EAAgB7Q,QAAQ,EAGxC6Q,EAAgBI,WAAW,CAACF,EAAOjW,CAAC,CAAEiW,EAAOje,CAAC,CAAEie,EAAOvW,CAAC,CAC1D,CAEA,IAAI,CAACyV,GAAG,CAAGY,EAAgB7H,cAAc,GAGzC,IAAgC,IAAe7T,EAFzC2O,EAAS+M,EAAgB7Q,QAAQ,CAEP1K,EAAAxE,EAAA,IAAI,CAAC+nB,QAAQ,EAAE,CAAA,AAAA1jB,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,eAAnCyF,EAAM2Q,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CACZoL,EAAAA,KAAAA,CAEJpL,CAAAA,EAAU8T,eAAe,CAAGlI,EAC5B,IAAM7Q,EAAW,IAAI7E,GAErB8J,EAAU2L,cAAc,CAAC5Q,GAEzB,IAAIgZ,EAAmB,IACnBne,EAAQ,EAEZ,GAAI8V,IAAiB9iB,EAAa+Z,YAAAA,CAAAA,UAAU,CAAE,CAE1B,WAAdtT,EAAK1C,IAAI,GACXonB,EAAmBhZ,EAASwT,SAAS,GAAGG,QAAQ,CAAC7P,EAAO0P,SAAS,IACjE3Y,EAAS,IAAI,CAACyI,WAAW,CAACoB,GAAG,CAAC,QAAoCnK,MAAM,EAI1E,IAAM6X,EAAc1D,EAAKsC,WAAW,CAAEqB,QAAQ,CAACC,QAAQ,GACjDC,EAAe7D,EAAKsC,WAAW,CAAEqB,QAAQ,CAACG,SAAS,GAEnD9V,EAAQ,EAAI9G,KAAK4K,GAAG,CAACN,AAJf,GAIqBtK,KAAK6F,EAAE,CAAG,KAD1B,GAGXkB,EAASD,EADA0V,CAAAA,EAAcG,GAEvBG,EAAkBhE,EAAKsC,WAAW,CAAEvM,MAAM,CAACkO,oBAAoB,GAC/DG,EAAU,IAAI,CAAC3Q,IAAI,CAAC2Q,OAAO,EAAI,EACjCmG,EAAAA,KAAAA,EAEJA,EAAWhU,EAAU+D,cAAc,GACnC,IAAMkQ,EAA4B,IAAIxT,WAAU,CAAA,CAC9CC,MAAO,CAAA,CACT,GAEAuT,EAAerG,eAAe,CAACoG,GAC/BC,EAAejI,WAAW,CAAEjR,EAASlF,CAAC,CAAG4B,EAAQ,EAAKoW,EAAU9S,EAASlN,CAAC,CAAG6J,EAAS,EAAKmW,EAAS9S,EAASxF,CAAC,EAC9Gye,EAAWC,EAAelQ,cAAc,GACxCqH,EAAYqC,EAAgBlZ,KAAK,GAAGK,QAAQ,CAACof,GAE7C,IAAME,EAAUtW,EAA6B,CAACnG,EAAQ,EAAGA,EAAQ,EAAG,CAACC,EAAS,EAAGA,EAAS,EAAG,IAlB5E,IAoBjBrI,EAAKW,QAAQ,CAAC4W,SAAS,CAAC,WAAYsN,OAC/B,CACL,GAAIxI,IAAiB9iB,EAAaoS,YAAAA,CAAAA,QAAQ,CAAE,CAC1C,IAAMmZ,EAAY1K,EAAKsC,WAAW,CAAEvM,MAAM,CAACzE,QAAQ,EAAI,CAAC,EAAG,EAAG,EAAE,CAEhE1L,EAAKW,QAAQ,CAAC0W,UAAU,CAAC,cAAeyN,GACxC9kB,EAAKW,QAAQ,CAAC0W,UAAU,CAAC,WAAY7H,EACvC,CACAuM,EAAYpL,EAAU+D,cAAc,EAEtC,CACA1U,EAAKW,QAAQ,CAAC4W,SAAS,CAAC,UAAWwE,GAG/B2I,EAAmBne,IACjBme,EAAmBne,AAAQ,GAARA,EACrBvG,EAAKW,QAAQ,CAAC2W,UAAU,CAAC,UAAW,IAAIhJ,GAAQ,EAAG,IAEnDtO,EAAKW,QAAQ,CAAC2W,UAAU,CAAC,UAAW,IAAIhJ,GAAQ,EAAK/H,EAASme,EAAmB,EAAG,IAG1F,CACF,CACA,GAAI,IAAI,CAAC1kB,IAAI,CAAE,CACb,IAAMkc,EAAW,IAAIrV,GACfsV,EAAY,IAAIb,GAChBc,EAAW,IAAIvV,GAAQ,EAAG,EAAG,GAEnC,IAAI,CAACoV,UAAU,CAACtL,SAAS,CAAC2L,cAAc,CAACJ,EAAUC,GAEnD,IAAMI,EAAkB,IAAInL,WAAU,CAAA,CACpC1F,SAAUwQ,EACVM,KAAML,EACNhN,MAAOiN,EACP/K,MAAO,CAAA,CACT,GAEA,GAAIgL,IAAiB9iB,EAAAA,YAAa8W,CAAAA,KAAK,EAAIgM,IAAiB9iB,EAAAA,YAAAA,CAAa4W,MAAM,CAAE,CAI/E,IAAMsM,EAAS3X,EAFGqL,AADHiK,EAAKsC,WAAW,CAAEvM,MAAM,CACdzE,QAAQ,EAAI,IAAI7E,GAAQ,EAAG,EAAG,GACvC0V,EAAgB7Q,QAAQ,EAGxC6Q,EAAgBI,WAAW,CAACF,EAAOjW,CAAC,CAAEiW,EAAOje,CAAC,CAAEie,EAAOvW,CAAC,CAC1D,CAEA,IAAI,CAACyV,GAAG,CAAGY,EAAgB7H,cAAc,GAEzC,IAAI,CAAC1U,IAAI,CAACW,QAAQ,CAAC4W,SAAS,CAAC,UAAWgF,EAAgB7H,cAAc,GACxE,CACF,CAEJ,EAMAqQ,EAAAA,oBAsBC,CAtBDA,WAEE,IADI7V,EAGJ,OAFqB,IAAI,CAACH,OAAO,EAG/B,KAAKxV,EAAAA,aAAakpB,eAAe,CACjC,KAAKlpB,EAAAA,aAAaqpB,cAAc,CAChC,KAAKrpB,EAAAA,aAAa0c,OAAO,CACzB,KAAK1c,EAAAA,aAAa4c,cAAc,CAChC,KAAK5c,EAAAA,aAAa8c,SAAS,CAC3B,KAAK9c,EAAAA,aAAagd,UAAU,CAC5B,KAAKhd,eAAakd,SAAS,CACzBvH,EAASqM,GAAUH,KAAK,CAExB,KACF,SACElM,EAASqM,GAAUnX,SAAS,AAGhC,CAEA,OAAO8K,CACT,EAMA8V,EAAAA,cA4BC,CA5BDA,WACE,IAAI9V,EAAS,CAAA,EAGb,OAFqB,IAAI,CAACH,OAAO,EAG/B,KAAKxV,eAAaqZ,GAAG,CACnB1D,EAAS,CAAE9G,MAAO,EAAGC,OAAQ,EAAGC,MAAO,CAAE,EAEzC,KACF,MAAK/O,eAAa6Z,MAAM,CACtBlE,EAAS,CAAEjJ,OAAQ,CAAE,EAErB,KACF,MAAK1M,eAAaoc,QAAQ,CAI1B,KAAKpc,eAAawX,IAAI,CAHpB7B,EAAS,CAAEjJ,OAAQ,EAAGoC,OAAQ,CAAE,EAEhC,KAKF,SACE6G,EAAS,CAAA,CAGb,CAEA,OAAOA,CACT,EAEA4T,EAAAA,kBAwBC,CAxBDA,SAAoB1I,CAAa,CAAE6K,CAAmB,EAGpD,IAAMC,EAAWC,AAFM/K,EAAK+C,YAAY,CAAC0G,EAAAA,iBAAAA,EAETC,OAAO,CAACE,SAAS,CAAC,EAAE,CAC9CphB,EAAAA,MAASwX,CAAAA,EAAAA,EAAKsC,WAAW,AAAA,SAAhBtC,EAAkB2D,QAAQ,CAACnb,MAAM,CAIhD,GAFAwiB,EAAYxiB,WAAAA,CAAAA,GAERsiB,EAAU,CACZ,IAAI,CAACjJ,UAAU,CAAG7B,EAClB,IAAI,CAACyB,eAAe,CAAG,EAAE,CAEzB,IARazB,EHxP8CtW,EAoBtD9D,EAnBHC,EASuBD,EAArBoX,EAAQD,EACVkO,EAaA1kB,EGwOI2kB,EAAalN,EAAAA,IAAAA,CAAKvc,MAAM,CAC5B+G,EACA,CACE3C,SAAUilB,EAASjlB,QAAQ,CAACA,QAAQ,CACpCU,SAAUukB,EAASvkB,QAAQ,CAACujB,cAAc,CAC1C7L,SAAU,GACZ,GACIrY,EAAO,IAAI,CAAC0jB,aAAa,EHvQ4B5f,EGuQe,IAAI,CAACA,KAAK,CHtQlF7D,EAAW,IAAIyC,EGsQqCE,EHpQxD,CACE3C,SAAUD,AGmQoDslB,EHnQ/CvkB,aAAa,GAC5BoC,KAAMgB,YAAUiX,KAAK,CACrBrY,MAAO,CACLpB,KAAM,IAAII,YAAY,EACxB,CACF,GACMqV,EAAqBpX,CAAAA,EAAAA,AG6PqCslB,EH7PhC3kB,QAAQ,CAACsW,MAAM,CAACsO,UAAU,EAApDnO,MAAQD,CAAAA,EAAanX,EAAbmX,QAAAA,CAKhBkO,CAJMA,EAAkB7lB,EAAA,CAAA,EAAKQ,AG4PqCslB,EH5PhC3kB,QAAQ,CAAC6kB,KAAK,GAIhCvO,MAAM,CAAG,CACvBG,OAAAA,EACAD,SAAAA,EACAsO,OALgB,CAAC,CAAC,iBAAkB,EAAE,CAAC,CAMvCvO,OAAQ,CAAA,EACR5Z,KAAO0C,AAAAA,CAAAA,AAAS,MAATA,CAAAA,EAAAA,AGmPyDslB,EHnPpDhoB,IAAI,AAAA,EAAT0C,EAAa,YAAA,EAAgB,aACpC0lB,YAAa9iB,AAA+B,IAA/BA,AGkP2CA,EHlPpC+iB,aAAa,CAACC,KAAK,CAASC,aAAYC,CAAAA,KAAK,CAAGD,EAAAA,WAAAA,CAAYE,KAAK,AACvF,EAIAplB,CAFMA,EAAWiW,EAAAA,QAAAA,CAAS/a,MAAM,CG+O0B+G,EH/OjByiB,IAEhCrU,SAAS,CAAG,CAAA,EACrBrQ,EAASqlB,UAAU,CAAC,gBAAiB,IAAInmB,EAAQiE,CAAK,CAAC,EAAE,CAAEA,CAAK,CAAC,EAAE,CAAEA,CAAK,CAAC,EAAE,CAAE,IAExExD,EAAoBN,AG0OuCslB,EH1OlCrlB,QAAQ,CAAED,AG0OwBslB,EH1OnB3kB,QAAQ,CAAEyX,EAAAA,IAAAA,CAAKvc,MAAM,CG0OV+G,EHxOxD,CACE3C,SAAAA,EACAU,SAAAA,EACA0X,SAAU,IACV/a,KAAM+nB,EAAgBpO,MAAM,CAAC3Z,IAAI,AACnC,GAAA,IGqOE,IAAI,CAACue,eAAe,CAACvc,IAAI,CAACU,GAC1BilB,EAAY3lB,IAAI,CAACU,EACnB,CACF,EAEA0iB,EAAAA,qBAYC,CAZDA,SAAuBtI,CAAa,CAAE6K,CAAmB,EACvD,IACelD,EADT5G,EAAQf,EAAcoL,KAAK,CAAC1B,OAAO,CAAC3I,KAAK,CACzCvY,EAAAA,AAAS,MAAAmf,CAAAA,EAAA,IAAI,CAAC3H,IAAI,CAACsC,WAAW,AAAXA,EAAV,KAAA,EAAAqF,EAAuBhE,QAAQ,CAACnb,MAAM,CAKrD,GAHAwiB,EAAYxiB,WAAAA,CAAAA,GAEZ,IAAI,CAACqZ,UAAU,CAAG7B,EACde,GAASA,EAAMza,IAAI,CAAE,CACvB,IAAMV,EAAO,IAAI,CAACA,IAAI,CAAG+a,GAAoBnY,EAAQuY,EAAO,CAAErX,MAAO,IAAI,CAACA,KAAK,AAAC,GAEhFmhB,EAAY3lB,IAAI,CAACU,EACnB,CACF,EAOAmjB,EAAAA,wBAmBC,CAnBDA,SAA0B/I,CAAa,CAAE6K,CAAmB,EAC1D,IAQegB,EARTA,EAAY,IAAI,CAAC7L,IAAI,CACrBe,EAAQ,CACZA,MAAO,MACP/S,MAAO,IAAI,CAACyF,IAAI,CAACzF,KAAK,CACtBC,OAAQ,IAAI,CAACwF,IAAI,CAACxF,MAAM,CACxBC,MAAO,IAAI,CAACuF,IAAI,CAACvF,KAAK,CACtBkH,OAAQ,IAAI,CAAC3B,IAAI,CAAC2B,MAAM,AAC1B,EACM5M,EAAAA,MAASqjB,CAAAA,EAAAA,EAAUvJ,WAAW,AAAA,SAArBuJ,EAAuBlI,QAAQ,CAACnb,MAAM,CAKrD,GAHAwiB,EAAYxiB,WAAAA,CAAAA,GAEZ,IAAI,CAACqZ,UAAU,CAAG7B,EACde,EAAO,CACT,IAAMnb,EAAO,IAAI,CAACA,IAAI,CAAG+a,GAAoBnY,EAAQuY,EAAO,CAAErX,MAAO,IAAI,CAACA,KAAK,CAAEkN,UAAW,IAAI,CAACA,SAAS,AAAC,GAE3GiU,EAAY3lB,IAAI,CAACU,EACnB,CACF,EAQA+iB,EAAAA,kBAgBC,CAhBDA,SAAoB3I,CAAa,CAAE6K,CAAmB,CAAElW,CAAqB,CAAEiU,CAAmC,EAChH,IAOeiD,EAPTA,EAAY,IAAI,CAAC7L,IAAI,CACrBvX,EAAU,CACdgL,KAAM,IAAI,CAACA,IAAI,CACf/J,MAAO,IAAI,CAACA,KAAK,CACjBI,WAAY,IAAI,CAACA,UAAU,CAC3B8M,UAAW,IAAI,CAACA,SAAS,AAC3B,EACMpO,EAAAA,MAASqjB,CAAAA,EAAAA,EAAUvJ,WAAW,AAAA,SAArBuJ,EAAuBlI,QAAQ,CAACnb,MAAM,CAErDwiB,EAAYxiB,WAAAA,CAAAA,GAEZ,IAAM5C,EAAO,IAAI,CAACA,IAAI,CAAG8O,EAAsBlM,EAAQmM,EAAS,IAAI,CAACC,WAAW,CAAEgU,EAAcngB,EAEhG,CAAA,IAAI,CAACoZ,UAAU,CAAG7B,EAClB6K,EAAY3lB,IAAI,CAACU,EACnB,EASAijB,EAAAA,wBAgBC,CAhBDA,SAA0B7I,CAAa,CAAE6K,CAAmB,CAAElW,CAAqB,CAAEiU,CAAmC,EACtH,IAAMiD,EAAY,IAAI,CAAC7L,IAAI,CACrBvX,EAAU,CACdgL,KAAM,IAAI,CAACA,IAAI,CACf3J,WAAY,IAAI,CAACA,UAAU,AAC7B,EAEMtB,EAAAA,MAASqjB,CAAAA,EAAAA,EAAUvJ,WAAW,AAAA,SAArBuJ,EAAuBlI,QAAQ,CAACnb,MAAM,CAErDwiB,EAAYxiB,WAAAA,CAAAA,GAEZ,IAAI,CAAC2hB,QAAQ,CAAGzV,EAAsBlM,EAAQmM,EAAS,IAAI,CAACC,WAAW,CAAEgU,EAAcngB,GACvF,IAAA,IALeojB,EAK0BplB,EAAzCG,EAAAxE,EAAmB,IAAI,CAAC+nB,QAAQ,CAACtjB,IAAI,IAAI,CAAA,AAAAJ,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,CAA9ByF,IAAAA,EAAAA,EAAAA,KAAAA,CACTilB,EAAY3lB,IAAI,CAACU,EACnB,CACA,IAAI,CAACic,UAAU,CAAG7B,CACpB,EAEAhX,EAAS8iB,QAsBR,CAtBD,SAAmBvkB,CAAS,EAC1B8Z,EAAA7f,SAAA,CAAMsqB,QAAD,CAAUvkB,IAAAA,CAAAA,IAAAA,CAAAA,GACf,IAAMyY,EAAO,IAAI,CAACA,IAAI,AAEtBA,CAAAA,EAAK+L,QAAQ,CAAG,IAChB,IAGIxkB,EAAAA,EAAKkB,OAAO,CAFdlF,EAEEgE,EAFFhE,MAAAA,CAAQoR,EAENpN,EAFMoN,OAAAA,CAAS7K,EAEfvC,EAFeuC,UAAAA,CAAY2J,EAE3BlM,EAF2BkM,IAAAA,CAAMmD,EAEjCrP,EAFiCqP,SAAAA,CAAAA,EAEjCrP,EADFmC,KAAAA,CAAAA,EAAQsiB,AAAA,KAAA,IAAAA,EAAA,CAAC,IAAK,IAAK,IAAI,CAAAA,CAGzB,CAAA,IAAI,CAACzoB,MAAM,CAAGA,EACd,IAAI,CAACoR,OAAO,CAAGA,EACf,IAAI,CAAC7K,UAAU,CAAGA,GAAc,IAAI,CAAC6gB,oBAAoB,GACzD,IAAI,CAAClX,IAAI,CAAGA,GAAQ,IAAI,CAACmX,cAAc,GACvC,IAAI,CAAChU,SAAS,CAAGA,EAEjB,IAAOjT,EAAW+F,CAAAA,CAAAA,EAAAA,CAAR/E,EAAQ+E,CAAAA,CAAAA,EAAAA,CAALoE,EAAKpE,CAAAA,CAAAA,EAAAA,AAElB,CAAA,IAAI,CAACA,KAAK,CAAG,CAAC/F,EAAI,IAAKgB,EAAI,IAAKmJ,EAAI,IAAI,CACpCvG,GACFyY,CAAAA,EAAKzJ,SAAS,CAAG,IAAIS,EAAAA,SAAAA,CAAUzP,EAAKgP,SAAS,CAAA,CAEjD,EAndW6K,GAAuBqI,mBAisBnC,KAtrBEwC,WAAAA,GAXU7K,CAAAA,EAAAA,cAAAA,CAAAA,SAAAA,CAAAA,kBAAAA,KAAAA,GAAAA,EAAAA,cAAAA,CAAAA,EAAAA,CADZ8K,EAAAA,YAAa,CAAA,kBACD9K,CAAAA,EAAAA,cAAAA,4BAmsBD7hB,EAAAA,EAAAA,eAAAA,EAAAA,CAAAA,iBAAAA,CAAAA,CAAAA,CAAAA,2C4BjtBZ,IAAM4sB,GAAuB,eACvBC,GAAsB,cACtBC,GAAuB,eACvBC,GAA4C,IAAIpiB,IAEzC0e,GAAqC,IAAI1e,IAE/CqiB,GAAK,SAALC,CAAA,EAAMD,SAAAA,iDACXhE,EAAAA,SAAAA,CAAoB,EAAE,CACtBkE,EAAAA,YAAAA,CAAuB,EAAE,GAChBC,KAAQ,CAAA,OAHNH,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAeXvjB,EAAS2jB,wBASR,CATD,SAAmCrK,CAAwB,CAAEsK,CAAY,EACvE,IAAMpkB,EAAS8Z,EAAYqB,QAAQ,CAACnb,MAAM,CAE1CogB,GAAaiE,KAAK,GAElBP,GAAWlN,OAAO,CAAC,SAAC/U,CAAOnH,CAAAA,CAAAA,MlBLvBkW,EkBMFwP,GAAard,GAAG,CAACrI,ElBNLkb,EAAAA,OAAAA,CAAQ3c,MAAM,CkBMW+G,ElBNF,CAAE6B,MkBMQA,ClBNF,GkBO7C,GACAiiB,GAAWO,KAAK,EAClB,EAEA7jB,EAAS8jB,kBAiBR,CAjBD,SAA6BxK,CAAwB,EAInD,IAAK,IAHCuF,EAAQvF,EAAYuF,KAAK,CACzBkF,EAA0C,CAAA,EAEvC9qB,EAAI,EAAGA,EAAI4lB,EAAM7lB,MAAM,CAAEC,IAAK,CACrC,IAAM+d,EAAO6H,CAAK,CAAC5lB,EAAE,CACf6gB,EAAiB9C,EAAK+C,YAAY,CAAC3B,EAAAA,cAAAA,EAErC0B,IACGiK,CAAS,CAACjK,EAAevf,MAAM,CAAC,EACnCwpB,CAAAA,CAAS,CAACjK,EAAevf,MAAM,CAAC,CAAG,EAAE,EAEvCwpB,CAAS,CAACjK,EAAevf,MAAM,CAAC,CAAC2B,IAAI,CAAC8a,GAE1C,CACAsC,EAAY0G,UAAU,CAACgE,WAAW,CAAGD,EACrCzK,EAAY0G,UAAU,CAACC,UAAU,CAAG,EAAE,AACxC,EA8DAjgB,EAASikB,wBAYR,CAZD,SAAmC3K,CAAwB,CAAEtC,CAAa,aACxE,GAAIA,AhC9GwB,UgC8GxBA,EAAK1Z,IAAI,CACX,IAAI,CAAC4mB,eAAe,CAAC5K,EAAatC,OAC7B,CACL,IAAMmN,EAA8B7K,EAAY0G,UAAU,CAACgE,WAAW,CAAChN,EAAK8H,EAAE,CAAC,CAE3EqF,GAAoBA,EAAiBnrB,MAAM,CAAG,GAChDmrB,EAAiB/N,OAAO,CAACgO,SAAAA,CAAAA,EACvBxkB,EAAKskB,eAAe,CAAC5K,EAAa8K,EACpC,EAEJ,CACF,EAEAF,EAAAA,eAiDC,CAjDDA,SAAiB5K,CAAwB,CAAE8K,CAAqB,aACxDC,EAAYD,EAAarK,YAAY,CAAC3B,kBAAgBxb,IAAI,CAWhE,GATIynB,GAAa,CAACA,EAAUC,WAAW,GACrCD,EAAUvnB,OAAO,GAEbunB,EAAUnqB,IAAI,GAAK7D,cAAaid,CAAAA,SAAS,CAACtZ,QAAQ,IAAMqqB,AAAmB,QAAnBA,EAAUnqB,IAAI,CACxE,IAAI,CAACqqB,kBAAkB,CAACjL,EAAYkL,WAAW,EAAEC,UAAU,CAACJ,GAE5D,IAAI,CAACK,mBAAmB,CAACpL,EAAYkL,WAAW,EAAEC,UAAU,CAACJ,IAG7DD,EAAarK,YAAY,CAAC3B,EAAAA,cAAAA,EAAgB+I,QAAQ,CACpD,IAAA,IAA0E1jB,EAA1EG,EAAAxE,EAAqBgrB,EAAarK,YAAY,CAAC3B,EAAAA,cAAAA,EAAgB+I,QAAQ,EAAG,CAAA,AAAA1jB,CAAAA,EAAAG,GAAA,EAAAzG,IAAA,EAAA,CAA9DyF,IAAAA,EAAAA,AAAAA,EAAAA,KAAAA,AAAAA,CAAAA,EAAAA,AACLA,CAAAA,EAAK0nB,WAAW,GACnB1nB,EAAKE,OAAO,GACRF,AAAc,gBAAdA,EAAK1C,IAAI,EAAsB0C,AAAc,UAAdA,EAAK1C,IAAI,EAAgB0C,AAAc,aAAdA,EAAK1C,IAAI,CACnE,IAAI,CAACyqB,mBAAmB,CAACrL,EAAYkL,WAAW,EAAEC,UAAU,CAAC7nB,GAE7D,IAAI,CAAC8nB,mBAAmB,CAACpL,EAAYkL,WAAW,EAAEC,UAAU,CAAC7nB,GAGnE,CAGF,IAAMkd,EAAiBsK,EAAarK,YAAY,CAAC3B,EAAAA,cAAAA,EAEjD,GAAI0B,GAAkBA,EAAerB,eAAe,CAACzf,MAAM,CAAG,EAC5D8gB,EAAerB,eAAe,CAACrC,OAAO,CAACxZ,SAAAA,CAAAA,EAChCA,EAAK0nB,WAAW,GACnB3nB,EAAqBC,GACrBgD,EAAK8kB,mBAAmB,CAACpL,EAAYkL,WAAW,EAAEC,UAAU,CAAC7nB,GAEjE,OACK,CACL,IAAM0jB,EAAgB8D,EAAarK,YAAY,CAAC3B,kBAAgBkI,aAAa,CAEzEA,GAAiB,CAACA,EAAcgE,WAAW,GAC7C3nB,EAAqB2jB,GACrB,IAAI,CAACoE,mBAAmB,CAACpL,EAAYkL,WAAW,EAAEC,UAAU,CAACnE,GAEjE,CAEA,IAAMxnB,EAAiBwgB,EAAY0G,UAAU,CAACC,UAAU,CAClDtgB,EAAQ7G,EAAI8rB,OAAO,CAACR,GAEtBzkB,EAAQ,IACV7G,EAAI+rB,MAAM,CAACllB,EAAO,EAEtB,EAEAK,EAAS8kB,kBAwBR,CAxBD,SAA6BxL,CAAwB,CAAEkL,CAAwB,aAuB7E,OAtBA,IAAI,CAACjF,SAAS,CAACnJ,OAAO,CAACxZ,SAAAA,CAAAA,EACjBA,EAAK1C,IAAI,GAAK7D,cAAaid,CAAAA,SAAS,CAACtZ,QAAQ,IAAM4C,AAAc,QAAdA,EAAK1C,IAAI,CAC9D0F,EAAK2kB,kBAAkB,CAACC,GAAaO,OAAO,CAACnoB,GACpCA,AAAc,gBAAdA,EAAK1C,IAAI,EAAsB0C,AAAc,UAAdA,EAAK1C,IAAI,EAAgB0C,AAAc,aAAdA,EAAK1C,IAAI,CAC1E0F,EAAK+kB,mBAAmB,CAACH,GAAaO,OAAO,CAACnoB,GAE9CgD,EAAK8kB,mBAAmB,CAACF,GAAaO,OAAO,CAACnoB,EAElD,GACA,IAAI,CAAC6mB,YAAY,CAACrN,OAAO,CAACxZ,SAAAA,CAAAA,EACpBA,EAAK1C,IAAI,GAAK7D,cAAaid,CAAAA,SAAS,CAACtZ,QAAQ,IAAM4C,AAAc,QAAdA,EAAK1C,IAAI,CAC9D0F,EAAK2kB,kBAAkB,CAACC,GAAaC,UAAU,CAAC7nB,GACvCA,AAAc,gBAAdA,EAAK1C,IAAI,EAAsB0C,AAAc,UAAdA,EAAK1C,IAAI,EAAgB0C,AAAc,aAAdA,EAAK1C,IAAI,CAC1E0F,EAAK+kB,mBAAmB,CAACH,GAAaC,UAAU,CAAC7nB,GAEjDgD,EAAK8kB,mBAAmB,CAACF,GAAaC,UAAU,CAAC7nB,GAEnDooB,EAAAA,UAAW,CAAAplB,EAAK2f,SAAS,CAAE3iB,EAC7B,GACA,IAAI,CAAC6mB,YAAY,CAACzqB,MAAM,CAAG,EAGpB,CAAA,CACT,EAEA2rB,EAAAA,mBAeC,CAfDA,SAAqBM,CAAqB,EACxC,IAAIC,EAAKD,EAASE,YAAY,CAACC,IAAI,CAACC,SAAAA,CAAAA,EAAcA,OAAAA,EAAWnrB,IAAI,GAAKmpB,KAatE,OAXK6B,IACHA,EAAK,IAAII,EAAAA,UAAAA,CAAWL,EAAStK,QAAQ,CAAE,CACrCzgB,KAAMmpB,GACNpO,SAAUsQ,EAAgCA,6BAAAA,CAAAA,EAAAA,6BAAAA,CAC1CC,YAAa,CACXC,YAAaC,oBAAkB7B,KAAK,AACtC,CACF,GACAoB,EAASU,aAAa,CAACT,IAGlBA,CACT,EAEAR,EAAAA,mBAYC,CAZDA,SAAqBO,CAAqB,EACxC,IAAIC,EAAKD,EAASE,YAAY,CAACC,IAAI,CAACC,SAAAA,CAAAA,EAAcA,OAAAA,EAAWnrB,IAAI,GAAKipB,KAUtE,OARK+B,IACHA,EAAK,IAAII,EAAAA,UAAAA,CAAWL,EAAStK,QAAQ,CAAE,CACrCzgB,KAAMipB,GACNlO,SAAUsQ,EAAgCA,6BAAA,CAAA,CAC5C,GACAN,EAASU,aAAa,CAACT,IAGlBA,CACT,EAEAX,EAAAA,kBAYC,CAZDA,SAAoBU,CAAqB,EACvC,IAAIC,EAAKD,EAASE,YAAY,CAACC,IAAI,CAACC,SAAAA,CAAAA,EAAcA,OAAAA,EAAWnrB,IAAI,GAAKkpB,KAUtE,OARK8B,IACHA,EAAK,IAAII,EAAAA,UAAAA,CAAWL,EAAStK,QAAQ,CAAE,CACrCzgB,KAAMkpB,GACNnO,SAAU2Q,EAA4BA,yBAAA,CAAA,CACxC,GACAX,EAASU,aAAa,CAACT,IAGlBA,CACT,EA/OW3B,EAKWsC,eAQrB,CARD,SAAuCjC,CAAY,SAAnDtsB,EAAA,qBAEgB4C,EAAMqE,EAAAA,EAAAA,mDADhB+kB,GAAAA,CAAAA,CAAAA,GAAW7Y,IAAI,GAAKxJ,EAAYwJ,IAAI,AAAJA,EAAhC6Y,MAAAA,MACyBriB,EAAAA,EAAAA,gDACJ,OADX/G,EAAMqE,WAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAChB+kB,EAAAA,GAAW/gB,GAAG,IAACrI,GAAM,GAAMiH,AlBdnC,SAAmCC,CAAgB,EAA7BD,OAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YkBcyB5C,WAAvC+kB,EAAAA,KAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,CAAqBwC,EAAAtqB,IAAA,0CAIzB,MAAA,GAAO,CAAA,KACT,MAbW+nB,GAA0BC,gBAiPtC,EC3PDuC,EAAAA,cAAAA,CAAe,eAAgBxC,GAAmByC,EAAAA,OAAAA,EAarCC,IAAAA,GAAU,QAEvBC,EAAAA,MAAAA,CAAOlvB,IAAI,CAAC,gCAAgCivB,GAAQ,KAEhDA,KAAYE,EAAQF,OAAO,EAC7BG,QAAQlvB,KAAK,CACX,uDACA"}