poly-extrude 0.5.0 → 0.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":"poly-extrude.js","sources":["../node_modules/.pnpm/earcut@2.2.4/node_modules/earcut/src/earcut.js","../src/util.js","../src/polygon.js","../src/polyline.js","../src/cylinder.js","../src/math/Vector3.js","../src/path/PathPoint.js","../src/math/Matrix4.js","../src/math/Curve.js","../src/math/Interpolations.js","../src/math/QuadraticBezierCurve3.js","../src/path/PathPointList.js","../src/path.js"],"sourcesContent":["'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/**\r\n * https://github.com/Turfjs/turf/blob/master/packages/turf-boolean-clockwise/index.ts\r\n * @param {*} ring\r\n * @returns\r\n */\r\nexport function isClockwise(ring) {\r\n let sum = 0;\r\n let i = 1;\r\n let prev;\r\n let cur;\r\n const len = ring.length;\r\n\r\n while (i < len) {\r\n prev = cur || ring[0];\r\n cur = ring[i];\r\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\r\n i++;\r\n }\r\n return sum > 0;\r\n}\r\n\r\nfunction v3Sub(out, v1, v2) {\r\n out[0] = v1[0] - v2[0];\r\n out[1] = v1[1] - v2[1];\r\n out[2] = v1[2] - v2[2];\r\n return out;\r\n}\r\n\r\nfunction v3Normalize(out, v) {\r\n const x = v[0];\r\n const y = v[1];\r\n const z = v[2];\r\n const d = Math.sqrt(x * x + y * y + z * z) || 1;\r\n out[0] = x / d;\r\n out[1] = y / d;\r\n out[2] = z / d;\r\n return out;\r\n}\r\n\r\nfunction v3Cross(out, v1, v2) {\r\n const ax = v1[0], ay = v1[1], az = v1[2],\r\n bx = v2[0], by = v2[1], bz = v2[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\nexport function generateNormal(indices, position) {\r\n\r\n function v3Set(p, a, b, c) {\r\n p[0] = a; p[1] = b; p[2] = c;\r\n }\r\n\r\n const p1 = [];\r\n const p2 = [];\r\n const p3 = [];\r\n\r\n const v21 = [];\r\n const v32 = [];\r\n\r\n const n = [];\r\n\r\n const len = indices.length;\r\n const normals = new Float32Array(position.length);\r\n let f = 0;\r\n while (f < len) {\r\n\r\n // const i1 = indices[f++] * 3;\r\n // const i2 = indices[f++] * 3;\r\n // const i3 = indices[f++] * 3;\r\n // const i1 = indices[f];\r\n // const i2 = indices[f + 1];\r\n // const i3 = indices[f + 2];\r\n const a = indices[f], b = indices[f + 1], c = indices[f + 2];\r\n const i1 = a * 3, i2 = b * 3, i3 = c * 3;\r\n\r\n v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);\r\n v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);\r\n v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);\r\n\r\n v3Sub(v32, p3, p2);\r\n v3Sub(v21, p1, p2);\r\n v3Cross(n, v32, v21);\r\n // Already be weighted by the triangle area\r\n for (let i = 0; i < 3; i++) {\r\n normals[i1 + i] += n[i];\r\n normals[i2 + i] += n[i];\r\n normals[i3 + i] += n[i];\r\n }\r\n f += 3;\r\n }\r\n\r\n let i = 0;\r\n const l = normals.length;\r\n while (i < l) {\r\n v3Set(n, normals[i], normals[i + 1], normals[i + 2]);\r\n v3Normalize(n, n);\r\n normals[i] = n[0] || 0;\r\n normals[i + 1] = n[1] || 0;\r\n normals[i + 2] = n[2] || 0;\r\n i += 3;\r\n }\r\n\r\n return normals;\r\n}\r\n\r\nexport function merge(results) {\r\n if (results.length === 1) {\r\n const result = {\r\n position: results[0].position,\r\n normal: results[0].normal,\r\n uv: results[0].uv,\r\n indices: results[0].indices,\r\n results\r\n };\r\n return result;\r\n }\r\n let plen = 0, ilen = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices } = results[i];\r\n plen += position.length;\r\n ilen += indices.length;\r\n }\r\n const result = {\r\n position: new Float32Array(plen),\r\n normal: new Float32Array(plen),\r\n uv: new Float32Array(plen / 3 * 2),\r\n indices: new Uint32Array(ilen),\r\n results\r\n };\r\n let pOffset = 0, pCount = 0, iIdx = 0, uvOffset = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices, normal, uv } = results[i];\r\n result.position.set(position, pOffset);\r\n result.normal.set(normal, pOffset);\r\n result.uv.set(uv, uvOffset);\r\n let j = 0;\r\n const len1 = indices.length;\r\n while (j < len1) {\r\n const pIndex = indices[j] + pCount;\r\n result.indices[iIdx] = pIndex;\r\n iIdx++;\r\n j++;\r\n }\r\n uvOffset += uv.length;\r\n pOffset += position.length;\r\n pCount += position.length / 3;\r\n }\r\n return result;\r\n}\r\n\r\nexport function radToDeg(rad) {\r\n return rad * 180 / Math.PI;\r\n}\r\n\r\nexport function degToRad(angle) {\r\n return angle / 180 * Math.PI;\r\n}\r\n\r\n// https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736\r\nexport function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {\r\n\r\n const idx1 = indexA * 3, idx2 = indexB * 3, idx3 = indexC * 3, idx4 = indexD * 3;\r\n const a_x = vertices[idx1];\r\n const a_y = vertices[idx1 + 1];\r\n const a_z = vertices[idx1 + 2];\r\n const b_x = vertices[idx2];\r\n const b_y = vertices[idx2 + 1];\r\n const b_z = vertices[idx2 + 2];\r\n const c_x = vertices[idx3];\r\n const c_y = vertices[idx3 + 1];\r\n const c_z = vertices[idx3 + 2];\r\n const d_x = vertices[idx4];\r\n const d_y = vertices[idx4 + 1];\r\n const d_z = vertices[idx4 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {\r\n\r\n uvs.push(a_x, 1 - a_z);\r\n uvs.push(b_x, 1 - b_z);\r\n uvs.push(c_x, 1 - c_z);\r\n uvs.push(d_x, 1 - d_z);\r\n } else {\r\n uvs.push(a_y, 1 - a_z);\r\n uvs.push(b_y, 1 - b_z);\r\n uvs.push(c_y, 1 - c_z);\r\n uvs.push(d_y, 1 - d_z);\r\n }\r\n\r\n}\r\n","\r\nimport earcut from 'earcut';\r\nimport { generateNormal, generateSideWallUV, isClockwise, merge } from './util';\r\n\r\nexport function extrudePolygons(polygons, options) {\r\n options = Object.assign({}, { depth: 2 }, options);\r\n const results = polygons.map(polygon => {\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n validateRing(ring);\r\n if (i === 0) {\r\n if (!isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n } else if (isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n if (isClosedRing(ring)) {\r\n ring.splice(ring.length - 1, 1);\r\n }\r\n }\r\n const result = flatVertices(polygon, options);\r\n result.polygon = polygon;\r\n const triangles = earcut(result.flatVertices, result.holes, 2);\r\n generateTopAndBottom(result, triangles);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.polygons = polygons;\r\n return result;\r\n\r\n}\r\n\r\nfunction generateTopAndBottom(result, triangles) {\r\n const index = [];\r\n const { count } = result;\r\n for (let i = 0, len = triangles.length; i < len; i += 3) {\r\n // top\r\n const a = triangles[i], b = triangles[i + 1], c = triangles[i + 2];\r\n index[i] = a;\r\n index[i + 1] = b;\r\n index[i + 2] = c;\r\n // bottom\r\n const idx = len + i;\r\n const a1 = count + a, b1 = count + b, c1 = count + c;\r\n index[idx] = a1;\r\n index[idx + 1] = b1;\r\n index[idx + 2] = c1;\r\n }\r\n result.index = index;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, polygon, uvs } = result;\r\n const z = options.depth;\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n let v2 = ring[j + 1];\r\n if (j === len1 - 1) {\r\n v2 = ring[0];\r\n }\r\n const idx = points.length / 3;\r\n const x1 = v1[0], y1 = v1[1], x2 = v2[0], y2 = v2[1];\r\n points.push(x1, y1, z, x2, y2, z, x1, y1, 0, x2, y2, 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // points.push(p3, p4, p1, p2);\r\n index.push(a, c, b, c, d, b);\r\n // index.push(c, d, b);\r\n\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n j++;\r\n }\r\n }\r\n}\r\n\r\nfunction calPolygonPointsCount(polygon) {\r\n let count = 0;\r\n let i = 0;\r\n const len = polygon.length;\r\n while (i < len) {\r\n count += (polygon[i].length);\r\n i++;\r\n }\r\n return count;\r\n}\r\n\r\nfunction flatVertices(polygon, options) {\r\n const count = calPolygonPointsCount(polygon);\r\n const len = polygon.length;\r\n const holes = [], flatVertices = new Float32Array(count * 2), points = [], uvs = [];\r\n const pOffset = count * 3, uOffset = count * 2;\r\n const z = options.depth;\r\n\r\n let idx0 = 0, idx1 = 0, idx2 = 0;\r\n for (let i = 0; i < len; i++) {\r\n const ring = polygon[i];\r\n if (i > 0) {\r\n holes.push(idx0 / 2);\r\n }\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const c = ring[j];\r\n const x = c[0], y = c[1];\r\n\r\n flatVertices[idx0++] = x;\r\n flatVertices[idx0++] = y;\r\n\r\n // top vertices\r\n points[idx1] = x;\r\n points[idx1 + 1] = y;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom vertices\r\n points[pOffset + idx1] = x;\r\n points[pOffset + idx1 + 1] = y;\r\n points[pOffset + idx1 + 2] = 0;\r\n\r\n uvs[idx2] = x;\r\n uvs[idx2 + 1] = y;\r\n\r\n uvs[uOffset + idx2] = x;\r\n uvs[uOffset + idx2 + 1] = y;\r\n\r\n idx1 += 3;\r\n idx2 += 2;\r\n j++;\r\n }\r\n }\r\n return {\r\n flatVertices,\r\n holes,\r\n points,\r\n count,\r\n uvs\r\n };\r\n\r\n}\r\n\r\nfunction validateRing(ring) {\r\n if (!isClosedRing(ring)) {\r\n ring.push(ring[0]);\r\n }\r\n}\r\n\r\nfunction isClosedRing(ring) {\r\n const len = ring.length;\r\n const [x1, y1] = ring[0], [x2, y2] = ring[len - 1];\r\n return (x1 === x2 && y1 === y2);\r\n}\r\n","import { degToRad, generateNormal, generateSideWallUV, merge, radToDeg } from './util';\r\n\r\nexport function extrudePolylines(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1 }, options);\r\n const results = lines.map(line => {\r\n const result = expandLine(line, options);\r\n result.line = line;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nexport function extrudeSlopes(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1, side: 'left', sideDepth: 0 }, options);\r\n const { depth, side, sideDepth } = options;\r\n const results = lines.map(line => {\r\n const tempResult = expandLine(line, options);\r\n tempResult.line = line;\r\n const { leftPoints, rightPoints } = tempResult;\r\n const result = { line };\r\n let depths;\r\n for (let i = 0, len = line.length; i < len; i++) {\r\n line[i][2] = line[i][2] || 0;\r\n }\r\n if (side === 'left') {\r\n result.leftPoints = leftPoints;\r\n result.rightPoints = line;\r\n depths = [sideDepth, depth];\r\n } else {\r\n result.leftPoints = line;\r\n result.rightPoints = rightPoints;\r\n depths = [depth, sideDepth];\r\n }\r\n result.depths = depths;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nfunction generateTopAndBottom(result, options) {\r\n const z = options.depth;\r\n const depths = result.depths;\r\n let lz = z, rz = z;\r\n if (depths) {\r\n lz = depths[0];\r\n rz = depths[1];\r\n }\r\n const points = [], index = [], uvs = [];\r\n const { leftPoints, rightPoints } = result;\r\n let i = 0, len = leftPoints.length;\r\n while (i < len) {\r\n // top left\r\n const idx0 = i * 3;\r\n const [x1, y1, z1] = leftPoints[i];\r\n points[idx0] = x1;\r\n points[idx0 + 1] = y1;\r\n points[idx0 + 2] = lz + z1;\r\n\r\n // top right\r\n const [x2, y2, z2] = rightPoints[i];\r\n const idx1 = len * 3 + idx0;\r\n points[idx1] = x2;\r\n points[idx1 + 1] = y2;\r\n points[idx1 + 2] = rz + z2;\r\n\r\n // bottom left\r\n const idx2 = (len * 2) * 3 + idx0;\r\n points[idx2] = x1;\r\n points[idx2 + 1] = y1;\r\n points[idx2 + 2] = z1;\r\n\r\n // bottom right\r\n const idx3 = (len * 2) * 3 + len * 3 + idx0;\r\n points[idx3] = x2;\r\n points[idx3 + 1] = y2;\r\n points[idx3 + 2] = z2;\r\n\r\n i++;\r\n }\r\n i = 0;\r\n len = points.length;\r\n while (i < len) {\r\n const x = points[i], y = points[i + 1];\r\n uvs.push(x, y);\r\n i += 3;\r\n }\r\n i = 0;\r\n len = leftPoints.length;\r\n while (i < len - 1) {\r\n // top\r\n // left1 left2 right1,right2\r\n const a1 = i, b1 = i + 1, c1 = a1 + len, d1 = b1 + len;\r\n index.push(a1, c1, b1);\r\n index.push(c1, d1, b1);\r\n\r\n // bottom\r\n // left1 left2 right1,right2\r\n const len2 = len * 2;\r\n const a2 = i + len2, b2 = a2 + 1, c2 = a2 + len, d2 = b2 + len;\r\n index.push(a2, c2, b2);\r\n index.push(c2, d2, b2);\r\n i++;\r\n }\r\n result.index = index;\r\n result.points = points;\r\n result.uvs = uvs;\r\n if (depths) {\r\n len = leftPoints.length;\r\n i = 0;\r\n while (i < len) {\r\n leftPoints[i].depth = lz;\r\n rightPoints[i].depth = rz;\r\n i++;\r\n }\r\n }\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, leftPoints, rightPoints, uvs } = result;\r\n const z = options.depth;\r\n const rings = [leftPoints, rightPoints];\r\n const depthsEnable = result.depths;\r\n\r\n function addOneSideIndex(v1, v2) {\r\n const idx = points.length / 3;\r\n points.push(v1[0], v1[1], (depthsEnable ? v1.depth : z) + v1[2], v2[0], v2[1], (depthsEnable ? v2.depth : z) + v2[2], v1[0], v1[1], v1[2], v2[0], v2[1], v2[2]);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n index.push(a, c, b, c, d, b);\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n }\r\n\r\n for (let i = 0, len = rings.length; i < len; i++) {\r\n let ring = rings[i];\r\n if (i > 0) {\r\n ring = ring.map(p => {\r\n return p;\r\n });\r\n ring = ring.reverse();\r\n }\r\n let j = 0;\r\n const len1 = ring.length - 1;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n const v2 = ring[j + 1];\r\n addOneSideIndex(v1, v2);\r\n j++;\r\n }\r\n }\r\n const len = leftPoints.length;\r\n const vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];\r\n for (let i = 0; i < vs.length; i += 2) {\r\n const v1 = vs[i], v2 = vs[i + 1];\r\n addOneSideIndex(v1, v2);\r\n }\r\n}\r\n\r\nconst TEMPV1 = { x: 0, y: 0 }, TEMPV2 = { x: 0, y: 0 };\r\n\r\nexport function expandLine(line, options) {\r\n // let preAngle = 0;\r\n const radius = options.lineWidth / 2;\r\n const points = [], leftPoints = [], rightPoints = [];\r\n const len = line.length;\r\n let i = 0;\r\n while (i < len) {\r\n let p1 = line[i],\r\n p2 = line[i + 1];\r\n const currentp = line[i];\r\n // last vertex\r\n if (i === len - 1) {\r\n p1 = line[len - 2];\r\n p2 = line[len - 1];\r\n }\r\n const dy = p2[1] - p1[1],\r\n dx = p2[0] - p1[0];\r\n let rAngle = 0;\r\n const rad = Math.atan(dy / dx);\r\n const angle = radToDeg(rad);\r\n // preAngle = angle;\r\n if (i === 0 || i === len - 1) {\r\n rAngle = angle;\r\n rAngle -= 90;\r\n } else {\r\n // 至少3个顶点才会触发\r\n const p0 = line[i - 1];\r\n TEMPV1.x = p0[0] - p1[0];\r\n TEMPV1.y = p0[1] - p1[1];\r\n TEMPV2.x = p2[0] - p1[0];\r\n TEMPV2.y = p2[1] - p1[1];\r\n const vAngle = getAngle(TEMPV1, TEMPV2);\r\n rAngle = angle - vAngle / 2;\r\n }\r\n const rRad = degToRad(rAngle);\r\n const p3 = currentp;\r\n const x = Math.cos(rRad) + p3[0], y = Math.sin(rRad) + p3[1];\r\n const p4 = [x, y];\r\n const [line1, line2] = translateLine(p1, p2, radius);\r\n let op1 = lineIntersection(line1[0], line1[1], p3, p4);\r\n let op2 = lineIntersection(line2[0], line2[1], p3, p4);\r\n // 平行,回头路\r\n if (!op1 || !op2) {\r\n const len1 = points.length;\r\n const point1 = points[len1 - 2];\r\n const point2 = points[len1 - 1];\r\n if (!point1 || !point2) {\r\n continue;\r\n }\r\n op1 = [point1[0], point1[1]];\r\n op2 = [point2[0], point2[1]];\r\n }\r\n op1[2] = currentp[2] || 0;\r\n op2[2] = currentp[2] || 0;\r\n // const [op1, op2] = calOffsetPoint(rRad, radius, p1);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n i++;\r\n }\r\n\r\n return { offsetPoints: points, leftPoints, rightPoints };\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nfunction calOffsetPoint(rad, radius, p) {\r\n const [x, y] = p;\r\n const z = p[2] || 0;\r\n const x1 = Math.cos(rad) * radius, y1 = Math.sin(rad) * radius;\r\n const p1 = [x + x1, y + y1, z];\r\n const rad1 = rad += Math.PI;\r\n const x2 = Math.cos(rad1) * radius, y2 = Math.sin(rad1) * radius;\r\n const p2 = [x + x2, y + y2, z];\r\n return [p1, p2];\r\n}\r\n\r\nconst getAngle = ({ x: x1, y: y1 }, { x: x2, y: y2 }) => {\r\n const dot = x1 * x2 + y1 * y2;\r\n const det = x1 * y2 - y1 * x2;\r\n const angle = Math.atan2(det, dot) / Math.PI * 180;\r\n return (angle + 360) % 360;\r\n};\r\n\r\nexport function leftOnLine(p, p1, p2) {\r\n const [x1, y1] = p1;\r\n const [x2, y2] = p2;\r\n const [x, y] = p;\r\n return (y1 - y2) * x + (x2 - x1) * y + x1 * y2 - x2 * y1 > 0;\r\n}\r\n\r\n/**\r\n * 平移线\r\n * @param {*} p1\r\n * @param {*} p2\r\n * @param {*} distance\r\n * @returns\r\n */\r\nfunction translateLine(p1, p2, distance) {\r\n const dy = p2[1] - p1[1], dx = p2[0] - p1[0];\r\n const rad = Math.atan2(dy, dx);\r\n const rad1 = rad + Math.PI / 2;\r\n let offsetX = Math.cos(rad1) * distance, offsetY = Math.sin(rad1) * distance;\r\n const tp1 = [p1[0] + offsetX, p1[1] + offsetY];\r\n const tp2 = [p2[0] + offsetX, p2[1] + offsetY];\r\n const rad2 = rad - Math.PI / 2;\r\n offsetX = Math.cos(rad2) * distance;\r\n offsetY = Math.sin(rad2) * distance;\r\n const tp3 = [p1[0] + offsetX, p1[1] + offsetY];\r\n const tp4 = [p2[0] + offsetX, p2[1] + offsetY];\r\n return [[tp1, tp2], [tp3, tp4]];\r\n}\r\n\r\n/**\r\n * 直线交点\r\n * @param {*} p1\r\n * @param {*} p2\r\n * @param {*} p3\r\n * @param {*} p4\r\n * @returns\r\n */\r\nfunction lineIntersection(p1, p2, p3, p4) {\r\n const dx1 = p2[0] - p1[0], dy1 = p2[1] - p1[1];\r\n const dx2 = p4[0] - p3[0], dy2 = p4[1] - p3[1];\r\n if (dx1 === 0 && dx2 === 0) {\r\n return null;\r\n }\r\n if (dy1 === 0 && dy2 === 0) {\r\n return null;\r\n }\r\n\r\n const k1 = dy1 / dx1;\r\n const k2 = dy2 / dx2;\r\n\r\n const b1 = p1[1] - k1 * p1[0];\r\n const b2 = p3[1] - k2 * p3[0];\r\n\r\n let x, y;\r\n\r\n if (dx1 === 0) {\r\n x = p1[0];\r\n y = k2 * x + b2;\r\n } else if (dx2 === 0) {\r\n x = p3[0];\r\n y = k1 * x + b1;\r\n } else if (dy1 === 0) {\r\n y = p1[1];\r\n x = (y - b2) / k2;\r\n } else if (dy2 === 0) {\r\n y = p3[1];\r\n x = (y - b1) / k1;\r\n } else {\r\n x = (b2 - b1) / (k1 - k2);\r\n y = k1 * x + b1;\r\n }\r\n return [x, y];\r\n}\r\n","import { generateNormal } from './util';\r\n\r\nexport function cylinder(point, options = {}) {\r\n options = Object.assign({}, { radius: 1, height: 2, radialSegments: 6 }, options);\r\n const radialSegments = Math.round(Math.max(4, options.radialSegments));\r\n const { radius, height } = options;\r\n const aRad = 360 / radialSegments / 360 * Math.PI * 2;\r\n const circlePointsLen = (radialSegments + 1);\r\n const points = new Float32Array(circlePointsLen * 3 * 2);\r\n const [centerx, centery] = point;\r\n let idx = 0, uIdx = 0;\r\n const offset = circlePointsLen * 3, uOffset = circlePointsLen * 2;\r\n const indices = [], uvs = [];\r\n for (let i = -1; i < radialSegments; i++) {\r\n const rad = aRad * i;\r\n const x = Math.cos(rad) * radius + centerx, y = Math.sin(rad) * radius + centery;\r\n // bottom vertices\r\n points[idx] = x;\r\n points[idx + 1] = y;\r\n points[idx + 2] = 0;\r\n\r\n // top vertices\r\n points[idx + offset] = x;\r\n points[idx + 1 + offset] = y;\r\n points[idx + 2 + offset] = height;\r\n\r\n let u = 0, v = 0;\r\n u = 0.5 + x / radius / 2;\r\n v = 0.5 + y / radius / 2;\r\n uvs[uIdx] = u;\r\n uvs[uIdx + 1] = v;\r\n uvs[uIdx + uOffset] = u;\r\n uvs[uIdx + 1 + uOffset] = v;\r\n\r\n idx += 3;\r\n uIdx += 2;\r\n if (i > 1) {\r\n // bottom indices\r\n indices.push(0, i - 1, i);\r\n }\r\n }\r\n idx -= 3;\r\n points[idx] = points[0];\r\n points[idx + 1] = points[1];\r\n points[idx + 2] = points[2];\r\n const pointsLen = points.length;\r\n points[pointsLen - 3] = points[0];\r\n points[pointsLen - 2] = points[1];\r\n points[pointsLen - 1] = height;\r\n\r\n const indicesLen = indices.length;\r\n // top indices\r\n for (let i = 0; i < indicesLen; i++) {\r\n const index = indices[i];\r\n indices.push(index + circlePointsLen);\r\n }\r\n\r\n const sidePoints = new Float32Array((circlePointsLen * 3 * 2 - 6) * 2);\r\n let pIndex = -1;\r\n idx = circlePointsLen * 2;\r\n uIdx = 0;\r\n for (let i = 0, len = points.length / 2; i < len - 3; i += 3) {\r\n const x1 = points[i], y1 = points[i + 1], x2 = points[i + 3], y2 = points[i + 4];\r\n sidePoints[++pIndex] = x1;\r\n sidePoints[++pIndex] = y1;\r\n sidePoints[++pIndex] = height;\r\n sidePoints[++pIndex] = x2;\r\n sidePoints[++pIndex] = y2;\r\n sidePoints[++pIndex] = height;\r\n sidePoints[++pIndex] = x1;\r\n sidePoints[++pIndex] = y1;\r\n sidePoints[++pIndex] = 0;\r\n sidePoints[++pIndex] = x2;\r\n sidePoints[++pIndex] = y2;\r\n sidePoints[++pIndex] = 0;\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // indices.push(a, c, b, c, d, b);\r\n indices.push(c, a, d, a, b, d);\r\n idx += 4;\r\n const u1 = uIdx / circlePointsLen, u2 = (uIdx + 1) / circlePointsLen;\r\n uvs.push(u1, height / radius / 2, u2, height / radius / 2, u1, 0, u2, 0);\r\n uIdx++;\r\n }\r\n const position = new Float32Array(points.length + sidePoints.length);\r\n position.set(points, 0);\r\n position.set(sidePoints, points.length);\r\n const normal = generateNormal(indices, position);\r\n return { points, indices: new Uint32Array(indices), position, normal, uv: new Float32Array(uvs) };\r\n}\r\n","// import * as MathUtils from './MathUtils.js';\r\n// code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Vector3.js\r\n\r\nclass Vector3 {\r\n\r\n constructor(x = 0, y = 0, z = 0) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n\r\n }\r\n\r\n set(x, y, z) {\r\n\r\n if (z === undefined) z = this.z; // sprite.scale.set(x,y)\r\n\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // setScalar(scalar) {\r\n\r\n // this.x = scalar;\r\n // this.y = scalar;\r\n // this.z = scalar;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setX(x) {\r\n\r\n // this.x = x;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setY(y) {\r\n\r\n // this.y = y;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setZ(z) {\r\n\r\n // this.z = z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setComponent(index, value) {\r\n\r\n // switch (index) {\r\n\r\n // case 0: this.x = value; break;\r\n // case 1: this.y = value; break;\r\n // case 2: this.z = value; break;\r\n // default: throw new Error('index is out of range: ' + index);\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // getComponent(index) {\r\n\r\n // switch (index) {\r\n\r\n // case 0: return this.x;\r\n // case 1: return this.y;\r\n // case 2: return this.z;\r\n // default: throw new Error('index is out of range: ' + index);\r\n\r\n // }\r\n\r\n // }\r\n\r\n clone() {\r\n\r\n return new this.constructor(this.x, this.y, this.z);\r\n\r\n }\r\n\r\n copy(v) {\r\n\r\n this.x = v.x;\r\n this.y = v.y;\r\n this.z = v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n add(v) {\r\n\r\n this.x += v.x;\r\n this.y += v.y;\r\n this.z += v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addScalar(s) {\r\n\r\n this.x += s;\r\n this.y += s;\r\n this.z += s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addVectors(a, b) {\r\n\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n this.z = a.z + b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addScaledVector(v, s) {\r\n\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n this.z += v.z * s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n sub(v) {\r\n\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n this.z -= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n subScalar(s) {\r\n\r\n this.x -= s;\r\n this.y -= s;\r\n this.z -= s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n subVectors(a, b) {\r\n\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n this.z = a.z - b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiply(v) {\r\n\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n this.z *= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyScalar(scalar) {\r\n\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n this.z *= scalar;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyVectors(a, b) {\r\n\r\n this.x = a.x * b.x;\r\n this.y = a.y * b.y;\r\n this.z = a.z * b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // applyEuler(euler) {\r\n\r\n // return this.applyQuaternion(_quaternion.setFromEuler(euler));\r\n\r\n // }\r\n\r\n // applyAxisAngle(axis, angle) {\r\n\r\n // return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\r\n\r\n // }\r\n\r\n // applyMatrix3(m) {\r\n\r\n // const x = this.x, y = this.y, z = this.z;\r\n // const e = m.elements;\r\n\r\n // this.x = e[0] * x + e[3] * y + e[6] * z;\r\n // this.y = e[1] * x + e[4] * y + e[7] * z;\r\n // this.z = e[2] * x + e[5] * y + e[8] * z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // applyNormalMatrix(m) {\r\n\r\n // return this.applyMatrix3(m).normalize();\r\n\r\n // }\r\n\r\n applyMatrix4(m) {\r\n\r\n const x = this.x, y = this.y, z = this.z;\r\n const e = m.elements;\r\n\r\n const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\r\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\r\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // applyQuaternion(q) {\r\n\r\n // const x = this.x, y = this.y, z = this.z;\r\n // const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\r\n\r\n // // calculate quat * vector\r\n\r\n // const ix = qw * x + qy * z - qz * y;\r\n // const iy = qw * y + qz * x - qx * z;\r\n // const iz = qw * z + qx * y - qy * x;\r\n // const iw = - qx * x - qy * y - qz * z;\r\n\r\n // // calculate result * inverse quat\r\n\r\n // this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\r\n // this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\r\n // this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // project(camera) {\r\n\r\n // return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\r\n\r\n // }\r\n\r\n // unproject(camera) {\r\n\r\n // return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\r\n\r\n // }\r\n\r\n // transformDirection(m) {\r\n\r\n // // input: THREE.Matrix4 affine matrix\r\n // // vector interpreted as a direction\r\n\r\n // const x = this.x, y = this.y, z = this.z;\r\n // const e = m.elements;\r\n\r\n // this.x = e[0] * x + e[4] * y + e[8] * z;\r\n // this.y = e[1] * x + e[5] * y + e[9] * z;\r\n // this.z = e[2] * x + e[6] * y + e[10] * z;\r\n\r\n // return this.normalize();\r\n\r\n // }\r\n\r\n divide(v) {\r\n\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n this.z /= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n divideScalar(scalar) {\r\n\r\n return this.multiplyScalar(1 / scalar);\r\n\r\n }\r\n\r\n min(v) {\r\n\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n this.z = Math.min(this.z, v.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n max(v) {\r\n\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n this.z = Math.max(this.z, v.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n clamp(min, max) {\r\n\r\n // assumes min < max, componentwise\r\n\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n this.z = Math.max(min.z, Math.min(max.z, this.z));\r\n\r\n return this;\r\n\r\n }\r\n\r\n clampScalar(minVal, maxVal) {\r\n\r\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\r\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\r\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\r\n\r\n return this;\r\n\r\n }\r\n\r\n clampLength(min, max) {\r\n\r\n const length = this.length();\r\n\r\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\r\n\r\n }\r\n\r\n // floor() {\r\n\r\n // this.x = Math.floor(this.x);\r\n // this.y = Math.floor(this.y);\r\n // this.z = Math.floor(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // ceil() {\r\n\r\n // this.x = Math.ceil(this.x);\r\n // this.y = Math.ceil(this.y);\r\n // this.z = Math.ceil(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // round() {\r\n\r\n // this.x = Math.round(this.x);\r\n // this.y = Math.round(this.y);\r\n // this.z = Math.round(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // roundToZero() {\r\n\r\n // this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n // this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n // this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // negate() {\r\n\r\n // this.x = -this.x;\r\n // this.y = -this.y;\r\n // this.z = -this.z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n dot(v) {\r\n\r\n return this.x * v.x + this.y * v.y + this.z * v.z;\r\n\r\n }\r\n\r\n // TODO lengthSquared?\r\n\r\n lengthSq() {\r\n\r\n return this.x * this.x + this.y * this.y + this.z * this.z;\r\n\r\n }\r\n\r\n length() {\r\n\r\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\r\n\r\n }\r\n\r\n // manhattanLength() {\r\n\r\n // return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\r\n\r\n // }\r\n\r\n normalize() {\r\n\r\n return this.divideScalar(this.length() || 1);\r\n\r\n }\r\n\r\n setLength(length) {\r\n\r\n return this.normalize().multiplyScalar(length);\r\n\r\n }\r\n\r\n lerp(v, alpha) {\r\n\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n this.z += (v.z - this.z) * alpha;\r\n\r\n return this;\r\n\r\n }\r\n\r\n lerpVectors(v1, v2, alpha) {\r\n\r\n this.x = v1.x + (v2.x - v1.x) * alpha;\r\n this.y = v1.y + (v2.y - v1.y) * alpha;\r\n this.z = v1.z + (v2.z - v1.z) * alpha;\r\n\r\n return this;\r\n\r\n }\r\n\r\n cross(v) {\r\n\r\n return this.crossVectors(this, v);\r\n\r\n }\r\n\r\n crossVectors(a, b) {\r\n\r\n const ax = a.x, ay = a.y, az = a.z;\r\n const bx = b.x, by = b.y, bz = b.z;\r\n\r\n this.x = ay * bz - az * by;\r\n this.y = az * bx - ax * bz;\r\n this.z = ax * by - ay * bx;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // projectOnVector(v) {\r\n\r\n // const denominator = v.lengthSq();\r\n\r\n // if (denominator === 0) return this.set(0, 0, 0);\r\n\r\n // const scalar = v.dot(this) / denominator;\r\n\r\n // return this.copy(v).multiplyScalar(scalar);\r\n\r\n // }\r\n\r\n // projectOnPlane(planeNormal) {\r\n\r\n // _vector.copy(this).projectOnVector(planeNormal);\r\n\r\n // return this.sub(_vector);\r\n\r\n // }\r\n\r\n // reflect(normal) {\r\n\r\n // // reflect incident vector off plane orthogonal to normal\r\n // // normal is assumed to have unit length\r\n\r\n // return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\r\n\r\n // }\r\n\r\n // angleTo(v) {\r\n\r\n // const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\r\n\r\n // if (denominator === 0) return Math.PI / 2;\r\n\r\n // const theta = this.dot(v) / denominator;\r\n\r\n // // clamp, to handle numerical problems\r\n\r\n // return Math.acos(MathUtils.clamp(theta, -1, 1));\r\n\r\n // }\r\n\r\n distanceTo(v) {\r\n\r\n return Math.sqrt(this.distanceToSquared(v));\r\n\r\n }\r\n\r\n // distanceToSquared(v) {\r\n\r\n // const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\r\n\r\n // return dx * dx + dy * dy + dz * dz;\r\n\r\n // }\r\n\r\n // manhattanDistanceTo(v) {\r\n\r\n // return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\r\n\r\n // }\r\n\r\n // setFromSpherical(s) {\r\n\r\n // return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\r\n\r\n // }\r\n\r\n // setFromSphericalCoords(radius, phi, theta) {\r\n\r\n // const sinPhiRadius = Math.sin(phi) * radius;\r\n\r\n // this.x = sinPhiRadius * Math.sin(theta);\r\n // this.y = Math.cos(phi) * radius;\r\n // this.z = sinPhiRadius * Math.cos(theta);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromCylindrical(c) {\r\n\r\n // return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\r\n\r\n // }\r\n\r\n // setFromCylindricalCoords(radius, theta, y) {\r\n\r\n // this.x = radius * Math.sin(theta);\r\n // this.y = y;\r\n // this.z = radius * Math.cos(theta);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixPosition(m) {\r\n\r\n // const e = m.elements;\r\n\r\n // this.x = e[12];\r\n // this.y = e[13];\r\n // this.z = e[14];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixScale(m) {\r\n\r\n // const sx = this.setFromMatrixColumn(m, 0).length();\r\n // const sy = this.setFromMatrixColumn(m, 1).length();\r\n // const sz = this.setFromMatrixColumn(m, 2).length();\r\n\r\n // this.x = sx;\r\n // this.y = sy;\r\n // this.z = sz;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixColumn(m, index) {\r\n\r\n // return this.fromArray(m.elements, index * 4);\r\n\r\n // }\r\n\r\n // setFromMatrix3Column(m, index) {\r\n\r\n // return this.fromArray(m.elements, index * 3);\r\n\r\n // }\r\n\r\n // setFromEuler(e) {\r\n\r\n // this.x = e._x;\r\n // this.y = e._y;\r\n // this.z = e._z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromColor(c) {\r\n\r\n // this.x = c.r;\r\n // this.y = c.g;\r\n // this.z = c.b;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n equals(v) {\r\n\r\n return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z));\r\n\r\n }\r\n\r\n fromArray(array, offset = 0) {\r\n\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n this.z = array[offset + 2];\r\n\r\n return this;\r\n\r\n }\r\n\r\n // toArray(array = [], offset = 0) {\r\n\r\n // array[offset] = this.x;\r\n // array[offset + 1] = this.y;\r\n // array[offset + 2] = this.z;\r\n\r\n // return array;\r\n\r\n // }\r\n\r\n // fromBufferAttribute(attribute, index) {\r\n\r\n // this.x = attribute.getX(index);\r\n // this.y = attribute.getY(index);\r\n // this.z = attribute.getZ(index);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n random() {\r\n\r\n this.x = Math.random();\r\n this.y = Math.random();\r\n this.z = Math.random();\r\n\r\n return this;\r\n\r\n }\r\n\r\n // randomDirection() {\r\n\r\n // // Derived from https://mathworld.wolfram.com/SpherePointPicking.html\r\n\r\n // const u = (Math.random() - 0.5) * 2;\r\n // const t = Math.random() * Math.PI * 2;\r\n // const f = Math.sqrt(1 - u ** 2);\r\n\r\n // this.x = f * Math.cos(t);\r\n // this.y = f * Math.sin(t);\r\n // this.z = u;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { Vector3 };\r\n","/* eslint-disable no-tabs */\r\n\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathPoint.js\r\n\r\nimport { Vector3 } from '../math/Vector3';\r\n\r\n/**\r\n * PathPoint\r\n */\r\nclass PathPoint {\r\n\tconstructor() {\r\n\t\tthis.pos = new Vector3();\r\n\t\tthis.dir = new Vector3();\r\n\t\tthis.right = new Vector3();\r\n\t\tthis.up = new Vector3(); // normal\r\n\t\tthis.dist = 0; // distance from start\r\n\t\tthis.widthScale = 1; // for corner\r\n\t\tthis.sharp = false; // marks as sharp corner\r\n\t}\r\n\r\n\tlerpPathPoints(p1, p2, alpha) {\r\n\t\tthis.pos.lerpVectors(p1.pos, p2.pos, alpha);\r\n\t\tthis.dir.lerpVectors(p1.dir, p2.dir, alpha);\r\n\t\tthis.up.lerpVectors(p1.up, p2.up, alpha);\r\n\t\tthis.right.lerpVectors(p1.right, p2.right, alpha);\r\n\t\tthis.dist = (p2.dist - p1.dist) * alpha + p1.dist;\r\n\t\tthis.widthScale = (p2.widthScale - p1.widthScale) * alpha + p1.widthScale;\r\n\t}\r\n\r\n\tcopy(source) {\r\n\t\tthis.pos.copy(source.pos);\r\n\t\tthis.dir.copy(source.dir);\r\n\t\tthis.up.copy(source.up);\r\n\t\tthis.right.copy(source.right);\r\n\t\tthis.dist = source.dist;\r\n\t\tthis.widthScale = source.widthScale;\r\n\t}\r\n\r\n}\r\n\r\nexport { PathPoint };\r\n","// code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Matrix4.js\r\n// import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';\r\n// import { Vector3 } from './Vector3.js';\r\n\r\nclass Matrix4 {\r\n\r\n constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n\r\n this.elements = [\r\n\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n 0, 0, 0, 1\r\n\r\n ];\r\n\r\n if (n11 !== undefined) {\r\n\r\n this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44);\r\n\r\n }\r\n\r\n }\r\n\r\n set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n\r\n const te = this.elements;\r\n\r\n te[0] = n11; te[4] = n12; te[8] = n13; te[12] = n14;\r\n te[1] = n21; te[5] = n22; te[9] = n23; te[13] = n24;\r\n te[2] = n31; te[6] = n32; te[10] = n33; te[14] = n34;\r\n te[3] = n41; te[7] = n42; te[11] = n43; te[15] = n44;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // identity() {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, 0,\r\n // 0, 1, 0, 0,\r\n // 0, 0, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // clone() {\r\n\r\n // return new Matrix4().fromArray(this.elements);\r\n\r\n // }\r\n\r\n // copy(m) {\r\n\r\n // const te = this.elements;\r\n // const me = m.elements;\r\n\r\n // te[0] = me[0]; te[1] = me[1]; te[2] = me[2]; te[3] = me[3];\r\n // te[4] = me[4]; te[5] = me[5]; te[6] = me[6]; te[7] = me[7];\r\n // te[8] = me[8]; te[9] = me[9]; te[10] = me[10]; te[11] = me[11];\r\n // te[12] = me[12]; te[13] = me[13]; te[14] = me[14]; te[15] = me[15];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // copyPosition(m) {\r\n\r\n // const te = this.elements, me = m.elements;\r\n\r\n // te[12] = me[12];\r\n // te[13] = me[13];\r\n // te[14] = me[14];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrix3(m) {\r\n\r\n // const me = m.elements;\r\n\r\n // this.set(\r\n\r\n // me[0], me[3], me[6], 0,\r\n // me[1], me[4], me[7], 0,\r\n // me[2], me[5], me[8], 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // extractBasis(xAxis, yAxis, zAxis) {\r\n\r\n // xAxis.setFromMatrixColumn(this, 0);\r\n // yAxis.setFromMatrixColumn(this, 1);\r\n // zAxis.setFromMatrixColumn(this, 2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeBasis(xAxis, yAxis, zAxis) {\r\n\r\n // this.set(\r\n // xAxis.x, yAxis.x, zAxis.x, 0,\r\n // xAxis.y, yAxis.y, zAxis.y, 0,\r\n // xAxis.z, yAxis.z, zAxis.z, 0,\r\n // 0, 0, 0, 1\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // extractRotation(m) {\r\n\r\n // // this method does not support reflection matrices\r\n\r\n // const te = this.elements;\r\n // const me = m.elements;\r\n\r\n // const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();\r\n // const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();\r\n // const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();\r\n\r\n // te[0] = me[0] * scaleX;\r\n // te[1] = me[1] * scaleX;\r\n // te[2] = me[2] * scaleX;\r\n // te[3] = 0;\r\n\r\n // te[4] = me[4] * scaleY;\r\n // te[5] = me[5] * scaleY;\r\n // te[6] = me[6] * scaleY;\r\n // te[7] = 0;\r\n\r\n // te[8] = me[8] * scaleZ;\r\n // te[9] = me[9] * scaleZ;\r\n // te[10] = me[10] * scaleZ;\r\n // te[11] = 0;\r\n\r\n // te[12] = 0;\r\n // te[13] = 0;\r\n // te[14] = 0;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationFromEuler(euler) {\r\n\r\n // const te = this.elements;\r\n\r\n // const x = euler.x, y = euler.y, z = euler.z;\r\n // const a = Math.cos(x), b = Math.sin(x);\r\n // const c = Math.cos(y), d = Math.sin(y);\r\n // const e = Math.cos(z), f = Math.sin(z);\r\n\r\n // if (euler.order === 'XYZ') {\r\n\r\n // const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n // te[0] = c * e;\r\n // te[4] = -c * f;\r\n // te[8] = d;\r\n\r\n // te[1] = af + be * d;\r\n // te[5] = ae - bf * d;\r\n // te[9] = -b * c;\r\n\r\n // te[2] = bf - ae * d;\r\n // te[6] = be + af * d;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'YXZ') {\r\n\r\n // const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n // te[0] = ce + df * b;\r\n // te[4] = de * b - cf;\r\n // te[8] = a * d;\r\n\r\n // te[1] = a * f;\r\n // te[5] = a * e;\r\n // te[9] = -b;\r\n\r\n // te[2] = cf * b - de;\r\n // te[6] = df + ce * b;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'ZXY') {\r\n\r\n // const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n // te[0] = ce - df * b;\r\n // te[4] = -a * f;\r\n // te[8] = de + cf * b;\r\n\r\n // te[1] = cf + de * b;\r\n // te[5] = a * e;\r\n // te[9] = df - ce * b;\r\n\r\n // te[2] = -a * d;\r\n // te[6] = b;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'ZYX') {\r\n\r\n // const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n // te[0] = c * e;\r\n // te[4] = be * d - af;\r\n // te[8] = ae * d + bf;\r\n\r\n // te[1] = c * f;\r\n // te[5] = bf * d + ae;\r\n // te[9] = af * d - be;\r\n\r\n // te[2] = -d;\r\n // te[6] = b * c;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'YZX') {\r\n\r\n // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n // te[0] = c * e;\r\n // te[4] = bd - ac * f;\r\n // te[8] = bc * f + ad;\r\n\r\n // te[1] = f;\r\n // te[5] = a * e;\r\n // te[9] = -b * e;\r\n\r\n // te[2] = -d * e;\r\n // te[6] = ad * f + bc;\r\n // te[10] = ac - bd * f;\r\n\r\n // } else if (euler.order === 'XZY') {\r\n\r\n // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n // te[0] = c * e;\r\n // te[4] = -f;\r\n // te[8] = d * e;\r\n\r\n // te[1] = ac * f + bd;\r\n // te[5] = a * e;\r\n // te[9] = ad * f - bc;\r\n\r\n // te[2] = bc * f - ad;\r\n // te[6] = b * e;\r\n // te[10] = bd * f + ac;\r\n\r\n // }\r\n\r\n // // bottom row\r\n // te[3] = 0;\r\n // te[7] = 0;\r\n // te[11] = 0;\r\n\r\n // // last column\r\n // te[12] = 0;\r\n // te[13] = 0;\r\n // te[14] = 0;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationFromQuaternion(q) {\r\n\r\n // return this.compose(_zero, q, _one);\r\n\r\n // }\r\n\r\n // lookAt(eye, target, up) {\r\n\r\n // const te = this.elements;\r\n\r\n // _z.subVectors(eye, target);\r\n\r\n // if (_z.lengthSq() === 0) {\r\n\r\n // // eye and target are in the same position\r\n\r\n // _z.z = 1;\r\n\r\n // }\r\n\r\n // _z.normalize();\r\n // _x.crossVectors(up, _z);\r\n\r\n // if (_x.lengthSq() === 0) {\r\n\r\n // // up and z are parallel\r\n\r\n // if (Math.abs(up.z) === 1) {\r\n\r\n // _z.x += 0.0001;\r\n\r\n // } else {\r\n\r\n // _z.z += 0.0001;\r\n\r\n // }\r\n\r\n // _z.normalize();\r\n // _x.crossVectors(up, _z);\r\n\r\n // }\r\n\r\n // _x.normalize();\r\n // _y.crossVectors(_z, _x);\r\n\r\n // te[0] = _x.x; te[4] = _y.x; te[8] = _z.x;\r\n // te[1] = _x.y; te[5] = _y.y; te[9] = _z.y;\r\n // te[2] = _x.z; te[6] = _y.z; te[10] = _z.z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n multiply(m) {\r\n\r\n return this.multiplyMatrices(this, m);\r\n\r\n }\r\n\r\n // premultiply(m) {\r\n\r\n // return this.multiplyMatrices(m, this);\r\n\r\n // }\r\n\r\n // multiplyMatrices(a, b) {\r\n\r\n // const ae = a.elements;\r\n // const be = b.elements;\r\n // const te = this.elements;\r\n\r\n // const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\r\n // const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\r\n // const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\r\n // const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\r\n\r\n // const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\r\n // const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\r\n // const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\r\n // const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\r\n\r\n // te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n // te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n // te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n // te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n\r\n // te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n // te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n // te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n // te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n\r\n // te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n // te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n // te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n // te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n\r\n // te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n // te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n // te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n // te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // multiplyScalar(s) {\r\n\r\n // const te = this.elements;\r\n\r\n // te[0] *= s; te[4] *= s; te[8] *= s; te[12] *= s;\r\n // te[1] *= s; te[5] *= s; te[9] *= s; te[13] *= s;\r\n // te[2] *= s; te[6] *= s; te[10] *= s; te[14] *= s;\r\n // te[3] *= s; te[7] *= s; te[11] *= s; te[15] *= s;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // determinant() {\r\n\r\n // const te = this.elements;\r\n\r\n // const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];\r\n // const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];\r\n // const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];\r\n // const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];\r\n\r\n // //TODO: make this more efficient\r\n // //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\r\n\r\n // return (\r\n // n41 * (\r\n // + n14 * n23 * n32\r\n // - n13 * n24 * n32\r\n // - n14 * n22 * n33\r\n // + n12 * n24 * n33\r\n // + n13 * n22 * n34\r\n // - n12 * n23 * n34\r\n // ) +\r\n // n42 * (\r\n // + n11 * n23 * n34\r\n // - n11 * n24 * n33\r\n // + n14 * n21 * n33\r\n // - n13 * n21 * n34\r\n // + n13 * n24 * n31\r\n // - n14 * n23 * n31\r\n // ) +\r\n // n43 * (\r\n // + n11 * n24 * n32\r\n // - n11 * n22 * n34\r\n // - n14 * n21 * n32\r\n // + n12 * n21 * n34\r\n // + n14 * n22 * n31\r\n // - n12 * n24 * n31\r\n // ) +\r\n // n44 * (\r\n // - n13 * n22 * n31\r\n // - n11 * n23 * n32\r\n // + n11 * n22 * n33\r\n // + n13 * n21 * n32\r\n // - n12 * n21 * n33\r\n // + n12 * n23 * n31\r\n // )\r\n\r\n // );\r\n\r\n // }\r\n\r\n // transpose() {\r\n\r\n // const te = this.elements;\r\n // let tmp;\r\n\r\n // tmp = te[1]; te[1] = te[4]; te[4] = tmp;\r\n // tmp = te[2]; te[2] = te[8]; te[8] = tmp;\r\n // tmp = te[6]; te[6] = te[9]; te[9] = tmp;\r\n\r\n // tmp = te[3]; te[3] = te[12]; te[12] = tmp;\r\n // tmp = te[7]; te[7] = te[13]; te[13] = tmp;\r\n // tmp = te[11]; te[11] = te[14]; te[14] = tmp;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setPosition(x, y, z) {\r\n\r\n // const te = this.elements;\r\n\r\n // if (x.isVector3) {\r\n\r\n // te[12] = x.x;\r\n // te[13] = x.y;\r\n // te[14] = x.z;\r\n\r\n // } else {\r\n\r\n // te[12] = x;\r\n // te[13] = y;\r\n // te[14] = z;\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // invert() {\r\n\r\n // // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\r\n // const te = this.elements,\r\n\r\n // n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3],\r\n // n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7],\r\n // n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11],\r\n // n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15],\r\n\r\n // t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\r\n // t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\r\n // t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\r\n // t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\r\n\r\n // const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\r\n\r\n // if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r\n\r\n // const detInv = 1 / det;\r\n\r\n // te[0] = t11 * detInv;\r\n // te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\r\n // te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\r\n // te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\r\n\r\n // te[4] = t12 * detInv;\r\n // te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\r\n // te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\r\n // te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\r\n\r\n // te[8] = t13 * detInv;\r\n // te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\r\n // te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\r\n // te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\r\n\r\n // te[12] = t14 * detInv;\r\n // te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\r\n // te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\r\n // te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // scale(v) {\r\n\r\n // const te = this.elements;\r\n // const x = v.x, y = v.y, z = v.z;\r\n\r\n // te[0] *= x; te[4] *= y; te[8] *= z;\r\n // te[1] *= x; te[5] *= y; te[9] *= z;\r\n // te[2] *= x; te[6] *= y; te[10] *= z;\r\n // te[3] *= x; te[7] *= y; te[11] *= z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // getMaxScaleOnAxis() {\r\n\r\n // const te = this.elements;\r\n\r\n // const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n // const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n // const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n // return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\r\n\r\n // }\r\n\r\n // makeTranslation(x, y, z) {\r\n\r\n // if (x.isVector3) {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, x.x,\r\n // 0, 1, 0, x.y,\r\n // 0, 0, 1, x.z,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // } else {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, x,\r\n // 0, 1, 0, y,\r\n // 0, 0, 1, z,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationX(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, 0,\r\n // 0, c, -s, 0,\r\n // 0, s, c, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationY(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // c, 0, s, 0,\r\n // 0, 1, 0, 0,\r\n // -s, 0, c, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationZ(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // c, -s, 0, 0,\r\n // s, c, 0, 0,\r\n // 0, 0, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n makeRotationAxis(axis, angle) {\r\n\r\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\r\n\r\n const c = Math.cos(angle);\r\n const s = Math.sin(angle);\r\n const t = 1 - c;\r\n const x = axis.x, y = axis.y, z = axis.z;\r\n const tx = t * x, ty = t * y;\r\n\r\n this.set(\r\n\r\n tx * x + c, tx * y - s * z, tx * z + s * y, 0,\r\n tx * y + s * z, ty * y + c, ty * z - s * x, 0,\r\n tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\r\n 0, 0, 0, 1\r\n\r\n );\r\n\r\n return this;\r\n\r\n }\r\n\r\n // makeScale(x, y, z) {\r\n\r\n // this.set(\r\n\r\n // x, 0, 0, 0,\r\n // 0, y, 0, 0,\r\n // 0, 0, z, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeShear(xy, xz, yx, yz, zx, zy) {\r\n\r\n // this.set(\r\n\r\n // 1, yx, zx, 0,\r\n // xy, 1, zy, 0,\r\n // xz, yz, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // compose(position, quaternion, scale) {\r\n\r\n // const te = this.elements;\r\n\r\n // const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\r\n // const x2 = x + x, y2 = y + y, z2 = z + z;\r\n // const xx = x * x2, xy = x * y2, xz = x * z2;\r\n // const yy = y * y2, yz = y * z2, zz = z * z2;\r\n // const wx = w * x2, wy = w * y2, wz = w * z2;\r\n\r\n // const sx = scale.x, sy = scale.y, sz = scale.z;\r\n\r\n // te[0] = (1 - (yy + zz)) * sx;\r\n // te[1] = (xy + wz) * sx;\r\n // te[2] = (xz - wy) * sx;\r\n // te[3] = 0;\r\n\r\n // te[4] = (xy - wz) * sy;\r\n // te[5] = (1 - (xx + zz)) * sy;\r\n // te[6] = (yz + wx) * sy;\r\n // te[7] = 0;\r\n\r\n // te[8] = (xz + wy) * sz;\r\n // te[9] = (yz - wx) * sz;\r\n // te[10] = (1 - (xx + yy)) * sz;\r\n // te[11] = 0;\r\n\r\n // te[12] = position.x;\r\n // te[13] = position.y;\r\n // te[14] = position.z;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // decompose(position, quaternion, scale) {\r\n\r\n // const te = this.elements;\r\n\r\n // let sx = _v1.set(te[0], te[1], te[2]).length();\r\n // const sy = _v1.set(te[4], te[5], te[6]).length();\r\n // const sz = _v1.set(te[8], te[9], te[10]).length();\r\n\r\n // // if determine is negative, we need to invert one scale\r\n // const det = this.determinant();\r\n // if (det < 0) sx = -sx;\r\n\r\n // position.x = te[12];\r\n // position.y = te[13];\r\n // position.z = te[14];\r\n\r\n // // scale the rotation part\r\n // _m1.copy(this);\r\n\r\n // const invSX = 1 / sx;\r\n // const invSY = 1 / sy;\r\n // const invSZ = 1 / sz;\r\n\r\n // _m1.elements[0] *= invSX;\r\n // _m1.elements[1] *= invSX;\r\n // _m1.elements[2] *= invSX;\r\n\r\n // _m1.elements[4] *= invSY;\r\n // _m1.elements[5] *= invSY;\r\n // _m1.elements[6] *= invSY;\r\n\r\n // _m1.elements[8] *= invSZ;\r\n // _m1.elements[9] *= invSZ;\r\n // _m1.elements[10] *= invSZ;\r\n\r\n // quaternion.setFromRotationMatrix(_m1);\r\n\r\n // scale.x = sx;\r\n // scale.y = sy;\r\n // scale.z = sz;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\r\n\r\n // const te = this.elements;\r\n // const x = 2 * near / (right - left);\r\n // const y = 2 * near / (top - bottom);\r\n\r\n // const a = (right + left) / (right - left);\r\n // const b = (top + bottom) / (top - bottom);\r\n\r\n // let c, d;\r\n\r\n // if (coordinateSystem === WebGLCoordinateSystem) {\r\n\r\n // c = - (far + near) / (far - near);\r\n // d = (- 2 * far * near) / (far - near);\r\n\r\n // } else if (coordinateSystem === WebGPUCoordinateSystem) {\r\n\r\n // c = - far / (far - near);\r\n // d = (- far * near) / (far - near);\r\n\r\n // } else {\r\n\r\n // throw new Error('THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem);\r\n\r\n // }\r\n\r\n // te[0] = x; te[4] = 0; te[8] = a; te[12] = 0;\r\n // te[1] = 0; te[5] = y; te[9] = b; te[13] = 0;\r\n // te[2] = 0; te[6] = 0; te[10] = c; te[14] = d;\r\n // te[3] = 0; te[7] = 0; te[11] = - 1; te[15] = 0;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\r\n\r\n // const te = this.elements;\r\n // const w = 1.0 / (right - left);\r\n // const h = 1.0 / (top - bottom);\r\n // const p = 1.0 / (far - near);\r\n\r\n // const x = (right + left) * w;\r\n // const y = (top + bottom) * h;\r\n\r\n // let z, zInv;\r\n\r\n // if (coordinateSystem === WebGLCoordinateSystem) {\r\n\r\n // z = (far + near) * p;\r\n // zInv = - 2 * p;\r\n\r\n // } else if (coordinateSystem === WebGPUCoordinateSystem) {\r\n\r\n // z = near * p;\r\n // zInv = - 1 * p;\r\n\r\n // } else {\r\n\r\n // throw new Error('THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem);\r\n\r\n // }\r\n\r\n // te[0] = 2 * w; te[4] = 0; te[8] = 0; te[12] = - x;\r\n // te[1] = 0; te[5] = 2 * h; te[9] = 0; te[13] = - y;\r\n // te[2] = 0; te[6] = 0; te[10] = zInv; te[14] = - z;\r\n // te[3] = 0; te[7] = 0; te[11] = 0; te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n equals(matrix) {\r\n\r\n const te = this.elements;\r\n const me = matrix.elements;\r\n\r\n for (let i = 0; i < 16; i++) {\r\n\r\n if (te[i] !== me[i]) return false;\r\n\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n // fromArray(array, offset = 0) {\r\n\r\n // for (let i = 0; i < 16; i++) {\r\n\r\n // this.elements[i] = array[i + offset];\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toArray(array = [], offset = 0) {\r\n\r\n // const te = this.elements;\r\n\r\n // array[offset] = te[0];\r\n // array[offset + 1] = te[1];\r\n // array[offset + 2] = te[2];\r\n // array[offset + 3] = te[3];\r\n\r\n // array[offset + 4] = te[4];\r\n // array[offset + 5] = te[5];\r\n // array[offset + 6] = te[6];\r\n // array[offset + 7] = te[7];\r\n\r\n // array[offset + 8] = te[8];\r\n // array[offset + 9] = te[9];\r\n // array[offset + 10] = te[10];\r\n // array[offset + 11] = te[11];\r\n\r\n // array[offset + 12] = te[12];\r\n // array[offset + 13] = te[13];\r\n // array[offset + 14] = te[14];\r\n // array[offset + 15] = te[15];\r\n\r\n // return array;\r\n\r\n // }\r\n\r\n}\r\n\r\n// const _v1 = new Vector3();\r\n// const _m1 = new Matrix4();\r\n// const _zero = new Vector3(0, 0, 0);\r\n// const _one = new Vector3(1, 1, 1);\r\n// const _x = new Vector3();\r\n// const _y = new Vector3();\r\n// const _z = new Vector3();\r\n\r\nexport { Matrix4 };\r\n","\r\n// code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Curve.js\r\n// import * as MathUtils from '../../math/MathUtils.js';\r\n// import { Vector2 } from '../../math/Vector2.js';\r\n// import { Vector3 } from '../../math/Vector3.js';\r\n// import { Matrix4 } from '../../math/Matrix4.js';\r\n\r\n/**\r\n * Extensible curve object.\r\n *\r\n * Some common of curve methods:\r\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\r\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\r\n * .getPoints(), .getSpacedPoints()\r\n * .getLength()\r\n * .updateArcLengths()\r\n *\r\n * This following curves inherit from THREE.Curve:\r\n *\r\n * -- 2D curves --\r\n * THREE.ArcCurve\r\n * THREE.CubicBezierCurve\r\n * THREE.EllipseCurve\r\n * THREE.LineCurve\r\n * THREE.QuadraticBezierCurve\r\n * THREE.SplineCurve\r\n *\r\n * -- 3D curves --\r\n * THREE.CatmullRomCurve3\r\n * THREE.CubicBezierCurve3\r\n * THREE.LineCurve3\r\n * THREE.QuadraticBezierCurve3\r\n *\r\n * A series of curves can be represented as a THREE.CurvePath.\r\n *\r\n **/\r\n\r\nclass Curve {\r\n\r\n constructor() {\r\n\r\n this.type = 'Curve';\r\n\r\n this.arcLengthDivisions = 200;\r\n\r\n }\r\n\r\n // Virtual base class method to overwrite and implement in subclasses\r\n\r\n getPoint() {\r\n\r\n console.warn('THREE.Curve: .getPoint() not implemented.');\r\n return null;\r\n\r\n }\r\n\r\n // Get point at relative position in curve according to arc length\r\n // - u [0 .. 1]\r\n\r\n getPointAt(u, optionalTarget) {\r\n\r\n const t = this.getUtoTmapping(u);\r\n return this.getPoint(t, optionalTarget);\r\n\r\n }\r\n\r\n // Get sequence of points using getPoint( t )\r\n\r\n getPoints(divisions = 5) {\r\n\r\n const points = [];\r\n\r\n for (let d = 0; d <= divisions; d++) {\r\n\r\n points.push(this.getPoint(d / divisions));\r\n\r\n }\r\n\r\n return points;\r\n\r\n }\r\n\r\n // // Get sequence of points using getPointAt( u )\r\n\r\n // getSpacedPoints(divisions = 5) {\r\n\r\n // const points = [];\r\n\r\n // for (let d = 0; d <= divisions; d++) {\r\n\r\n // points.push(this.getPointAt(d / divisions));\r\n\r\n // }\r\n\r\n // return points;\r\n\r\n // }\r\n\r\n // Get total curve arc length\r\n\r\n getLength() {\r\n\r\n const lengths = this.getLengths();\r\n return lengths[lengths.length - 1];\r\n\r\n }\r\n\r\n // Get list of cumulative segment lengths\r\n\r\n getLengths(divisions = this.arcLengthDivisions) {\r\n\r\n if (this.cacheArcLengths &&\r\n (this.cacheArcLengths.length === divisions + 1) &&\r\n !this.needsUpdate) {\r\n\r\n return this.cacheArcLengths;\r\n\r\n }\r\n\r\n this.needsUpdate = false;\r\n\r\n const cache = [];\r\n let current, last = this.getPoint(0);\r\n let sum = 0;\r\n\r\n cache.push(0);\r\n\r\n for (let p = 1; p <= divisions; p++) {\r\n\r\n current = this.getPoint(p / divisions);\r\n sum += current.distanceTo(last);\r\n cache.push(sum);\r\n last = current;\r\n\r\n }\r\n\r\n this.cacheArcLengths = cache;\r\n\r\n return cache; // { sums: cache, sum: sum }; Sum is in the last element.\r\n\r\n }\r\n\r\n // updateArcLengths() {\r\n\r\n // this.needsUpdate = true;\r\n // this.getLengths();\r\n\r\n // }\r\n\r\n // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\r\n\r\n getUtoTmapping(u, distance) {\r\n\r\n const arcLengths = this.getLengths();\r\n\r\n let i = 0;\r\n const il = arcLengths.length;\r\n\r\n let targetArcLength; // The targeted u distance value to get\r\n\r\n if (distance) {\r\n\r\n targetArcLength = distance;\r\n\r\n } else {\r\n\r\n targetArcLength = u * arcLengths[il - 1];\r\n\r\n }\r\n\r\n // binary search for the index with largest value smaller than target u distance\r\n\r\n let low = 0, high = il - 1, comparison;\r\n\r\n while (low <= high) {\r\n\r\n i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n comparison = arcLengths[i] - targetArcLength;\r\n\r\n if (comparison < 0) {\r\n\r\n low = i + 1;\r\n\r\n } else if (comparison > 0) {\r\n\r\n high = i - 1;\r\n\r\n } else {\r\n\r\n high = i;\r\n break;\r\n\r\n // DONE\r\n\r\n }\r\n\r\n }\r\n\r\n i = high;\r\n\r\n if (arcLengths[i] === targetArcLength) {\r\n\r\n return i / (il - 1);\r\n\r\n }\r\n\r\n // we could get finer grain at lengths, or use simple interpolation between two points\r\n\r\n const lengthBefore = arcLengths[i];\r\n const lengthAfter = arcLengths[i + 1];\r\n\r\n const segmentLength = lengthAfter - lengthBefore;\r\n\r\n // determine where we are between the 'before' and 'after' points\r\n\r\n const segmentFraction = (targetArcLength - lengthBefore) / segmentLength;\r\n\r\n // add that fractional amount to t\r\n\r\n const t = (i + segmentFraction) / (il - 1);\r\n\r\n return t;\r\n\r\n }\r\n\r\n // Returns a unit vector tangent at t\r\n // In case any sub curve does not implement its tangent derivation,\r\n // 2 points a small delta apart will be used to find its gradient\r\n // which seems to give a reasonable approximation\r\n\r\n // getTangent(t, optionalTarget) {\r\n\r\n // const delta = 0.0001;\r\n // let t1 = t - delta;\r\n // let t2 = t + delta;\r\n\r\n // // Capping in case of danger\r\n\r\n // if (t1 < 0) t1 = 0;\r\n // if (t2 > 1) t2 = 1;\r\n\r\n // const pt1 = this.getPoint(t1);\r\n // const pt2 = this.getPoint(t2);\r\n\r\n // const tangent = optionalTarget || ((pt1.isVector2) ? new Vector2() : new Vector3());\r\n\r\n // tangent.copy(pt2).sub(pt1).normalize();\r\n\r\n // return tangent;\r\n\r\n // }\r\n\r\n // getTangentAt(u, optionalTarget) {\r\n\r\n // const t = this.getUtoTmapping(u);\r\n // return this.getTangent(t, optionalTarget);\r\n\r\n // }\r\n\r\n // computeFrenetFrames(segments, closed) {\r\n\r\n // // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\r\n\r\n // const normal = new Vector3();\r\n\r\n // const tangents = [];\r\n // const normals = [];\r\n // const binormals = [];\r\n\r\n // const vec = new Vector3();\r\n // const mat = new Matrix4();\r\n\r\n // // compute the tangent vectors for each segment on the curve\r\n\r\n // for (let i = 0; i <= segments; i++) {\r\n\r\n // const u = i / segments;\r\n\r\n // tangents[i] = this.getTangentAt(u, new Vector3());\r\n\r\n // }\r\n\r\n // // select an initial normal vector perpendicular to the first tangent vector,\r\n // // and in the direction of the minimum tangent xyz component\r\n\r\n // normals[0] = new Vector3();\r\n // binormals[0] = new Vector3();\r\n // let min = Number.MAX_VALUE;\r\n // const tx = Math.abs(tangents[0].x);\r\n // const ty = Math.abs(tangents[0].y);\r\n // const tz = Math.abs(tangents[0].z);\r\n\r\n // if (tx <= min) {\r\n\r\n // min = tx;\r\n // normal.set(1, 0, 0);\r\n\r\n // }\r\n\r\n // if (ty <= min) {\r\n\r\n // min = ty;\r\n // normal.set(0, 1, 0);\r\n\r\n // }\r\n\r\n // if (tz <= min) {\r\n\r\n // normal.set(0, 0, 1);\r\n\r\n // }\r\n\r\n // vec.crossVectors(tangents[0], normal).normalize();\r\n\r\n // normals[0].crossVectors(tangents[0], vec);\r\n // binormals[0].crossVectors(tangents[0], normals[0]);\r\n\r\n // // compute the slowly-varying normal and binormal vectors for each segment on the curve\r\n\r\n // for (let i = 1; i <= segments; i++) {\r\n\r\n // normals[i] = normals[i - 1].clone();\r\n\r\n // binormals[i] = binormals[i - 1].clone();\r\n\r\n // vec.crossVectors(tangents[i - 1], tangents[i]);\r\n\r\n // if (vec.length() > Number.EPSILON) {\r\n\r\n // vec.normalize();\r\n\r\n // const theta = Math.acos(MathUtils.clamp(tangents[i - 1].dot(tangents[i]), - 1, 1)); // clamp for floating pt errors\r\n\r\n // normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta));\r\n\r\n // }\r\n\r\n // binormals[i].crossVectors(tangents[i], normals[i]);\r\n\r\n // }\r\n\r\n // // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\r\n\r\n // if (closed === true) {\r\n\r\n // let theta = Math.acos(MathUtils.clamp(normals[0].dot(normals[segments]), - 1, 1));\r\n // theta /= segments;\r\n\r\n // if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) {\r\n\r\n // theta = - theta;\r\n\r\n // }\r\n\r\n // for (let i = 1; i <= segments; i++) {\r\n\r\n // // twist a little...\r\n // normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i));\r\n // binormals[i].crossVectors(tangents[i], normals[i]);\r\n\r\n // }\r\n\r\n // }\r\n\r\n // return {\r\n // tangents: tangents,\r\n // normals: normals,\r\n // binormals: binormals\r\n // };\r\n\r\n // }\r\n\r\n // clone() {\r\n\r\n // return new this.constructor().copy(this);\r\n\r\n // }\r\n\r\n // copy(source) {\r\n\r\n // this.arcLengthDivisions = source.arcLengthDivisions;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toJSON() {\r\n\r\n // const data = {\r\n // metadata: {\r\n // version: 4.6,\r\n // type: 'Curve',\r\n // generator: 'Curve.toJSON'\r\n // }\r\n // };\r\n\r\n // data.arcLengthDivisions = this.arcLengthDivisions;\r\n // data.type = this.type;\r\n\r\n // return data;\r\n\r\n // }\r\n\r\n // fromJSON(json) {\r\n\r\n // this.arcLengthDivisions = json.arcLengthDivisions;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { Curve };\r\n","/**\r\n * // code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Interpolations.js\r\n * Bezier Curves formulas obtained from\r\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\r\n */\r\n\r\nfunction CatmullRom(t, p0, p1, p2, p3) {\r\n\r\n const v0 = (p2 - p0) * 0.5;\r\n const v1 = (p3 - p1) * 0.5;\r\n const t2 = t * t;\r\n const t3 = t * t2;\r\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\r\n\r\n}\r\n\r\n//\r\n\r\nfunction QuadraticBezierP0(t, p) {\r\n\r\n const k = 1 - t;\r\n return k * k * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezierP1(t, p) {\r\n\r\n return 2 * (1 - t) * t * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezierP2(t, p) {\r\n\r\n return t * t * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezier(t, p0, p1, p2) {\r\n\r\n return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) +\r\n QuadraticBezierP2(t, p2);\r\n\r\n}\r\n\r\n//\r\n\r\nfunction CubicBezierP0(t, p) {\r\n\r\n const k = 1 - t;\r\n return k * k * k * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP1(t, p) {\r\n\r\n const k = 1 - t;\r\n return 3 * k * k * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP2(t, p) {\r\n\r\n return 3 * (1 - t) * t * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP3(t, p) {\r\n\r\n return t * t * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezier(t, p0, p1, p2, p3) {\r\n\r\n return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) +\r\n CubicBezierP3(t, p3);\r\n\r\n}\r\n\r\nexport { CatmullRom, QuadraticBezier, CubicBezier };\r\n","// code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/curves/QuadraticBezierCurve3.js\r\nimport { Curve } from './Curve.js';\r\nimport { QuadraticBezier } from './Interpolations.js';\r\nimport { Vector3 } from './Vector3.js';\r\n\r\nclass QuadraticBezierCurve3 extends Curve {\r\n\r\n constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) {\r\n\r\n super();\r\n\r\n this.isQuadraticBezierCurve3 = true;\r\n\r\n this.type = 'QuadraticBezierCurve3';\r\n\r\n this.v0 = v0;\r\n this.v1 = v1;\r\n this.v2 = v2;\r\n\r\n }\r\n\r\n getPoint(t, optionalTarget = new Vector3()) {\r\n\r\n const point = optionalTarget;\r\n\r\n const v0 = this.v0, v1 = this.v1, v2 = this.v2;\r\n\r\n point.set(\r\n QuadraticBezier(t, v0.x, v1.x, v2.x),\r\n QuadraticBezier(t, v0.y, v1.y, v2.y),\r\n QuadraticBezier(t, v0.z, v1.z, v2.z)\r\n );\r\n\r\n return point;\r\n\r\n }\r\n\r\n // copy(source) {\r\n\r\n // super.copy(source);\r\n\r\n // this.v0.copy(source.v0);\r\n // this.v1.copy(source.v1);\r\n // this.v2.copy(source.v2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toJSON() {\r\n\r\n // const data = super.toJSON();\r\n\r\n // data.v0 = this.v0.toArray();\r\n // data.v1 = this.v1.toArray();\r\n // data.v2 = this.v2.toArray();\r\n\r\n // return data;\r\n\r\n // }\r\n\r\n // fromJSON(json) {\r\n\r\n // super.fromJSON(json);\r\n\r\n // this.v0.fromArray(json.v0);\r\n // this.v1.fromArray(json.v1);\r\n // this.v2.fromArray(json.v2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { QuadraticBezierCurve3 };\r\n","/* eslint-disable no-tabs */\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathPointList.js\r\nimport { Matrix4 } from '../math/Matrix4.js';\r\nimport { QuadraticBezierCurve3 } from '../math/QuadraticBezierCurve3.js';\r\nimport { Vector3 } from '../math/Vector3.js';\r\nimport { PathPoint } from './PathPoint.js';\r\n\r\nconst helpVec3_1 = new Vector3();\r\nconst helpVec3_2 = new Vector3();\r\nconst helpVec3_3 = new Vector3();\r\nconst helpMat4 = new Matrix4();\r\nconst helpCurve = new QuadraticBezierCurve3();\r\n\r\nfunction _getCornerBezierCurve(last, current, next, cornerRadius, firstCorner, out) {\r\n\tconst lastDir = helpVec3_1.subVectors(current, last);\r\n\tconst nextDir = helpVec3_2.subVectors(next, current);\r\n\r\n\tconst lastDirLength = lastDir.length();\r\n\tconst nextDirLength = nextDir.length();\r\n\r\n\tlastDir.normalize();\r\n\tnextDir.normalize();\r\n\r\n\t// cornerRadius can not bigger then lineDistance / 2, auto fix this\r\n\tconst v0Dist = Math.min((firstCorner ? lastDirLength / 2 : lastDirLength) * 0.999999, cornerRadius);\r\n\tout.v0.copy(current).sub(lastDir.multiplyScalar(v0Dist));\r\n\r\n\tout.v1.copy(current);\r\n\r\n\tconst v2Dist = Math.min(nextDirLength / 2 * 0.999999, cornerRadius);\r\n\tout.v2.copy(current).add(nextDir.multiplyScalar(v2Dist));\r\n\r\n\treturn out;\r\n}\r\n\r\n/**\r\n * PathPointList\r\n * input points to generate a PathPoint list\r\n */\r\nclass PathPointList {\r\n\r\n\tconstructor() {\r\n\t\tthis.array = []; // path point array\r\n\t\tthis.count = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Set points\r\n\t * @param {THREE.Vector3[]} points key points array\r\n\t * @param {number} cornerRadius? the corner radius. set 0 to disable round corner. default is 0.1\r\n\t * @param {number} cornerSplit? the corner split. default is 10.\r\n\t * @param {number} up? force up. default is auto up (calculate by tangent).\r\n\t * @param {boolean} close? close path. default is false.\r\n\t */\r\n\tset(points, cornerRadius = 0.1, cornerSplit = 10, up = null, close = false) {\r\n\t\tpoints = points.slice(0);\r\n\r\n\t\tif (points.length < 2) {\r\n\t\t\tconsole.warn('PathPointList: points length less than 2.');\r\n\t\t\tthis.count = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Auto close\r\n\t\tif (close && !points[0].equals(points[points.length - 1])) {\r\n\t\t\tpoints.push(new Vector3().copy(points[0]));\r\n\t\t}\r\n\r\n\t\t// Generate path point list\r\n\t\tfor (let i = 0, l = points.length; i < l; i++) {\r\n\t\t\tif (i === 0) {\r\n\t\t\t\tthis._start(points[i], points[i + 1], up);\r\n\t\t\t} else if (i === l - 1) {\r\n\t\t\t\tif (close) {\r\n\t\t\t\t\t// Connect end point and start point\r\n\t\t\t\t\tthis._corner(points[i], points[1], cornerRadius, cornerSplit, up);\r\n\r\n\t\t\t\t\t// Fix start point\r\n\t\t\t\t\tconst dist = this.array[0].dist; // should not copy dist\r\n\t\t\t\t\tthis.array[0].copy(this.array[this.count - 1]);\r\n\t\t\t\t\tthis.array[0].dist = dist;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._end(points[i]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis._corner(points[i], points[i + 1], cornerRadius, cornerSplit, up);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get distance of this path\r\n\t * @return {number}\r\n\t */\r\n\tdistance() {\r\n\t\tif (this.count > 0) {\r\n\t\t\treturn this.array[this.count - 1].dist;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t_getByIndex(index) {\r\n\t\tif (!this.array[index]) {\r\n\t\t\tthis.array[index] = new PathPoint();\r\n\t\t}\r\n\t\treturn this.array[index];\r\n\t}\r\n\r\n\t_start(current, next, up) {\r\n\t\tthis.count = 0;\r\n\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tpoint.pos.copy(current);\r\n\t\tpoint.dir.subVectors(next, current);\r\n\r\n\t\t// init start up dir\r\n\t\tif (up) {\r\n\t\t\tpoint.up.copy(up);\r\n\t\t} else {\r\n\t\t\t// select an initial normal vector perpendicular to the first tangent vector\r\n\t\t\tlet min = Number.MAX_VALUE;\r\n\t\t\tconst tx = Math.abs(point.dir.x);\r\n\t\t\tconst ty = Math.abs(point.dir.y);\r\n\t\t\tconst tz = Math.abs(point.dir.z);\r\n\t\t\tif (tx < min) {\r\n\t\t\t\tmin = tx;\r\n\t\t\t\tpoint.up.set(1, 0, 0);\r\n\t\t\t}\r\n\t\t\tif (ty < min) {\r\n\t\t\t\tmin = ty;\r\n\t\t\t\tpoint.up.set(0, 1, 0);\r\n\t\t\t}\r\n\t\t\tif (tz < min) {\r\n\t\t\t\tpoint.up.set(0, 0, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\t\tpoint.up.crossVectors(point.right, point.dir).normalize();\r\n\t\tpoint.dist = 0;\r\n\t\tpoint.widthScale = 1;\r\n\t\tpoint.sharp = false;\r\n\r\n\t\tpoint.dir.normalize();\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n\t_end(current) {\r\n\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tpoint.pos.copy(current);\r\n\t\tpoint.dir.subVectors(current, lastPoint.pos);\r\n\t\tconst dist = point.dir.length();\r\n\t\tpoint.dir.normalize();\r\n\r\n\t\tpoint.up.copy(lastPoint.up); // copy last up\r\n\r\n\t\tconst vec = helpVec3_1.crossVectors(lastPoint.dir, point.dir);\r\n\t\tif (vec.length() > Number.EPSILON) {\r\n\t\t\tvec.normalize();\r\n\t\t\tconst theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors\r\n\t\t\tpoint.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));\r\n\t\t}\r\n\r\n\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\r\n\t\tpoint.dist = lastPoint.dist + dist;\r\n\t\tpoint.widthScale = 1;\r\n\t\tpoint.sharp = false;\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n\t_corner(current, next, cornerRadius, cornerSplit, up) {\r\n\t\tif (cornerRadius > 0 && cornerSplit > 0) {\r\n\t\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\t\tconst curve = _getCornerBezierCurve(lastPoint.pos, current, next, cornerRadius, (this.count - 1) === 0, helpCurve);\r\n\t\t\tconst samplerPoints = curve.getPoints(cornerSplit); // TODO optimize\r\n\r\n\t\t\tfor (let f = 0; f < cornerSplit; f++) {\r\n\t\t\t\tthis._sharpCorner(samplerPoints[f], samplerPoints[f + 1], up, f === 0 ? 1 : 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (!samplerPoints[cornerSplit].equals(next)) {\r\n\t\t\t\tthis._sharpCorner(samplerPoints[cornerSplit], next, up, 2);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis._sharpCorner(current, next, up, 0, true);\r\n\t\t}\r\n\t}\r\n\r\n\t// dirType: 0 - use middle dir / 1 - use last dir / 2- use next dir\r\n\t_sharpCorner(current, next, up, dirType = 0, sharp = false) {\r\n\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tconst lastDir = helpVec3_1.subVectors(current, lastPoint.pos);\r\n\t\tconst nextDir = helpVec3_2.subVectors(next, current);\r\n\r\n\t\tconst lastDirLength = lastDir.length();\r\n\r\n\t\tlastDir.normalize();\r\n\t\tnextDir.normalize();\r\n\r\n\t\tpoint.pos.copy(current);\r\n\r\n\t\tif (dirType === 1) {\r\n\t\t\tpoint.dir.copy(lastDir);\r\n\t\t} else if (dirType === 2) {\r\n\t\t\tpoint.dir.copy(nextDir);\r\n\t\t} else {\r\n\t\t\tpoint.dir.addVectors(lastDir, nextDir);\r\n\t\t\tpoint.dir.normalize();\r\n\t\t}\r\n\r\n\t\tif (up) {\r\n\t\t\tif (point.dir.dot(up) === 1) {\r\n\t\t\t\tpoint.right.crossVectors(nextDir, up).normalize();\r\n\t\t\t} else {\r\n\t\t\t\tpoint.right.crossVectors(point.dir, up).normalize();\r\n\t\t\t}\r\n\r\n\t\t\tpoint.up.crossVectors(point.right, point.dir).normalize();\r\n\t\t} else {\r\n\t\t\tpoint.up.copy(lastPoint.up);\r\n\r\n\t\t\tconst vec = helpVec3_3.crossVectors(lastPoint.dir, point.dir);\r\n\t\t\tif (vec.length() > Number.EPSILON) {\r\n\t\t\t\tvec.normalize();\r\n\t\t\t\tconst theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors\r\n\t\t\t\tpoint.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));\r\n\t\t\t}\r\n\r\n\t\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\t\t}\r\n\r\n\t\tpoint.dist = lastPoint.dist + lastDirLength;\r\n\r\n\t\tconst _cos = lastDir.dot(nextDir);\r\n\t\tpoint.widthScale = Math.min(1 / Math.sqrt((1 + _cos) / 2), 1.415) || 1;\r\n\t\tpoint.sharp = (Math.abs(_cos - 1) > 0.05) && sharp;\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n}\r\n\r\nexport { PathPointList };\r\n","import { Vector3 } from './math/Vector3';\r\nimport { PathPoint } from './path/PathPoint';\r\nimport { PathPointList } from './path/PathPointList';\r\nimport { merge } from './util';\r\nconst UP = new Vector3(0, 0, 1);\r\n\r\nexport function expandPaths(lines, options) {\r\n options = Object.assign({}, { lineWidth: 1, cornerRadius: 0, cornerSplit: 10 }, options);\r\n const results = lines.map(line => {\r\n const points = line.map(p => {\r\n const [x, y, z] = p;\r\n return new Vector3(x, y, z || 0);\r\n });\r\n const pathPointList = new PathPointList();\r\n pathPointList.set(points, options.cornerRadius, options.cornerSplit, UP);\r\n const result = generatePathVertexData(pathPointList, options);\r\n result.line = line;\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = new Float32Array(result.normal);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\n// Vertex Data Generate Functions\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathGeometry.js\r\nfunction generatePathVertexData(pathPointList, options) {\r\n const width = options.lineWidth || 0.1;\r\n const progress = 1;\r\n const side = 'both';\r\n\r\n const halfWidth = width / 2;\r\n const sideWidth = (side !== 'both' ? width / 2 : width);\r\n const totalDistance = pathPointList.distance();\r\n const progressDistance = progress * totalDistance;\r\n if (totalDistance === 0) {\r\n return null;\r\n }\r\n\r\n const sharpUvOffset = halfWidth / sideWidth;\r\n // const sharpUvOffset2 = halfWidth / totalDistance;\r\n\r\n let count = 0;\r\n\r\n // modify data\r\n const position = [];\r\n const normal = [];\r\n const uv = [];\r\n const indices = [];\r\n let verticesCount = 0;\r\n\r\n const right = new Vector3();\r\n const left = new Vector3();\r\n\r\n // for sharp corners\r\n const leftOffset = new Vector3();\r\n const rightOffset = new Vector3();\r\n const tempPoint1 = new Vector3();\r\n const tempPoint2 = new Vector3();\r\n\r\n function addVertices(pathPoint) {\r\n const first = position.length === 0;\r\n const sharpCorner = pathPoint.sharp && !first;\r\n\r\n const uvDist = pathPoint.dist / sideWidth;\r\n // const uvDist2 = pathPoint.dist / totalDistance;\r\n\r\n const dir = pathPoint.dir;\r\n const up = pathPoint.up;\r\n const _right = pathPoint.right;\r\n\r\n if (side !== 'left') {\r\n right.copy(_right).multiplyScalar(halfWidth * pathPoint.widthScale);\r\n } else {\r\n right.set(0, 0, 0);\r\n }\r\n\r\n if (side !== 'right') {\r\n left.copy(_right).multiplyScalar(-halfWidth * pathPoint.widthScale);\r\n } else {\r\n left.set(0, 0, 0);\r\n }\r\n\r\n right.add(pathPoint.pos);\r\n left.add(pathPoint.pos);\r\n\r\n if (sharpCorner) {\r\n leftOffset.fromArray(position, position.length - 6).sub(left);\r\n rightOffset.fromArray(position, position.length - 3).sub(right);\r\n\r\n const leftDist = leftOffset.length();\r\n const rightDist = rightOffset.length();\r\n\r\n const sideOffset = leftDist - rightDist;\r\n let longerOffset, longEdge;\r\n\r\n if (sideOffset > 0) {\r\n longerOffset = leftOffset;\r\n longEdge = left;\r\n } else {\r\n longerOffset = rightOffset;\r\n longEdge = right;\r\n }\r\n\r\n tempPoint1.copy(longerOffset).setLength(Math.abs(sideOffset)).add(longEdge);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let _cos = tempPoint2.copy(longEdge).sub(tempPoint1).normalize().dot(dir);\r\n // eslint-disable-next-line prefer-const\r\n let _len = tempPoint2.copy(longEdge).sub(tempPoint1).length();\r\n // eslint-disable-next-line prefer-const\r\n let _dist = _cos * _len * 2;\r\n\r\n tempPoint2.copy(dir).setLength(_dist).add(tempPoint1);\r\n\r\n if (sideOffset > 0) {\r\n position.push(\r\n tempPoint1.x, tempPoint1.y, tempPoint1.z, // 6\r\n right.x, right.y, right.z, // 5\r\n left.x, left.y, left.z, // 4\r\n right.x, right.y, right.z, // 3\r\n tempPoint2.x, tempPoint2.y, tempPoint2.z, // 2\r\n right.x, right.y, right.z // 1\r\n );\r\n\r\n verticesCount += 6;\r\n\r\n indices.push(\r\n verticesCount - 6, verticesCount - 8, verticesCount - 7,\r\n verticesCount - 6, verticesCount - 7, verticesCount - 5,\r\n\r\n verticesCount - 4, verticesCount - 6, verticesCount - 5,\r\n verticesCount - 2, verticesCount - 4, verticesCount - 1\r\n );\r\n\r\n count += 12;\r\n } else {\r\n position.push(\r\n left.x, left.y, left.z, // 6\r\n tempPoint1.x, tempPoint1.y, tempPoint1.z, // 5\r\n left.x, left.y, left.z, // 4\r\n right.x, right.y, right.z, // 3\r\n left.x, left.y, left.z, // 2\r\n tempPoint2.x, tempPoint2.y, tempPoint2.z // 1\r\n );\r\n\r\n verticesCount += 6;\r\n\r\n indices.push(\r\n verticesCount - 6, verticesCount - 8, verticesCount - 7,\r\n verticesCount - 6, verticesCount - 7, verticesCount - 5,\r\n\r\n verticesCount - 6, verticesCount - 5, verticesCount - 3,\r\n verticesCount - 2, verticesCount - 3, verticesCount - 1\r\n );\r\n\r\n count += 12;\r\n }\r\n\r\n normal.push(\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z\r\n );\r\n\r\n uv.push(\r\n uvDist - sharpUvOffset, 0,\r\n uvDist - sharpUvOffset, 1,\r\n uvDist, 0,\r\n uvDist, 1,\r\n uvDist + sharpUvOffset, 0,\r\n uvDist + sharpUvOffset, 1\r\n );\r\n\r\n // if (generateUv2) {\r\n // uv2.push(\r\n // uvDist2 - sharpUvOffset2, 0,\r\n // uvDist2 - sharpUvOffset2, 1,\r\n // uvDist2, 0,\r\n // uvDist2, 1,\r\n // uvDist2 + sharpUvOffset2, 0,\r\n // uvDist2 + sharpUvOffset2, 1\r\n // );\r\n // }\r\n } else {\r\n position.push(\r\n left.x, left.y, left.z,\r\n right.x, right.y, right.z\r\n );\r\n\r\n normal.push(\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z\r\n );\r\n\r\n uv.push(\r\n uvDist, 0,\r\n uvDist, 1\r\n );\r\n\r\n // if (generateUv2) {\r\n // uv2.push(\r\n // uvDist2, 0,\r\n // uvDist2, 1\r\n // );\r\n // }\r\n\r\n verticesCount += 2;\r\n\r\n if (!first) {\r\n indices.push(\r\n verticesCount - 2, verticesCount - 4, verticesCount - 3,\r\n verticesCount - 2, verticesCount - 3, verticesCount - 1\r\n );\r\n\r\n count += 6;\r\n }\r\n }\r\n }\r\n\r\n let lastPoint;\r\n\r\n if (progressDistance > 0) {\r\n for (let i = 0; i < pathPointList.count; i++) {\r\n const pathPoint = pathPointList.array[i];\r\n\r\n if (pathPoint.dist > progressDistance) {\r\n const prevPoint = pathPointList.array[i - 1];\r\n lastPoint = new PathPoint();\r\n\r\n // linear lerp for progress\r\n const alpha = (progressDistance - prevPoint.dist) / (pathPoint.dist - prevPoint.dist);\r\n lastPoint.lerpPathPoints(prevPoint, pathPoint, alpha);\r\n\r\n addVertices(lastPoint);\r\n break;\r\n } else {\r\n addVertices(pathPoint);\r\n }\r\n }\r\n } else {\r\n lastPoint = pathPointList.array[0];\r\n }\r\n\r\n return {\r\n points: position,\r\n normal,\r\n uvs: uv,\r\n index: indices,\r\n count\r\n };\r\n}\r\n"],"names":["earcutModule","exports","earcut","earcut_1","data","holeIndices","dim","hasHoles","length","outerLen","outerNode","linkedList","triangles","next","prev","minX","minY","maxX","maxY","x","y","invSize","eliminateHoles","i","Math","max","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","p","again","steiner","area","ear","pass","indexCurve","stop","isEarHashed","isEar","push","cureLocalIntersections","splitEarcut","a","b","c","ax","bx","cx","ay","by","cy","x0","y0","x1","y1","pointInTriangle","minZ","zOrder","maxZ","prevZ","n","nextZ","z","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","len","list","getLeftmost","sort","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","abs","sectorContainsSector","sortLinked","q","e","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","r","p1","p2","q1","q2","o1","sign","o2","o3","o4","onSegment","min","num","inside","a2","Node","b2","an","bp","deviation","polygonArea","trianglesArea","sum","j","flatten","result","vertices","holes","dimensions","holeIndex","d","isClockwise","ring","cur","v3Sub","out","v1","v2","v3Normalize","v","sqrt","v3Cross","az","bz","generateNormal","indices","position","v3Set","p3","v21","v32","normals","Float32Array","f","i1","i2","i3","l","merge","results","normal","uv","plen","ilen","Uint32Array","pOffset","pCount","iIdx","uvOffset","set","len1","pIndex","radToDeg","rad","PI","degToRad","angle","generateSideWallUV","uvs","indexA","indexB","indexC","indexD","idx1","idx2","idx3","idx4","a_x","a_y","a_z","b_x","b_y","b_z","c_x","c_y","c_z","d_x","d_y","d_z","extrudePolygons","polygons","options","Object","assign","depth","map","polygon","validateRing","reverse","isClosedRing","splice","flatVertices","generateTopAndBottom","generateSides","points","index","count","idx","a1","b1","c1","x2","y2","calPolygonPointsCount","uOffset","idx0","extrudePolylines","lines","lineWidth","line","expandLine","extrudeSlopes","side","sideDepth","tempResult","leftPoints","rightPoints","depths","lz","rz","z1","z2","d1","len2","c2","d2","rings","depthsEnable","addOneSideIndex","vs","TEMPV1","TEMPV2","radius","currentp","dy","dx","rAngle","atan","p0","vAngle","getAngle","rRad","cos","sin","p4","translateLine","line1","line2","op1","lineIntersection","op2","point1","point2","leftOnLine","offsetPoints","dot","det","atan2","distance","rad1","offsetX","offsetY","tp1","tp2","rad2","tp3","tp4","dx1","dy1","dx2","dy2","k1","k2","cylinder","point","height","radialSegments","round","aRad","circlePointsLen","centerx","centery","uIdx","offset","u","pointsLen","indicesLen","sidePoints","u1","u2","Vector3","undefined","clone","constructor","copy","add","addScalar","s","addVectors","addScaledVector","sub","subScalar","subVectors","multiply","multiplyScalar","scalar","multiplyVectors","applyMatrix4","elements","w","divide","divideScalar","clamp","clampScalar","minVal","maxVal","clampLength","lengthSq","normalize","setLength","lerp","alpha","lerpVectors","cross","crossVectors","distanceTo","distanceToSquared","fromArray","array","random","PathPoint","pos","dir","right","up","dist","widthScale","sharp","lerpPathPoints","source","Matrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","multiplyMatrices","makeRotationAxis","axis","t","tx","ty","matrix","me","Curve","type","arcLengthDivisions","getPoint","console","warn","getPointAt","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","needsUpdate","cache","current","arcLengths","il","targetArcLength","low","high","comparison","floor","lengthBefore","lengthAfter","segmentLength","segmentFraction","QuadraticBezierP0","k","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","QuadraticBezierCurve3","v0","isQuadraticBezierCurve3","helpVec3_1","helpVec3_2","helpVec3_3","helpMat4","helpCurve","_getCornerBezierCurve","cornerRadius","firstCorner","lastDir","nextDir","lastDirLength","nextDirLength","v0Dist","v2Dist","PathPointList","cornerSplit","close","slice","_start","_corner","_end","_getByIndex","Number","MAX_VALUE","tz","lastPoint","vec","EPSILON","theta","acos","curve","samplerPoints","_sharpCorner","dirType","_cos","UP","expandPaths","pathPointList","generatePathVertexData","width","progress","halfWidth","sideWidth","totalDistance","progressDistance","sharpUvOffset","verticesCount","left","leftOffset","rightOffset","tempPoint1","tempPoint2","addVertices","pathPoint","first","sharpCorner","uvDist","_right","leftDist","rightDist","sideOffset","longerOffset","longEdge","_len","_dist","prevPoint"],"mappings":";;;;;;;;;;;AAEAA,YAAc,CAAAC,OAAd,GAAiBC,MAAjB,CAAA;;AACsBC,oBAAA,CAAA,SAAA,CAAA,GAAGD,OAAzB;;IAEA,SAASA,MAAT,CAAgBE,IAAhB,EAAsBC,WAAtB,EAAmCC,GAAnC,EAAwC;MAEpCA,GAAG,GAAGA,GAAG,IAAI,CAAb,CAAA;IAEA,EAAA,IAAIC,QAAQ,GAAGF,WAAW,IAAIA,WAAW,CAACG,MAA1C;IAAA,MACIC,QAAQ,GAAGF,QAAQ,GAAGF,WAAW,CAAC,CAAD,CAAX,GAAiBC,GAApB,GAA0BF,IAAI,CAACI,MADtD;IAAA,MAEIE,SAAS,GAAGC,UAAU,CAACP,IAAD,EAAO,CAAP,EAAUK,QAAV,EAAoBH,GAApB,EAAyB,IAAzB,CAF1B;UAGIM,SAAS,GAAG,EAHhB,CAAA;IAKA,EAAA,IAAI,CAACF,SAAD,IAAcA,SAAS,CAACG,IAAV,KAAmBH,SAAS,CAACI,IAA/C,EAAqD,OAAOF,SAAP,CAAA;IAErD,EAAA,IAAIG,IAAJ,EAAUC,IAAV,EAAgBC,IAAhB,EAAsBC,IAAtB,EAA4BC,CAA5B,EAA+BC,CAA/B,EAAkCC,OAAlC,CAAA;IAEA,EAAA,IAAId,QAAJ,EAAcG,SAAS,GAAGY,cAAc,CAAClB,IAAD,EAAOC,WAAP,EAAoBK,SAApB,EAA+BJ,GAA/B,CAA1B,CAbsB;;IAgBpC,EAAA,IAAIF,IAAI,CAACI,MAAL,GAAc,EAAA,GAAKF,GAAvB,EAA4B;IACxBS,IAAAA,IAAI,GAAGE,IAAI,GAAGb,IAAI,CAAC,CAAD,CAAlB,CAAA;IACAY,IAAAA,IAAI,GAAGE,IAAI,GAAGd,IAAI,CAAC,CAAD,CAAlB,CAAA;;IAEA,IAAA,KAAK,IAAImB,CAAC,GAAGjB,GAAb,EAAkBiB,CAAC,GAAGd,QAAtB,EAAgCc,CAAC,IAAIjB,GAArC,EAA0C;IACtCa,MAAAA,CAAC,GAAGf,IAAI,CAACmB,CAAD,CAAR,CAAA;IACAH,MAAAA,CAAC,GAAGhB,IAAI,CAACmB,CAAC,GAAG,CAAL,CAAR,CAAA;IACA,MAAA,IAAIJ,CAAC,GAAGJ,IAAR,EAAcA,IAAI,GAAGI,CAAP,CAAA;IACd,MAAA,IAAIC,CAAC,GAAGJ,IAAR,EAAcA,IAAI,GAAGI,CAAP,CAAA;IACd,MAAA,IAAID,CAAC,GAAGF,IAAR,EAAcA,IAAI,GAAGE,CAAP,CAAA;IACd,MAAA,IAAIC,CAAC,GAAGF,IAAR,EAAcA,IAAI,GAAGE,CAAP,CAAA;IACjB,KAXuB;;;IAcxBC,IAAAA,OAAO,GAAGG,IAAI,CAACC,GAAL,CAASR,IAAI,GAAGF,IAAhB,EAAsBG,IAAI,GAAGF,IAA7B,CAAV,CAAA;QACAK,OAAO,GAAGA,OAAO,KAAK,CAAZ,GAAgB,KAAQA,GAAAA,OAAxB,GAAkC,CAA5C,CAAA;IACH,GAAA;;IAEDK,EAAAA,YAAY,CAAChB,SAAD,EAAYE,SAAZ,EAAuBN,GAAvB,EAA4BS,IAA5B,EAAkCC,IAAlC,EAAwCK,OAAxC,EAAiD,CAAjD,CAAZ,CAAA;IAEA,EAAA,OAAOT,SAAP,CAAA;IACH;;;IAGD,SAASD,UAAT,CAAoBP,IAApB,EAA0BuB,KAA1B,EAAiCC,GAAjC,EAAsCtB,GAAtC,EAA2CuB,SAA3C,EAAsD;MAClD,IAAIN,CAAJ,EAAOO,IAAP,CAAA;;IAEA,EAAA,IAAID,SAAS,KAAME,UAAU,CAAC3B,IAAD,EAAOuB,KAAP,EAAcC,GAAd,EAAmBtB,GAAnB,CAAV,GAAoC,CAAvD,EAA2D;QACvD,KAAKiB,CAAC,GAAGI,KAAT,EAAgBJ,CAAC,GAAGK,GAApB,EAAyBL,CAAC,IAAIjB,GAA9B,EAAA;IAAmCwB,MAAAA,IAAI,GAAGE,UAAU,CAACT,CAAD,EAAInB,IAAI,CAACmB,CAAD,CAAR,EAAanB,IAAI,CAACmB,CAAC,GAAG,CAAL,CAAjB,EAA0BO,IAA1B,CAAjB,CAAA;IAAnC,KAAA;IACH,GAFD,MAEO;IACH,IAAA,KAAKP,CAAC,GAAGK,GAAG,GAAGtB,GAAf,EAAoBiB,CAAC,IAAII,KAAzB,EAAgCJ,CAAC,IAAIjB,GAArC,EAAA;IAA0CwB,MAAAA,IAAI,GAAGE,UAAU,CAACT,CAAD,EAAInB,IAAI,CAACmB,CAAD,CAAR,EAAanB,IAAI,CAACmB,CAAC,GAAG,CAAL,CAAjB,EAA0BO,IAA1B,CAAjB,CAAA;IAA1C,KAAA;IACH,GAAA;;MAED,IAAIA,IAAI,IAAIG,MAAM,CAACH,IAAD,EAAOA,IAAI,CAACjB,IAAZ,CAAlB,EAAqC;QACjCqB,UAAU,CAACJ,IAAD,CAAV,CAAA;QACAA,IAAI,GAAGA,IAAI,CAACjB,IAAZ,CAAA;IACH,GAAA;;IAED,EAAA,OAAOiB,IAAP,CAAA;IACH;;;IAGD,SAASK,YAAT,CAAsBR,KAAtB,EAA6BC,GAA7B,EAAkC;IAC9B,EAAA,IAAI,CAACD,KAAL,EAAY,OAAOA,KAAP,CAAA;IACZ,EAAA,IAAI,CAACC,GAAL,EAAUA,GAAG,GAAGD,KAAN,CAAA;MAEV,IAAIS,CAAC,GAAGT,KAAR;IAAA,MACIU,KADJ,CAAA;;MAEA,GAAG;IACCA,IAAAA,KAAK,GAAG,KAAR,CAAA;;IAEA,IAAA,IAAI,CAACD,CAAC,CAACE,OAAH,KAAeL,MAAM,CAACG,CAAD,EAAIA,CAAC,CAACvB,IAAN,CAAN,IAAqB0B,IAAI,CAACH,CAAC,CAACtB,IAAH,EAASsB,CAAT,EAAYA,CAAC,CAACvB,IAAd,CAAJ,KAA4B,CAAhE,CAAJ,EAAwE;UACpEqB,UAAU,CAACE,CAAD,CAAV,CAAA;IACAA,MAAAA,CAAC,GAAGR,GAAG,GAAGQ,CAAC,CAACtB,IAAZ,CAAA;IACA,MAAA,IAAIsB,CAAC,KAAKA,CAAC,CAACvB,IAAZ,EAAkB,MAAA;IAClBwB,MAAAA,KAAK,GAAG,IAAR,CAAA;IAEH,KAND,MAMO;UACHD,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;IACH,KAAA;IACJ,GAZD,QAYSwB,KAAK,IAAID,CAAC,KAAKR,GAZxB,EAAA;;IAcA,EAAA,OAAOA,GAAP,CAAA;IACH;;;IAGD,SAASF,YAAT,CAAsBc,GAAtB,EAA2B5B,SAA3B,EAAsCN,GAAtC,EAA2CS,IAA3C,EAAiDC,IAAjD,EAAuDK,OAAvD,EAAgEoB,IAAhE,EAAsE;IAClE,EAAA,IAAI,CAACD,GAAL,EAAU,OADwD;;IAIlE,EAAA,IAAI,CAACC,IAAD,IAASpB,OAAb,EAAsBqB,UAAU,CAACF,GAAD,EAAMzB,IAAN,EAAYC,IAAZ,EAAkBK,OAAlB,CAAV,CAAA;MAEtB,IAAIsB,IAAI,GAAGH,GAAX;IAAA,MACI1B,IADJ;UACUD,IADV,CANkE;;IAUlE,EAAA,OAAO2B,GAAG,CAAC1B,IAAJ,KAAa0B,GAAG,CAAC3B,IAAxB,EAA8B;QAC1BC,IAAI,GAAG0B,GAAG,CAAC1B,IAAX,CAAA;QACAD,IAAI,GAAG2B,GAAG,CAAC3B,IAAX,CAAA;;IAEA,IAAA,IAAIQ,OAAO,GAAGuB,WAAW,CAACJ,GAAD,EAAMzB,IAAN,EAAYC,IAAZ,EAAkBK,OAAlB,CAAd,GAA2CwB,KAAK,CAACL,GAAD,CAA3D,EAAkE;IAC1E;UACY5B,SAAS,CAACkC,IAAV,CAAehC,IAAI,CAACS,CAAL,GAASjB,GAAT,GAAe,CAA9B,CAAA,CAAA;UACAM,SAAS,CAACkC,IAAV,CAAeN,GAAG,CAACjB,CAAJ,GAAQjB,GAAR,GAAc,CAA7B,CAAA,CAAA;UACAM,SAAS,CAACkC,IAAV,CAAejC,IAAI,CAACU,CAAL,GAASjB,GAAT,GAAe,CAA9B,CAAA,CAAA;IAEA4B,MAAAA,UAAU,CAACM,GAAD,CAAV,CAN8D;;UAS9DA,GAAG,GAAG3B,IAAI,CAACA,IAAX,CAAA;UACA8B,IAAI,GAAG9B,IAAI,CAACA,IAAZ,CAAA;IAEA,MAAA,SAAA;IACH,KAAA;;QAED2B,GAAG,GAAG3B,IAAN,CAnB0B;;QAsB1B,IAAI2B,GAAG,KAAKG,IAAZ,EAAkB;IAC1B;UACY,IAAI,CAACF,IAAL,EAAW;IACPf,QAAAA,YAAY,CAACS,YAAY,CAACK,GAAD,CAAb,EAAoB5B,SAApB,EAA+BN,GAA/B,EAAoCS,IAApC,EAA0CC,IAA1C,EAAgDK,OAAhD,EAAyD,CAAzD,CAAZ,CADO;IAIV,OAJD,MAIO,IAAIoB,IAAI,KAAK,CAAb,EAAgB;YACnBD,GAAG,GAAGO,sBAAsB,CAACZ,YAAY,CAACK,GAAD,CAAb,EAAoB5B,SAApB,EAA+BN,GAA/B,CAA5B,CAAA;IACAoB,QAAAA,YAAY,CAACc,GAAD,EAAM5B,SAAN,EAAiBN,GAAjB,EAAsBS,IAAtB,EAA4BC,IAA5B,EAAkCK,OAAlC,EAA2C,CAA3C,CAAZ,CAFmB;IAKtB,OALM,MAKA,IAAIoB,IAAI,KAAK,CAAb,EAAgB;IACnBO,QAAAA,WAAW,CAACR,GAAD,EAAM5B,SAAN,EAAiBN,GAAjB,EAAsBS,IAAtB,EAA4BC,IAA5B,EAAkCK,OAAlC,CAAX,CAAA;IACH,OAAA;;IAED,MAAA,MAAA;IACH,KAAA;IACJ,GAAA;IACJ;;;IAGD,SAASwB,KAAT,CAAeL,GAAf,EAAoB;IAChB,EAAA,IAAIS,CAAC,GAAGT,GAAG,CAAC1B,IAAZ;UACIoC,CAAC,GAAGV,GADR;IAAA,MAEIW,CAAC,GAAGX,GAAG,CAAC3B,IAFZ,CAAA;IAIA,EAAA,IAAI0B,IAAI,CAACU,CAAD,EAAIC,CAAJ,EAAOC,CAAP,CAAJ,IAAiB,CAArB,EAAwB,OAAO,KAAP,CALR;IAOpB;;IACI,EAAA,IAAIC,EAAE,GAAGH,CAAC,CAAC9B,CAAX;IAAA,MAAckC,EAAE,GAAGH,CAAC,CAAC/B,CAArB;IAAA,MAAwBmC,EAAE,GAAGH,CAAC,CAAChC,CAA/B;IAAA,MAAkCoC,EAAE,GAAGN,CAAC,CAAC7B,CAAzC;IAAA,MAA4CoC,EAAE,GAAGN,CAAC,CAAC9B,CAAnD;IAAA,MAAsDqC,EAAE,GAAGN,CAAC,CAAC/B,CAA7D,CARgB;;MAWhB,IAAIsC,EAAE,GAAGN,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAAzD;UACIK,EAAE,GAAGJ,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EADzD;UAEIG,EAAE,GAAGR,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAFzD;UAGIO,EAAE,GAAGN,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAHzD,CAAA;IAKA,EAAA,IAAIrB,CAAC,GAAGe,CAAC,CAACtC,IAAV,CAAA;;MACA,OAAOuB,CAAC,KAAKa,CAAb,EAAgB;IACZ,IAAA,IAAIb,CAAC,CAACjB,CAAF,IAAOuC,EAAP,IAAatB,CAAC,CAACjB,CAAF,IAAOyC,EAApB,IAA0BxB,CAAC,CAAChB,CAAF,IAAOuC,EAAjC,IAAuCvB,CAAC,CAAChB,CAAF,IAAOyC,EAA9C,IACAC,eAAe,CAACV,EAAD,EAAKG,EAAL,EAASF,EAAT,EAAaG,EAAb,EAAiBF,EAAjB,EAAqBG,EAArB,EAAyBrB,CAAC,CAACjB,CAA3B,EAA8BiB,CAAC,CAAChB,CAAhC,CADf,IAEAmB,IAAI,CAACH,CAAC,CAACtB,IAAH,EAASsB,CAAT,EAAYA,CAAC,CAACvB,IAAd,CAAJ,IAA2B,CAF/B,EAEkC,OAAO,KAAP,CAAA;QAClCuB,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;IACH,GAAA;;IAED,EAAA,OAAO,IAAP,CAAA;IACH,CAAA;;IAED,SAAS+B,WAAT,CAAqBJ,GAArB,EAA0BzB,IAA1B,EAAgCC,IAAhC,EAAsCK,OAAtC,EAA+C;IAC3C,EAAA,IAAI4B,CAAC,GAAGT,GAAG,CAAC1B,IAAZ;UACIoC,CAAC,GAAGV,GADR;IAAA,MAEIW,CAAC,GAAGX,GAAG,CAAC3B,IAFZ,CAAA;IAIA,EAAA,IAAI0B,IAAI,CAACU,CAAD,EAAIC,CAAJ,EAAOC,CAAP,CAAJ,IAAiB,CAArB,EAAwB,OAAO,KAAP,CALmB;;IAO3C,EAAA,IAAIC,EAAE,GAAGH,CAAC,CAAC9B,CAAX;IAAA,MAAckC,EAAE,GAAGH,CAAC,CAAC/B,CAArB;IAAA,MAAwBmC,EAAE,GAAGH,CAAC,CAAChC,CAA/B;IAAA,MAAkCoC,EAAE,GAAGN,CAAC,CAAC7B,CAAzC;IAAA,MAA4CoC,EAAE,GAAGN,CAAC,CAAC9B,CAAnD;IAAA,MAAsDqC,EAAE,GAAGN,CAAC,CAAC/B,CAA7D,CAP2C;;MAU3C,IAAIsC,EAAE,GAAGN,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAAzD;UACIK,EAAE,GAAGJ,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EADzD;UAEIG,EAAE,GAAGR,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAFzD;UAGIO,EAAE,GAAGN,EAAE,GAAGC,EAAL,GAAWD,EAAE,GAAGE,EAAL,GAAUF,EAAV,GAAeE,EAA1B,GAAiCD,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAHzD,CAV2C;;IAgB3C,EAAA,IAAIM,IAAI,GAAGC,MAAM,CAACN,EAAD,EAAKC,EAAL,EAAS5C,IAAT,EAAeC,IAAf,EAAqBK,OAArB,CAAjB;IAAA,MACI4C,IAAI,GAAGD,MAAM,CAACJ,EAAD,EAAKC,EAAL,EAAS9C,IAAT,EAAeC,IAAf,EAAqBK,OAArB,CADjB,CAAA;IAGA,EAAA,IAAIe,CAAC,GAAGI,GAAG,CAAC0B,KAAZ;IAAA,MACIC,CAAC,GAAG3B,GAAG,CAAC4B,KADZ,CAnB2C;;IAuB3C,EAAA,OAAOhC,CAAC,IAAIA,CAAC,CAACiC,CAAF,IAAON,IAAZ,IAAoBI,CAApB,IAAyBA,CAAC,CAACE,CAAF,IAAOJ,IAAvC,EAA6C;IACzC,IAAA,IAAI7B,CAAC,CAACjB,CAAF,IAAOuC,EAAP,IAAatB,CAAC,CAACjB,CAAF,IAAOyC,EAApB,IAA0BxB,CAAC,CAAChB,CAAF,IAAOuC,EAAjC,IAAuCvB,CAAC,CAAChB,CAAF,IAAOyC,EAA9C,IAAoDzB,CAAC,KAAKa,CAA1D,IAA+Db,CAAC,KAAKe,CAArE,IACAW,eAAe,CAACV,EAAD,EAAKG,EAAL,EAASF,EAAT,EAAaG,EAAb,EAAiBF,EAAjB,EAAqBG,EAArB,EAAyBrB,CAAC,CAACjB,CAA3B,EAA8BiB,CAAC,CAAChB,CAAhC,CADf,IACqDmB,IAAI,CAACH,CAAC,CAACtB,IAAH,EAASsB,CAAT,EAAYA,CAAC,CAACvB,IAAd,CAAJ,IAA2B,CADpF,EACuF,OAAO,KAAP,CAAA;QACvFuB,CAAC,GAAGA,CAAC,CAAC8B,KAAN,CAAA;IAEA,IAAA,IAAIC,CAAC,CAAChD,CAAF,IAAOuC,EAAP,IAAaS,CAAC,CAAChD,CAAF,IAAOyC,EAApB,IAA0BO,CAAC,CAAC/C,CAAF,IAAOuC,EAAjC,IAAuCQ,CAAC,CAAC/C,CAAF,IAAOyC,EAA9C,IAAoDM,CAAC,KAAKlB,CAA1D,IAA+DkB,CAAC,KAAKhB,CAArE,IACAW,eAAe,CAACV,EAAD,EAAKG,EAAL,EAASF,EAAT,EAAaG,EAAb,EAAiBF,EAAjB,EAAqBG,EAArB,EAAyBU,CAAC,CAAChD,CAA3B,EAA8BgD,CAAC,CAAC/C,CAAhC,CADf,IACqDmB,IAAI,CAAC4B,CAAC,CAACrD,IAAH,EAASqD,CAAT,EAAYA,CAAC,CAACtD,IAAd,CAAJ,IAA2B,CADpF,EACuF,OAAO,KAAP,CAAA;QACvFsD,CAAC,GAAGA,CAAC,CAACC,KAAN,CAAA;IACH,GA/B0C;;;IAkC3C,EAAA,OAAOhC,CAAC,IAAIA,CAAC,CAACiC,CAAF,IAAON,IAAnB,EAAyB;IACrB,IAAA,IAAI3B,CAAC,CAACjB,CAAF,IAAOuC,EAAP,IAAatB,CAAC,CAACjB,CAAF,IAAOyC,EAApB,IAA0BxB,CAAC,CAAChB,CAAF,IAAOuC,EAAjC,IAAuCvB,CAAC,CAAChB,CAAF,IAAOyC,EAA9C,IAAoDzB,CAAC,KAAKa,CAA1D,IAA+Db,CAAC,KAAKe,CAArE,IACAW,eAAe,CAACV,EAAD,EAAKG,EAAL,EAASF,EAAT,EAAaG,EAAb,EAAiBF,EAAjB,EAAqBG,EAArB,EAAyBrB,CAAC,CAACjB,CAA3B,EAA8BiB,CAAC,CAAChB,CAAhC,CADf,IACqDmB,IAAI,CAACH,CAAC,CAACtB,IAAH,EAASsB,CAAT,EAAYA,CAAC,CAACvB,IAAd,CAAJ,IAA2B,CADpF,EACuF,OAAO,KAAP,CAAA;QACvFuB,CAAC,GAAGA,CAAC,CAAC8B,KAAN,CAAA;IACH,GAtC0C;;;IAyC3C,EAAA,OAAOC,CAAC,IAAIA,CAAC,CAACE,CAAF,IAAOJ,IAAnB,EAAyB;IACrB,IAAA,IAAIE,CAAC,CAAChD,CAAF,IAAOuC,EAAP,IAAaS,CAAC,CAAChD,CAAF,IAAOyC,EAApB,IAA0BO,CAAC,CAAC/C,CAAF,IAAOuC,EAAjC,IAAuCQ,CAAC,CAAC/C,CAAF,IAAOyC,EAA9C,IAAoDM,CAAC,KAAKlB,CAA1D,IAA+DkB,CAAC,KAAKhB,CAArE,IACAW,eAAe,CAACV,EAAD,EAAKG,EAAL,EAASF,EAAT,EAAaG,EAAb,EAAiBF,EAAjB,EAAqBG,EAArB,EAAyBU,CAAC,CAAChD,CAA3B,EAA8BgD,CAAC,CAAC/C,CAAhC,CADf,IACqDmB,IAAI,CAAC4B,CAAC,CAACrD,IAAH,EAASqD,CAAT,EAAYA,CAAC,CAACtD,IAAd,CAAJ,IAA2B,CADpF,EACuF,OAAO,KAAP,CAAA;QACvFsD,CAAC,GAAGA,CAAC,CAACC,KAAN,CAAA;IACH,GAAA;;IAED,EAAA,OAAO,IAAP,CAAA;IACH;;;IAGD,SAASrB,sBAAT,CAAgCpB,KAAhC,EAAuCf,SAAvC,EAAkDN,GAAlD,EAAuD;MACnD,IAAI8B,CAAC,GAAGT,KAAR,CAAA;;MACA,GAAG;IACC,IAAA,IAAIsB,CAAC,GAAGb,CAAC,CAACtB,IAAV;IAAA,QACIoC,CAAC,GAAGd,CAAC,CAACvB,IAAF,CAAOA,IADf,CAAA;;IAGA,IAAA,IAAI,CAACoB,MAAM,CAACgB,CAAD,EAAIC,CAAJ,CAAP,IAAiBoB,UAAU,CAACrB,CAAD,EAAIb,CAAJ,EAAOA,CAAC,CAACvB,IAAT,EAAeqC,CAAf,CAA3B,IAAgDqB,aAAa,CAACtB,CAAD,EAAIC,CAAJ,CAA7D,IAAuEqB,aAAa,CAACrB,CAAD,EAAID,CAAJ,CAAxF,EAAgG;UAE5FrC,SAAS,CAACkC,IAAV,CAAeG,CAAC,CAAC1B,CAAF,GAAMjB,GAAN,GAAY,CAA3B,CAAA,CAAA;UACAM,SAAS,CAACkC,IAAV,CAAeV,CAAC,CAACb,CAAF,GAAMjB,GAAN,GAAY,CAA3B,CAAA,CAAA;UACAM,SAAS,CAACkC,IAAV,CAAeI,CAAC,CAAC3B,CAAF,GAAMjB,GAAN,GAAY,CAA3B,CAAA,CAJ4F;;UAO5F4B,UAAU,CAACE,CAAD,CAAV,CAAA;IACAF,MAAAA,UAAU,CAACE,CAAC,CAACvB,IAAH,CAAV,CAAA;UAEAuB,CAAC,GAAGT,KAAK,GAAGuB,CAAZ,CAAA;IACH,KAAA;;QACDd,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAhBJ,QAiBSuB,CAAC,KAAKT,KAjBf,EAAA;;MAmBA,OAAOQ,YAAY,CAACC,CAAD,CAAnB,CAAA;IACH;;;IAGD,SAASY,WAAT,CAAqBrB,KAArB,EAA4Bf,SAA5B,EAAuCN,GAAvC,EAA4CS,IAA5C,EAAkDC,IAAlD,EAAwDK,OAAxD,EAAiE;IACjE;MACI,IAAI4B,CAAC,GAAGtB,KAAR,CAAA;;MACA,GAAG;IACC,IAAA,IAAIuB,CAAC,GAAGD,CAAC,CAACpC,IAAF,CAAOA,IAAf,CAAA;;IACA,IAAA,OAAOqC,CAAC,KAAKD,CAAC,CAACnC,IAAf,EAAqB;IACjB,MAAA,IAAImC,CAAC,CAAC1B,CAAF,KAAQ2B,CAAC,CAAC3B,CAAV,IAAeiD,eAAe,CAACvB,CAAD,EAAIC,CAAJ,CAAlC,EAA0C;IACtD;YACgB,IAAIC,CAAC,GAAGsB,YAAY,CAACxB,CAAD,EAAIC,CAAJ,CAApB,CAFsC;;YAKtCD,CAAC,GAAGd,YAAY,CAACc,CAAD,EAAIA,CAAC,CAACpC,IAAN,CAAhB,CAAA;YACAsC,CAAC,GAAGhB,YAAY,CAACgB,CAAD,EAAIA,CAAC,CAACtC,IAAN,CAAhB,CANsC;;IAStCa,QAAAA,YAAY,CAACuB,CAAD,EAAIrC,SAAJ,EAAeN,GAAf,EAAoBS,IAApB,EAA0BC,IAA1B,EAAgCK,OAAhC,EAAyC,CAAzC,CAAZ,CAAA;IACAK,QAAAA,YAAY,CAACyB,CAAD,EAAIvC,SAAJ,EAAeN,GAAf,EAAoBS,IAApB,EAA0BC,IAA1B,EAAgCK,OAAhC,EAAyC,CAAzC,CAAZ,CAAA;IACA,QAAA,OAAA;IACH,OAAA;;UACD6B,CAAC,GAAGA,CAAC,CAACrC,IAAN,CAAA;IACH,KAAA;;QACDoC,CAAC,GAAGA,CAAC,CAACpC,IAAN,CAAA;OAlBJ,QAmBSoC,CAAC,KAAKtB,KAnBf,EAAA;IAoBH;;;IAGD,SAASL,cAAT,CAAwBlB,IAAxB,EAA8BC,WAA9B,EAA2CK,SAA3C,EAAsDJ,GAAtD,EAA2D;MACvD,IAAIoE,KAAK,GAAG,EAAZ;IAAA,MACInD,CADJ;IAAA,MACOoD,GADP;IAAA,MACYhD,KADZ;IAAA,MACmBC,GADnB;IAAA,MACwBgD,IADxB,CAAA;;IAGA,EAAA,KAAKrD,CAAC,GAAG,CAAJ,EAAOoD,GAAG,GAAGtE,WAAW,CAACG,MAA9B,EAAsCe,CAAC,GAAGoD,GAA1C,EAA+CpD,CAAC,EAAhD,EAAoD;IAChDI,IAAAA,KAAK,GAAGtB,WAAW,CAACkB,CAAD,CAAX,GAAiBjB,GAAzB,CAAA;IACAsB,IAAAA,GAAG,GAAGL,CAAC,GAAGoD,GAAG,GAAG,CAAV,GAActE,WAAW,CAACkB,CAAC,GAAG,CAAL,CAAX,GAAqBjB,GAAnC,GAAyCF,IAAI,CAACI,MAApD,CAAA;IACAoE,IAAAA,IAAI,GAAGjE,UAAU,CAACP,IAAD,EAAOuB,KAAP,EAAcC,GAAd,EAAmBtB,GAAnB,EAAwB,KAAxB,CAAjB,CAAA;QACA,IAAIsE,IAAI,KAAKA,IAAI,CAAC/D,IAAlB,EAAwB+D,IAAI,CAACtC,OAAL,GAAe,IAAf,CAAA;IACxBoC,IAAAA,KAAK,CAAC5B,IAAN,CAAW+B,WAAW,CAACD,IAAD,CAAtB,CAAA,CAAA;IACH,GAAA;;IAEDF,EAAAA,KAAK,CAACI,IAAN,CAAWC,QAAX,EAZuD;;IAevD,EAAA,KAAKxD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGmD,KAAK,CAAClE,MAAtB,EAA8Be,CAAC,EAA/B,EAAmC;QAC/Bb,SAAS,GAAGsE,aAAa,CAACN,KAAK,CAACnD,CAAD,CAAN,EAAWb,SAAX,CAAzB,CAAA;IACH,GAAA;;IAED,EAAA,OAAOA,SAAP,CAAA;IACH,CAAA;;IAED,SAASqE,QAAT,CAAkB9B,CAAlB,EAAqBC,CAArB,EAAwB;IACpB,EAAA,OAAOD,CAAC,CAAC9B,CAAF,GAAM+B,CAAC,CAAC/B,CAAf,CAAA;IACH;;;IAGD,SAAS6D,aAAT,CAAuBC,IAAvB,EAA6BvE,SAA7B,EAAwC;IACpC,EAAA,IAAIwE,MAAM,GAAGC,cAAc,CAACF,IAAD,EAAOvE,SAAP,CAA3B,CAAA;;MACA,IAAI,CAACwE,MAAL,EAAa;IACT,IAAA,OAAOxE,SAAP,CAAA;IACH,GAAA;;MAED,IAAI0E,aAAa,GAAGX,YAAY,CAACS,MAAD,EAASD,IAAT,CAAhC,CANoC;;IASpC9C,EAAAA,YAAY,CAACiD,aAAD,EAAgBA,aAAa,CAACvE,IAA9B,CAAZ,CAAA;IACA,EAAA,OAAOsB,YAAY,CAAC+C,MAAD,EAASA,MAAM,CAACrE,IAAhB,CAAnB,CAAA;IACH;;;IAGD,SAASsE,cAAT,CAAwBF,IAAxB,EAA8BvE,SAA9B,EAAyC;MACrC,IAAI0B,CAAC,GAAG1B,SAAR;IAAA,MACI2E,EAAE,GAAGJ,IAAI,CAAC9D,CADd;IAAA,MAEImE,EAAE,GAAGL,IAAI,CAAC7D,CAFd;UAGImE,EAAE,GAAG,CAACC,QAHV;UAIIC,CAJJ,CADqC;IAQzC;;MACI,GAAG;QACC,IAAIH,EAAE,IAAIlD,CAAC,CAAChB,CAAR,IAAakE,EAAE,IAAIlD,CAAC,CAACvB,IAAF,CAAOO,CAA1B,IAA+BgB,CAAC,CAACvB,IAAF,CAAOO,CAAP,KAAagB,CAAC,CAAChB,CAAlD,EAAqD;IACjD,MAAA,IAAID,CAAC,GAAGiB,CAAC,CAACjB,CAAF,GAAM,CAACmE,EAAE,GAAGlD,CAAC,CAAChB,CAAR,KAAcgB,CAAC,CAACvB,IAAF,CAAOM,CAAP,GAAWiB,CAAC,CAACjB,CAA3B,KAAiCiB,CAAC,CAACvB,IAAF,CAAOO,CAAP,GAAWgB,CAAC,CAAChB,CAA9C,CAAd,CAAA;;IACA,MAAA,IAAID,CAAC,IAAIkE,EAAL,IAAWlE,CAAC,GAAGoE,EAAnB,EAAuB;IACnBA,QAAAA,EAAE,GAAGpE,CAAL,CAAA;IACAsE,QAAAA,CAAC,GAAGrD,CAAC,CAACjB,CAAF,GAAMiB,CAAC,CAACvB,IAAF,CAAOM,CAAb,GAAiBiB,CAAjB,GAAqBA,CAAC,CAACvB,IAA3B,CAAA;IACA,QAAA,IAAIM,CAAC,KAAKkE,EAAV,EAAc,OAAOI,CAAP,CAHK;IAItB,OAAA;IACJ,KAAA;;QACDrD,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OATJ,QAUSuB,CAAC,KAAK1B,SAVf,EAAA;;IAYA,EAAA,IAAI,CAAC+E,CAAL,EAAQ,OAAO,IAAP,CArB6B;IAwBzC;IACA;;MAEI,IAAI9C,IAAI,GAAG8C,CAAX;IAAA,MACIC,EAAE,GAAGD,CAAC,CAACtE,CADX;IAAA,MAEIwE,EAAE,GAAGF,CAAC,CAACrE,CAFX;UAGIwE,MAAM,GAAGJ,QAHb;IAAA,MAIIK,GAJJ,CAAA;IAMAzD,EAAAA,CAAC,GAAGqD,CAAJ,CAAA;;MAEA,GAAG;QACC,IAAIJ,EAAE,IAAIjD,CAAC,CAACjB,CAAR,IAAaiB,CAAC,CAACjB,CAAF,IAAOuE,EAApB,IAA0BL,EAAE,KAAKjD,CAAC,CAACjB,CAAnC,IACI2C,eAAe,CAACwB,EAAE,GAAGK,EAAL,GAAUN,EAAV,GAAeE,EAAhB,EAAoBD,EAApB,EAAwBI,EAAxB,EAA4BC,EAA5B,EAAgCL,EAAE,GAAGK,EAAL,GAAUJ,EAAV,GAAeF,EAA/C,EAAmDC,EAAnD,EAAuDlD,CAAC,CAACjB,CAAzD,EAA4DiB,CAAC,CAAChB,CAA9D,CADvB,EACyF;IAErFyE,MAAAA,GAAG,GAAGrE,IAAI,CAACsE,GAAL,CAASR,EAAE,GAAGlD,CAAC,CAAChB,CAAhB,CAAA,IAAsBiE,EAAE,GAAGjD,CAAC,CAACjB,CAA7B,CAAN,CAFqF;;IAIrF,MAAA,IAAIoD,aAAa,CAACnC,CAAD,EAAI6C,IAAJ,CAAb,KACCY,GAAG,GAAGD,MAAN,IAAiBC,GAAG,KAAKD,MAAR,KAAmBxD,CAAC,CAACjB,CAAF,GAAMsE,CAAC,CAACtE,CAAR,IAAciB,CAAC,CAACjB,CAAF,KAAQsE,CAAC,CAACtE,CAAV,IAAe4E,oBAAoB,CAACN,CAAD,EAAIrD,CAAJ,CAApE,CADlB,CAAJ,EACsG;IAClGqD,QAAAA,CAAC,GAAGrD,CAAJ,CAAA;IACAwD,QAAAA,MAAM,GAAGC,GAAT,CAAA;IACH,OAAA;IACJ,KAAA;;QAEDzD,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAbJ,QAcSuB,CAAC,KAAKO,IAdf,EAAA;;IAgBA,EAAA,OAAO8C,CAAP,CAAA;IACH;;;IAGD,SAASM,oBAAT,CAA8BN,CAA9B,EAAiCrD,CAAjC,EAAoC;IAChC,EAAA,OAAOG,IAAI,CAACkD,CAAC,CAAC3E,IAAH,EAAS2E,CAAT,EAAYrD,CAAC,CAACtB,IAAd,CAAJ,GAA0B,CAA1B,IAA+ByB,IAAI,CAACH,CAAC,CAACvB,IAAH,EAAS4E,CAAT,EAAYA,CAAC,CAAC5E,IAAd,CAAJ,GAA0B,CAAhE,CAAA;IACH;;;IAGD,SAAS6B,UAAT,CAAoBf,KAApB,EAA2BZ,IAA3B,EAAiCC,IAAjC,EAAuCK,OAAvC,EAAgD;MAC5C,IAAIe,CAAC,GAAGT,KAAR,CAAA;;MACA,GAAG;QACC,IAAIS,CAAC,CAACiC,CAAF,KAAQ,CAAZ,EAAejC,CAAC,CAACiC,CAAF,GAAML,MAAM,CAAC5B,CAAC,CAACjB,CAAH,EAAMiB,CAAC,CAAChB,CAAR,EAAWL,IAAX,EAAiBC,IAAjB,EAAuBK,OAAvB,CAAZ,CAAA;IACfe,IAAAA,CAAC,CAAC8B,KAAF,GAAU9B,CAAC,CAACtB,IAAZ,CAAA;IACAsB,IAAAA,CAAC,CAACgC,KAAF,GAAUhC,CAAC,CAACvB,IAAZ,CAAA;QACAuB,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAJJ,QAKSuB,CAAC,KAAKT,KALf,EAAA;;IAOAS,EAAAA,CAAC,CAAC8B,KAAF,CAAQE,KAAR,GAAgB,IAAhB,CAAA;MACAhC,CAAC,CAAC8B,KAAF,GAAU,IAAV,CAAA;MAEA8B,UAAU,CAAC5D,CAAD,CAAV,CAAA;IACH;IAGD;;;IACA,SAAS4D,UAAT,CAAoBpB,IAApB,EAA0B;IACtB,EAAA,IAAIrD,CAAJ;IAAA,MAAOa,CAAP;IAAA,MAAU6D,CAAV;IAAA,MAAaC,CAAb;IAAA,MAAgBC,IAAhB;IAAA,MAAsBC,SAAtB;IAAA,MAAiCC,KAAjC;IAAA,MAAwCC,KAAxC;UACIC,MAAM,GAAG,CADb,CAAA;;MAGA,GAAG;IACCnE,IAAAA,CAAC,GAAGwC,IAAJ,CAAA;IACAA,IAAAA,IAAI,GAAG,IAAP,CAAA;IACAuB,IAAAA,IAAI,GAAG,IAAP,CAAA;IACAC,IAAAA,SAAS,GAAG,CAAZ,CAAA;;IAEA,IAAA,OAAOhE,CAAP,EAAU;UACNgE,SAAS,EAAA,CAAA;IACTH,MAAAA,CAAC,GAAG7D,CAAJ,CAAA;IACAiE,MAAAA,KAAK,GAAG,CAAR,CAAA;;UACA,KAAK9E,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGgF,MAAhB,EAAwBhF,CAAC,EAAzB,EAA6B;YACzB8E,KAAK,EAAA,CAAA;YACLJ,CAAC,GAAGA,CAAC,CAAC7B,KAAN,CAAA;YACA,IAAI,CAAC6B,CAAL,EAAQ,MAAA;IACX,OAAA;;IACDK,MAAAA,KAAK,GAAGC,MAAR,CAAA;;UAEA,OAAOF,KAAK,GAAG,CAAR,IAAcC,KAAK,GAAG,CAAR,IAAaL,CAAlC,EAAsC;IAElC,QAAA,IAAII,KAAK,KAAK,CAAV,KAAgBC,KAAK,KAAK,CAAV,IAAe,CAACL,CAAhB,IAAqB7D,CAAC,CAACiC,CAAF,IAAO4B,CAAC,CAAC5B,CAA9C,CAAJ,EAAsD;IAClD6B,UAAAA,CAAC,GAAG9D,CAAJ,CAAA;cACAA,CAAC,GAAGA,CAAC,CAACgC,KAAN,CAAA;cACAiC,KAAK,EAAA,CAAA;IACR,SAJD,MAIO;IACHH,UAAAA,CAAC,GAAGD,CAAJ,CAAA;cACAA,CAAC,GAAGA,CAAC,CAAC7B,KAAN,CAAA;cACAkC,KAAK,EAAA,CAAA;IACR,SAAA;;YAED,IAAIH,IAAJ,EAAUA,IAAI,CAAC/B,KAAL,GAAa8B,CAAb,CAAV,KACKtB,IAAI,GAAGsB,CAAP,CAAA;YAELA,CAAC,CAAChC,KAAF,GAAUiC,IAAV,CAAA;IACAA,QAAAA,IAAI,GAAGD,CAAP,CAAA;IACH,OAAA;;IAED9D,MAAAA,CAAC,GAAG6D,CAAJ,CAAA;IACH,KAAA;;QAEDE,IAAI,CAAC/B,KAAL,GAAa,IAAb,CAAA;IACAmC,IAAAA,MAAM,IAAI,CAAV,CAAA;OAxCJ,QA0CSH,SAAS,GAAG,CA1CrB,EAAA;;IA4CA,EAAA,OAAOxB,IAAP,CAAA;IACH;;;IAGD,SAASZ,MAAT,CAAgB7C,CAAhB,EAAmBC,CAAnB,EAAsBL,IAAtB,EAA4BC,IAA5B,EAAkCK,OAAlC,EAA2C;IAC3C;MACIF,CAAC,GAAG,CAACA,CAAC,GAAGJ,IAAL,IAAaM,OAAb,GAAuB,CAA3B,CAAA;MACAD,CAAC,GAAG,CAACA,CAAC,GAAGJ,IAAL,IAAaK,OAAb,GAAuB,CAA3B,CAAA;MAEAF,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MAEAC,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;MACAA,CAAC,GAAG,CAACA,CAAC,GAAIA,CAAC,IAAI,CAAX,IAAiB,UAArB,CAAA;IAEA,EAAA,OAAOD,CAAC,GAAIC,CAAC,IAAI,CAAjB,CAAA;IACH;;;IAGD,SAASyD,WAAT,CAAqBlD,KAArB,EAA4B;MACxB,IAAIS,CAAC,GAAGT,KAAR;UACI6E,QAAQ,GAAG7E,KADf,CAAA;;MAEA,GAAG;QACC,IAAIS,CAAC,CAACjB,CAAF,GAAMqF,QAAQ,CAACrF,CAAf,IAAqBiB,CAAC,CAACjB,CAAF,KAAQqF,QAAQ,CAACrF,CAAjB,IAAsBiB,CAAC,CAAChB,CAAF,GAAMoF,QAAQ,CAACpF,CAA9D,EAAkEoF,QAAQ,GAAGpE,CAAX,CAAA;QAClEA,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAFJ,QAGSuB,CAAC,KAAKT,KAHf,EAAA;;IAKA,EAAA,OAAO6E,QAAP,CAAA;IACH;;;IAGD,SAAS1C,eAAT,CAAyBV,EAAzB,EAA6BG,EAA7B,EAAiCF,EAAjC,EAAqCG,EAArC,EAAyCF,EAAzC,EAA6CG,EAA7C,EAAiDgD,EAAjD,EAAqDC,EAArD,EAAyD;MACrD,OAAO,CAACpD,EAAE,GAAGmD,EAAN,KAAalD,EAAE,GAAGmD,EAAlB,CAAyB,IAAA,CAACtD,EAAE,GAAGqD,EAAN,KAAahD,EAAE,GAAGiD,EAAlB,CAAzB,IACA,CAACtD,EAAE,GAAGqD,EAAN,KAAajD,EAAE,GAAGkD,EAAlB,KAAyB,CAACrD,EAAE,GAAGoD,EAAN,KAAalD,EAAE,GAAGmD,EAAlB,CADzB,IAEA,CAACrD,EAAE,GAAGoD,EAAN,KAAahD,EAAE,GAAGiD,EAAlB,CAAA,IAAyB,CAACpD,EAAE,GAAGmD,EAAN,KAAajD,EAAE,GAAGkD,EAAlB,CAFhC,CAAA;IAGH;;;IAGD,SAASlC,eAAT,CAAyBvB,CAAzB,EAA4BC,CAA5B,EAA+B;MAC3B,OAAOD,CAAC,CAACpC,IAAF,CAAOU,CAAP,KAAa2B,CAAC,CAAC3B,CAAf,IAAoB0B,CAAC,CAACnC,IAAF,CAAOS,CAAP,KAAa2B,CAAC,CAAC3B,CAAnC,IAAwC,CAACoF,iBAAiB,CAAC1D,CAAD,EAAIC,CAAJ,CAA1D;IACCqB,EAAAA,aAAa,CAACtB,CAAD,EAAIC,CAAJ,CAAb,IAAuBqB,aAAa,CAACrB,CAAD,EAAID,CAAJ,CAApC,IAA8C2D,YAAY,CAAC3D,CAAD,EAAIC,CAAJ,CAA1D;MACCX,IAAI,CAACU,CAAC,CAACnC,IAAH,EAASmC,CAAT,EAAYC,CAAC,CAACpC,IAAd,CAAJ,IAA2ByB,IAAI,CAACU,CAAD,EAAIC,CAAC,CAACpC,IAAN,EAAYoC,CAAZ,CADhC,CAC+C;IAC/CjB,EAAAA,MAAM,CAACgB,CAAD,EAAIC,CAAJ,CAAN,IAAgBX,IAAI,CAACU,CAAC,CAACnC,IAAH,EAASmC,CAAT,EAAYA,CAAC,CAACpC,IAAd,CAAJ,GAA0B,CAA1C,IAA+C0B,IAAI,CAACW,CAAC,CAACpC,IAAH,EAASoC,CAAT,EAAYA,CAAC,CAACrC,IAAd,CAAJ,GAA0B,CAH1E,CAAP,CAD2B;IAK9B;;;IAGD,SAAS0B,IAAT,CAAcH,CAAd,EAAiB6D,CAAjB,EAAoBY,CAApB,EAAuB;IACnB,EAAA,OAAO,CAACZ,CAAC,CAAC7E,CAAF,GAAMgB,CAAC,CAAChB,CAAT,KAAeyF,CAAC,CAAC1F,CAAF,GAAM8E,CAAC,CAAC9E,CAAvB,CAA4B,GAAA,CAAC8E,CAAC,CAAC9E,CAAF,GAAMiB,CAAC,CAACjB,CAAT,KAAe0F,CAAC,CAACzF,CAAF,GAAM6E,CAAC,CAAC7E,CAAvB,CAAnC,CAAA;IACH;;;IAGD,SAASa,MAAT,CAAgB6E,EAAhB,EAAoBC,EAApB,EAAwB;IACpB,EAAA,OAAOD,EAAE,CAAC3F,CAAH,KAAS4F,EAAE,CAAC5F,CAAZ,IAAiB2F,EAAE,CAAC1F,CAAH,KAAS2F,EAAE,CAAC3F,CAApC,CAAA;IACH;;;IAGD,SAASkD,UAAT,CAAoBwC,EAApB,EAAwBE,EAAxB,EAA4BD,EAA5B,EAAgCE,EAAhC,EAAoC;IAChC,EAAA,IAAIC,EAAE,GAAGC,IAAI,CAAC5E,IAAI,CAACuE,EAAD,EAAKE,EAAL,EAASD,EAAT,CAAL,CAAb,CAAA;IACA,EAAA,IAAIK,EAAE,GAAGD,IAAI,CAAC5E,IAAI,CAACuE,EAAD,EAAKE,EAAL,EAASC,EAAT,CAAL,CAAb,CAAA;IACA,EAAA,IAAII,EAAE,GAAGF,IAAI,CAAC5E,IAAI,CAACwE,EAAD,EAAKE,EAAL,EAASH,EAAT,CAAL,CAAb,CAAA;IACA,EAAA,IAAIQ,EAAE,GAAGH,IAAI,CAAC5E,IAAI,CAACwE,EAAD,EAAKE,EAAL,EAASD,EAAT,CAAL,CAAb,CAAA;MAEA,IAAIE,EAAE,KAAKE,EAAP,IAAaC,EAAE,KAAKC,EAAxB,EAA4B,OAAO,IAAP,CANI;;IAQhC,EAAA,IAAIJ,EAAE,KAAK,CAAP,IAAYK,SAAS,CAACT,EAAD,EAAKC,EAAL,EAASC,EAAT,CAAzB,EAAuC,OAAO,IAAP,CARP;;IAShC,EAAA,IAAII,EAAE,KAAK,CAAP,IAAYG,SAAS,CAACT,EAAD,EAAKG,EAAL,EAASD,EAAT,CAAzB,EAAuC,OAAO,IAAP,CATP;;IAUhC,EAAA,IAAIK,EAAE,KAAK,CAAP,IAAYE,SAAS,CAACR,EAAD,EAAKD,EAAL,EAASG,EAAT,CAAzB,EAAuC,OAAO,IAAP,CAVP;;IAWhC,EAAA,IAAIK,EAAE,KAAK,CAAP,IAAYC,SAAS,CAACR,EAAD,EAAKC,EAAL,EAASC,EAAT,CAAzB,EAAuC,OAAO,IAAP,CAXP;;IAahC,EAAA,OAAO,KAAP,CAAA;IACH;;;IAGD,SAASM,SAAT,CAAmBnF,CAAnB,EAAsB6D,CAAtB,EAAyBY,CAAzB,EAA4B;IACxB,EAAA,OAAOZ,CAAC,CAAC9E,CAAF,IAAOK,IAAI,CAACC,GAAL,CAASW,CAAC,CAACjB,CAAX,EAAc0F,CAAC,CAAC1F,CAAhB,CAAP,IAA6B8E,CAAC,CAAC9E,CAAF,IAAOK,IAAI,CAACgG,GAAL,CAASpF,CAAC,CAACjB,CAAX,EAAc0F,CAAC,CAAC1F,CAAhB,CAApC,IAA0D8E,CAAC,CAAC7E,CAAF,IAAOI,IAAI,CAACC,GAAL,CAASW,CAAC,CAAChB,CAAX,EAAcyF,CAAC,CAACzF,CAAhB,CAAjE,IAAuF6E,CAAC,CAAC7E,CAAF,IAAOI,IAAI,CAACgG,GAAL,CAASpF,CAAC,CAAChB,CAAX,EAAcyF,CAAC,CAACzF,CAAhB,CAArG,CAAA;IACH,CAAA;;IAED,SAAS+F,IAAT,CAAcM,GAAd,EAAmB;IACf,EAAA,OAAOA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAcA,GAAG,GAAG,CAAN,GAAU,CAAC,CAAX,GAAe,CAApC,CAAA;IACH;;;IAGD,SAASd,iBAAT,CAA2B1D,CAA3B,EAA8BC,CAA9B,EAAiC;MAC7B,IAAId,CAAC,GAAGa,CAAR,CAAA;;MACA,GAAG;QACC,IAAIb,CAAC,CAACb,CAAF,KAAQ0B,CAAC,CAAC1B,CAAV,IAAea,CAAC,CAACvB,IAAF,CAAOU,CAAP,KAAa0B,CAAC,CAAC1B,CAA9B,IAAmCa,CAAC,CAACb,CAAF,KAAQ2B,CAAC,CAAC3B,CAA7C,IAAkDa,CAAC,CAACvB,IAAF,CAAOU,CAAP,KAAa2B,CAAC,CAAC3B,CAAjE,IACI+C,UAAU,CAAClC,CAAD,EAAIA,CAAC,CAACvB,IAAN,EAAYoC,CAAZ,EAAeC,CAAf,CADlB,EACqC,OAAO,IAAP,CAAA;QACrCd,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAHJ,QAISuB,CAAC,KAAKa,CAJf,EAAA;;IAMA,EAAA,OAAO,KAAP,CAAA;IACH;;;IAGD,SAASsB,aAAT,CAAuBtB,CAAvB,EAA0BC,CAA1B,EAA6B;IACzB,EAAA,OAAOX,IAAI,CAACU,CAAC,CAACnC,IAAH,EAASmC,CAAT,EAAYA,CAAC,CAACpC,IAAd,CAAJ,GAA0B,CAA1B,GACH0B,IAAI,CAACU,CAAD,EAAIC,CAAJ,EAAOD,CAAC,CAACpC,IAAT,CAAJ,IAAsB,CAAtB,IAA2B0B,IAAI,CAACU,CAAD,EAAIA,CAAC,CAACnC,IAAN,EAAYoC,CAAZ,CAAJ,IAAsB,CAD9C,GAEHX,IAAI,CAACU,CAAD,EAAIC,CAAJ,EAAOD,CAAC,CAACnC,IAAT,CAAJ,GAAqB,CAArB,IAA0ByB,IAAI,CAACU,CAAD,EAAIA,CAAC,CAACpC,IAAN,EAAYqC,CAAZ,CAAJ,GAAqB,CAFnD,CAAA;IAGH;;;IAGD,SAAS0D,YAAT,CAAsB3D,CAAtB,EAAyBC,CAAzB,EAA4B;MACxB,IAAId,CAAC,GAAGa,CAAR;UACIyE,MAAM,GAAG,KADb;UAEIjB,EAAE,GAAG,CAACxD,CAAC,CAAC9B,CAAF,GAAM+B,CAAC,CAAC/B,CAAT,IAAc,CAFvB;UAGIuF,EAAE,GAAG,CAACzD,CAAC,CAAC7B,CAAF,GAAM8B,CAAC,CAAC9B,CAAT,IAAc,CAHvB,CAAA;;MAIA,GAAG;IACC,IAAA,IAAMgB,CAAC,CAAChB,CAAF,GAAMsF,EAAP,KAAgBtE,CAAC,CAACvB,IAAF,CAAOO,CAAP,GAAWsF,EAA5B,IAAoCtE,CAAC,CAACvB,IAAF,CAAOO,CAAP,KAAagB,CAAC,CAAChB,CAAnD,IACKqF,EAAE,GAAG,CAACrE,CAAC,CAACvB,IAAF,CAAOM,CAAP,GAAWiB,CAAC,CAACjB,CAAd,KAAoBuF,EAAE,GAAGtE,CAAC,CAAChB,CAA3B,CAAiCgB,IAAAA,CAAC,CAACvB,IAAF,CAAOO,CAAP,GAAWgB,CAAC,CAAChB,CAA9C,CAAmDgB,GAAAA,CAAC,CAACjB,CADnE,EAEIuG,MAAM,GAAG,CAACA,MAAV,CAAA;QACJtF,CAAC,GAAGA,CAAC,CAACvB,IAAN,CAAA;OAJJ,QAKSuB,CAAC,KAAKa,CALf,EAAA;;IAOA,EAAA,OAAOyE,MAAP,CAAA;IACH;IAGD;;;IACA,SAASjD,YAAT,CAAsBxB,CAAtB,EAAyBC,CAAzB,EAA4B;IACxB,EAAA,IAAIyE,EAAE,GAAG,IAAIC,IAAJ,CAAS3E,CAAC,CAAC1B,CAAX,EAAc0B,CAAC,CAAC9B,CAAhB,EAAmB8B,CAAC,CAAC7B,CAArB,CAAT;IAAA,MACIyG,EAAE,GAAG,IAAID,IAAJ,CAAS1E,CAAC,CAAC3B,CAAX,EAAc2B,CAAC,CAAC/B,CAAhB,EAAmB+B,CAAC,CAAC9B,CAArB,CADT;IAAA,MAEI0G,EAAE,GAAG7E,CAAC,CAACpC,IAFX;IAAA,MAGIkH,EAAE,GAAG7E,CAAC,CAACpC,IAHX,CAAA;MAKAmC,CAAC,CAACpC,IAAF,GAASqC,CAAT,CAAA;MACAA,CAAC,CAACpC,IAAF,GAASmC,CAAT,CAAA;MAEA0E,EAAE,CAAC9G,IAAH,GAAUiH,EAAV,CAAA;MACAA,EAAE,CAAChH,IAAH,GAAU6G,EAAV,CAAA;MAEAE,EAAE,CAAChH,IAAH,GAAU8G,EAAV,CAAA;MACAA,EAAE,CAAC7G,IAAH,GAAU+G,EAAV,CAAA;MAEAE,EAAE,CAAClH,IAAH,GAAUgH,EAAV,CAAA;MACAA,EAAE,CAAC/G,IAAH,GAAUiH,EAAV,CAAA;IAEA,EAAA,OAAOF,EAAP,CAAA;IACH;;;IAGD,SAAS7F,UAAT,CAAoBT,CAApB,EAAuBJ,CAAvB,EAA0BC,CAA1B,EAA6BU,IAA7B,EAAmC;MAC/B,IAAIM,CAAC,GAAG,IAAIwF,IAAJ,CAASrG,CAAT,EAAYJ,CAAZ,EAAeC,CAAf,CAAR,CAAA;;MAEA,IAAI,CAACU,IAAL,EAAW;QACPM,CAAC,CAACtB,IAAF,GAASsB,CAAT,CAAA;QACAA,CAAC,CAACvB,IAAF,GAASuB,CAAT,CAAA;IAEH,GAJD,MAIO;IACHA,IAAAA,CAAC,CAACvB,IAAF,GAASiB,IAAI,CAACjB,IAAd,CAAA;QACAuB,CAAC,CAACtB,IAAF,GAASgB,IAAT,CAAA;IACAA,IAAAA,IAAI,CAACjB,IAAL,CAAUC,IAAV,GAAiBsB,CAAjB,CAAA;QACAN,IAAI,CAACjB,IAAL,GAAYuB,CAAZ,CAAA;IACH,GAAA;;IACD,EAAA,OAAOA,CAAP,CAAA;IACH,CAAA;;IAED,SAASF,UAAT,CAAoBE,CAApB,EAAuB;IACnBA,EAAAA,CAAC,CAACvB,IAAF,CAAOC,IAAP,GAAcsB,CAAC,CAACtB,IAAhB,CAAA;IACAsB,EAAAA,CAAC,CAACtB,IAAF,CAAOD,IAAP,GAAcuB,CAAC,CAACvB,IAAhB,CAAA;IAEA,EAAA,IAAIuB,CAAC,CAAC8B,KAAN,EAAa9B,CAAC,CAAC8B,KAAF,CAAQE,KAAR,GAAgBhC,CAAC,CAACgC,KAAlB,CAAA;IACb,EAAA,IAAIhC,CAAC,CAACgC,KAAN,EAAahC,CAAC,CAACgC,KAAF,CAAQF,KAAR,GAAgB9B,CAAC,CAAC8B,KAAlB,CAAA;IAChB,CAAA;;IAED,SAAS0D,IAAT,CAAcrG,CAAd,EAAiBJ,CAAjB,EAAoBC,CAApB,EAAuB;IACvB;IACI,EAAA,IAAA,CAAKG,CAAL,GAASA,CAAT,CAFmB;;MAKnB,IAAKJ,CAAAA,CAAL,GAASA,CAAT,CAAA;IACA,EAAA,IAAA,CAAKC,CAAL,GAASA,CAAT,CANmB;;MASnB,IAAKN,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACA,EAAA,IAAA,CAAKD,IAAL,GAAY,IAAZ,CAVmB;;IAanB,EAAA,IAAA,CAAKwD,CAAL,GAAS,CAAT,CAbmB;;MAgBnB,IAAKH,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,EAAA,IAAA,CAAKE,KAAL,GAAa,IAAb,CAjBmB;;MAoBnB,IAAK9B,CAAAA,OAAL,GAAe,KAAf,CAAA;IACH;IAGD;;;IACApC,MAAM,CAAC8H,SAAP,GAAmB,UAAU5H,IAAV,EAAgBC,WAAhB,EAA6BC,GAA7B,EAAkCM,SAAlC,EAA6C;IAC5D,EAAA,IAAIL,QAAQ,GAAGF,WAAW,IAAIA,WAAW,CAACG,MAA1C,CAAA;IACA,EAAA,IAAIC,QAAQ,GAAGF,QAAQ,GAAGF,WAAW,CAAC,CAAD,CAAX,GAAiBC,GAApB,GAA0BF,IAAI,CAACI,MAAtD,CAAA;IAEA,EAAA,IAAIyH,WAAW,GAAGzG,IAAI,CAACsE,GAAL,CAAS/D,UAAU,CAAC3B,IAAD,EAAO,CAAP,EAAUK,QAAV,EAAoBH,GAApB,CAAnB,CAAlB,CAAA;;IACA,EAAA,IAAIC,QAAJ,EAAc;IACV,IAAA,KAAK,IAAIgB,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAGtE,WAAW,CAACG,MAAlC,EAA0Ce,CAAC,GAAGoD,GAA9C,EAAmDpD,CAAC,EAApD,EAAwD;IACpD,MAAA,IAAII,KAAK,GAAGtB,WAAW,CAACkB,CAAD,CAAX,GAAiBjB,GAA7B,CAAA;IACA,MAAA,IAAIsB,GAAG,GAAGL,CAAC,GAAGoD,GAAG,GAAG,CAAV,GAActE,WAAW,CAACkB,CAAC,GAAG,CAAL,CAAX,GAAqBjB,GAAnC,GAAyCF,IAAI,CAACI,MAAxD,CAAA;IACAyH,MAAAA,WAAW,IAAIzG,IAAI,CAACsE,GAAL,CAAS/D,UAAU,CAAC3B,IAAD,EAAOuB,KAAP,EAAcC,GAAd,EAAmBtB,GAAnB,CAAnB,CAAf,CAAA;IACH,KAAA;IACJ,GAAA;;MAED,IAAI4H,aAAa,GAAG,CAApB,CAAA;;IACA,EAAA,KAAK3G,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGX,SAAS,CAACJ,MAA1B,EAAkCe,CAAC,IAAI,CAAvC,EAA0C;IACtC,IAAA,IAAI0B,CAAC,GAAGrC,SAAS,CAACW,CAAD,CAAT,GAAejB,GAAvB,CAAA;QACA,IAAI4C,CAAC,GAAGtC,SAAS,CAACW,CAAC,GAAG,CAAL,CAAT,GAAmBjB,GAA3B,CAAA;QACA,IAAI6C,CAAC,GAAGvC,SAAS,CAACW,CAAC,GAAG,CAAL,CAAT,GAAmBjB,GAA3B,CAAA;QACA4H,aAAa,IAAI1G,IAAI,CAACsE,GAAL,CACb,CAAC1F,IAAI,CAAC6C,CAAD,CAAJ,GAAU7C,IAAI,CAAC+C,CAAD,CAAf,KAAuB/C,IAAI,CAAC8C,CAAC,GAAG,CAAL,CAAJ,GAAc9C,IAAI,CAAC6C,CAAC,GAAG,CAAL,CAAzC,CAAA,GACA,CAAC7C,IAAI,CAAC6C,CAAD,CAAJ,GAAU7C,IAAI,CAAC8C,CAAD,CAAf,KAAuB9C,IAAI,CAAC+C,CAAC,GAAG,CAAL,CAAJ,GAAc/C,IAAI,CAAC6C,CAAC,GAAG,CAAL,CAAzC,CAFa,CAAjB,CAAA;IAGH,GAAA;;MAED,OAAOgF,WAAW,KAAK,CAAhB,IAAqBC,aAAa,KAAK,CAAvC,GAA2C,CAA3C,GACH1G,IAAI,CAACsE,GAAL,CAAS,CAACoC,aAAa,GAAGD,WAAjB,IAAgCA,WAAzC,CADJ,CAAA;IAEH,CAzBD,CAAA;;IA2BA,SAASlG,UAAT,CAAoB3B,IAApB,EAA0BuB,KAA1B,EAAiCC,GAAjC,EAAsCtB,GAAtC,EAA2C;MACvC,IAAI6H,GAAG,GAAG,CAAV,CAAA;;IACA,EAAA,KAAK,IAAI5G,CAAC,GAAGI,KAAR,EAAeyG,CAAC,GAAGxG,GAAG,GAAGtB,GAA9B,EAAmCiB,CAAC,GAAGK,GAAvC,EAA4CL,CAAC,IAAIjB,GAAjD,EAAsD;QAClD6H,GAAG,IAAI,CAAC/H,IAAI,CAACgI,CAAD,CAAJ,GAAUhI,IAAI,CAACmB,CAAD,CAAf,KAAuBnB,IAAI,CAACmB,CAAC,GAAG,CAAL,CAAJ,GAAcnB,IAAI,CAACgI,CAAC,GAAG,CAAL,CAAzC,CAAP,CAAA;IACAA,IAAAA,CAAC,GAAG7G,CAAJ,CAAA;IACH,GAAA;;IACD,EAAA,OAAO4G,GAAP,CAAA;IACH;;;IAGDjI,MAAM,CAACmI,OAAP,GAAiB,UAAUjI,IAAV,EAAgB;MAC7B,IAAIE,GAAG,GAAGF,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,CAAA,CAAWI,MAArB;IAAA,MACI8H,MAAM,GAAG;IAACC,IAAAA,QAAQ,EAAE,EAAX;IAAeC,IAAAA,KAAK,EAAE,EAAtB;IAA0BC,IAAAA,UAAU,EAAEnI,GAAAA;OADnD;UAEIoI,SAAS,GAAG,CAFhB,CAAA;;IAIA,EAAA,KAAK,IAAInH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnB,IAAI,CAACI,MAAzB,EAAiCe,CAAC,EAAlC,EAAsC;IAClC,IAAA,KAAK,IAAI6G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhI,IAAI,CAACmB,CAAD,CAAJ,CAAQf,MAA5B,EAAoC4H,CAAC,EAArC,EAAyC;UACrC,KAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGrI,GAApB,EAAyBqI,CAAC,EAA1B,EAAA;IAA8BL,QAAAA,MAAM,CAACC,QAAP,CAAgBzF,IAAhB,CAAqB1C,IAAI,CAACmB,CAAD,CAAJ,CAAQ6G,CAAR,CAAA,CAAWO,CAAX,CAArB,CAAA,CAAA;IAA9B,OAAA;IACH,KAAA;;QACD,IAAIpH,CAAC,GAAG,CAAR,EAAW;UACPmH,SAAS,IAAItI,IAAI,CAACmB,CAAC,GAAG,CAAL,CAAJ,CAAYf,MAAzB,CAAA;IACA8H,MAAAA,MAAM,CAACE,KAAP,CAAa1F,IAAb,CAAkB4F,SAAlB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IACD,EAAA,OAAOJ,MAAP,CAAA;IACH,CAfD,CAAA;;;;ICzpBA;IACA;IACA;IACA;IACA;IACO,SAASM,WAAT,CAAqBC,IAArB,EAA2B;MAC9B,IAAIV,GAAG,GAAG,CAAV,CAAA;MACA,IAAI5G,CAAC,GAAG,CAAR,CAAA;IACA,EAAA,IAAIT,IAAJ,CAAA;IACA,EAAA,IAAIgI,GAAJ,CAAA;IACA,EAAA,IAAMnE,GAAG,GAAGkE,IAAI,CAACrI,MAAjB,CAAA;;MAEA,OAAOe,CAAC,GAAGoD,GAAX,EAAgB;IACZ7D,IAAAA,IAAI,GAAGgI,GAAG,IAAID,IAAI,CAAC,CAAD,CAAlB,CAAA;IACAC,IAAAA,GAAG,GAAGD,IAAI,CAACtH,CAAD,CAAV,CAAA;QACA4G,GAAG,IAAI,CAACW,GAAG,CAAC,CAAD,CAAH,GAAShI,IAAI,CAAC,CAAD,CAAd,KAAsBgI,GAAG,CAAC,CAAD,CAAH,GAAShI,IAAI,CAAC,CAAD,CAAnC,CAAP,CAAA;QACAS,CAAC,EAAA,CAAA;IACJ,GAAA;;MACD,OAAO4G,GAAG,GAAG,CAAb,CAAA;IACH,CAAA;;IAED,SAASY,KAAT,CAAeC,GAAf,EAAoBC,EAApB,EAAwBC,EAAxB,EAA4B;IACxBF,EAAAA,GAAG,CAAC,CAAD,CAAH,GAASC,EAAE,CAAC,CAAD,CAAF,GAAQC,EAAE,CAAC,CAAD,CAAnB,CAAA;IACAF,EAAAA,GAAG,CAAC,CAAD,CAAH,GAASC,EAAE,CAAC,CAAD,CAAF,GAAQC,EAAE,CAAC,CAAD,CAAnB,CAAA;IACAF,EAAAA,GAAG,CAAC,CAAD,CAAH,GAASC,EAAE,CAAC,CAAD,CAAF,GAAQC,EAAE,CAAC,CAAD,CAAnB,CAAA;IACA,EAAA,OAAOF,GAAP,CAAA;IACH,CAAA;;IAED,SAASG,WAAT,CAAqBH,GAArB,EAA0BI,CAA1B,EAA6B;IACzB,EAAA,IAAMjI,CAAC,GAAGiI,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,EAAA,IAAMhI,CAAC,GAAGgI,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,EAAA,IAAM/E,CAAC,GAAG+E,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,EAAA,IAAMT,CAAC,GAAGnH,IAAI,CAAC6H,IAAL,CAAUlI,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAZ,GAAgBiD,CAAC,GAAGA,CAA9B,KAAoC,CAA9C,CAAA;IACA2E,EAAAA,GAAG,CAAC,CAAD,CAAH,GAAS7H,CAAC,GAAGwH,CAAb,CAAA;IACAK,EAAAA,GAAG,CAAC,CAAD,CAAH,GAAS5H,CAAC,GAAGuH,CAAb,CAAA;IACAK,EAAAA,GAAG,CAAC,CAAD,CAAH,GAAS3E,CAAC,GAAGsE,CAAb,CAAA;IACA,EAAA,OAAOK,GAAP,CAAA;IACH,CAAA;;IAED,SAASM,OAAT,CAAiBN,GAAjB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8B;IAC1B,EAAA,IAAM9F,EAAE,GAAG6F,EAAE,CAAC,CAAD,CAAb;IAAA,MAAkB1F,EAAE,GAAG0F,EAAE,CAAC,CAAD,CAAzB;IAAA,MAA8BM,EAAE,GAAGN,EAAE,CAAC,CAAD,CAArC;IAAA,MACI5F,EAAE,GAAG6F,EAAE,CAAC,CAAD,CADX;IAAA,MACgB1F,EAAE,GAAG0F,EAAE,CAAC,CAAD,CADvB;IAAA,MAC4BM,EAAE,GAAGN,EAAE,CAAC,CAAD,CADnC,CAAA;MAGAF,GAAG,CAAC,CAAD,CAAH,GAASzF,EAAE,GAAGiG,EAAL,GAAUD,EAAE,GAAG/F,EAAxB,CAAA;MACAwF,GAAG,CAAC,CAAD,CAAH,GAASO,EAAE,GAAGlG,EAAL,GAAUD,EAAE,GAAGoG,EAAxB,CAAA;MACAR,GAAG,CAAC,CAAD,CAAH,GAAS5F,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAxB,CAAA;IACA,EAAA,OAAO2F,GAAP,CAAA;IACH,CAAA;;IAEM,SAASS,cAAT,CAAwBC,OAAxB,EAAiCC,QAAjC,EAA2C;MAE9C,SAASC,KAAT,CAAexH,CAAf,EAAkBa,CAAlB,EAAqBC,CAArB,EAAwBC,CAAxB,EAA2B;IACvBf,IAAAA,CAAC,CAAC,CAAD,CAAD,GAAOa,CAAP,CAAA;IAAUb,IAAAA,CAAC,CAAC,CAAD,CAAD,GAAOc,CAAP,CAAA;IAAUd,IAAAA,CAAC,CAAC,CAAD,CAAD,GAAOe,CAAP,CAAA;IACvB,GAAA;;MAED,IAAM2D,EAAE,GAAG,EAAX,CAAA;MACA,IAAMC,EAAE,GAAG,EAAX,CAAA;MACA,IAAM8C,EAAE,GAAG,EAAX,CAAA;MAEA,IAAMC,GAAG,GAAG,EAAZ,CAAA;MACA,IAAMC,GAAG,GAAG,EAAZ,CAAA;MAEA,IAAM5F,CAAC,GAAG,EAAV,CAAA;IAEA,EAAA,IAAMQ,GAAG,GAAG+E,OAAO,CAAClJ,MAApB,CAAA;MACA,IAAMwJ,OAAO,GAAG,IAAIC,YAAJ,CAAiBN,QAAQ,CAACnJ,MAA1B,CAAhB,CAAA;MACA,IAAI0J,CAAC,GAAG,CAAR,CAAA;;MACA,OAAOA,CAAC,GAAGvF,GAAX,EAAgB;IAEZ;IACA;IACA;IACA;IACA;IACA;IACA,IAAA,IAAM1B,CAAC,GAAGyG,OAAO,CAACQ,CAAD,CAAjB;IAAA,QAAsBhH,CAAC,GAAGwG,OAAO,CAACQ,CAAC,GAAG,CAAL,CAAjC;IAAA,QAA0C/G,CAAC,GAAGuG,OAAO,CAACQ,CAAC,GAAG,CAAL,CAArD,CAAA;IACA,IAAA,IAAMC,EAAE,GAAGlH,CAAC,GAAG,CAAf;IAAA,QAAkBmH,EAAE,GAAGlH,CAAC,GAAG,CAA3B;IAAA,QAA8BmH,EAAE,GAAGlH,CAAC,GAAG,CAAvC,CAAA;QAEAyG,KAAK,CAAC9C,EAAD,EAAK6C,QAAQ,CAACQ,EAAD,CAAb,EAAmBR,QAAQ,CAACQ,EAAE,GAAG,CAAN,CAA3B,EAAqCR,QAAQ,CAACQ,EAAE,GAAG,CAAN,CAA7C,CAAL,CAAA;QACAP,KAAK,CAAC7C,EAAD,EAAK4C,QAAQ,CAACS,EAAD,CAAb,EAAmBT,QAAQ,CAACS,EAAE,GAAG,CAAN,CAA3B,EAAqCT,QAAQ,CAACS,EAAE,GAAG,CAAN,CAA7C,CAAL,CAAA;QACAR,KAAK,CAACC,EAAD,EAAKF,QAAQ,CAACU,EAAD,CAAb,EAAmBV,QAAQ,CAACU,EAAE,GAAG,CAAN,CAA3B,EAAqCV,QAAQ,CAACU,EAAE,GAAG,CAAN,CAA7C,CAAL,CAAA;IAEAtB,IAAAA,KAAK,CAACgB,GAAD,EAAMF,EAAN,EAAU9C,EAAV,CAAL,CAAA;IACAgC,IAAAA,KAAK,CAACe,GAAD,EAAMhD,EAAN,EAAUC,EAAV,CAAL,CAAA;QACAuC,OAAO,CAACnF,CAAD,EAAI4F,GAAJ,EAASD,GAAT,CAAP,CAjBY;;QAmBZ,KAAK,IAAIvI,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG,CAApB,EAAuBA,EAAC,EAAxB,EAA4B;UACxByI,OAAO,CAACG,EAAE,GAAG5I,EAAN,CAAP,IAAmB4C,CAAC,CAAC5C,EAAD,CAApB,CAAA;UACAyI,OAAO,CAACI,EAAE,GAAG7I,EAAN,CAAP,IAAmB4C,CAAC,CAAC5C,EAAD,CAApB,CAAA;UACAyI,OAAO,CAACK,EAAE,GAAG9I,EAAN,CAAP,IAAmB4C,CAAC,CAAC5C,EAAD,CAApB,CAAA;IACH,KAAA;;IACD2I,IAAAA,CAAC,IAAI,CAAL,CAAA;IACH,GAAA;;MAED,IAAI3I,CAAC,GAAG,CAAR,CAAA;IACA,EAAA,IAAM+I,CAAC,GAAGN,OAAO,CAACxJ,MAAlB,CAAA;;MACA,OAAOe,CAAC,GAAG+I,CAAX,EAAc;QACVV,KAAK,CAACzF,CAAD,EAAI6F,OAAO,CAACzI,CAAD,CAAX,EAAgByI,OAAO,CAACzI,CAAC,GAAG,CAAL,CAAvB,EAAgCyI,OAAO,CAACzI,CAAC,GAAG,CAAL,CAAvC,CAAL,CAAA;IACA4H,IAAAA,WAAW,CAAChF,CAAD,EAAIA,CAAJ,CAAX,CAAA;QACA6F,OAAO,CAACzI,CAAD,CAAP,GAAa4C,CAAC,CAAC,CAAD,CAAD,IAAQ,CAArB,CAAA;QACA6F,OAAO,CAACzI,CAAC,GAAG,CAAL,CAAP,GAAiB4C,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAzB,CAAA;QACA6F,OAAO,CAACzI,CAAC,GAAG,CAAL,CAAP,GAAiB4C,CAAC,CAAC,CAAD,CAAD,IAAQ,CAAzB,CAAA;IACA5C,IAAAA,CAAC,IAAI,CAAL,CAAA;IACH,GAAA;;IAED,EAAA,OAAOyI,OAAP,CAAA;IACH,CAAA;IAEM,SAASO,KAAT,CAAeC,OAAf,EAAwB;IAC3B,EAAA,IAAIA,OAAO,CAAChK,MAAR,KAAmB,CAAvB,EAA0B;IACtB,IAAA,IAAM8H,OAAM,GAAG;IACXqB,MAAAA,QAAQ,EAAEa,OAAO,CAAC,CAAD,CAAP,CAAWb,QADV;IAEXc,MAAAA,MAAM,EAAED,OAAO,CAAC,CAAD,CAAP,CAAWC,MAFR;IAGXC,MAAAA,EAAE,EAAEF,OAAO,CAAC,CAAD,CAAP,CAAWE,EAHJ;IAIXhB,MAAAA,OAAO,EAAEc,OAAO,CAAC,CAAD,CAAP,CAAWd,OAJT;IAKXc,MAAAA,OAAO,EAAPA,OAAAA;SALJ,CAAA;IAOA,IAAA,OAAOlC,OAAP,CAAA;IACH,GAAA;;MACD,IAAIqC,IAAI,GAAG,CAAX;UAAcC,IAAI,GAAG,CAArB,CAAA;;IACA,EAAA,KAAK,IAAIrJ,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAG6F,OAAO,CAAChK,MAA9B,EAAsCe,CAAC,GAAGoD,GAA1C,EAA+CpD,CAAC,EAAhD,EAAoD;QAChD,IAA8BiJ,UAAAA,GAAAA,OAAO,CAACjJ,CAAD,CAArC;YAAQoI,QAAR,cAAQA,QAAR;YAAkBD,OAAlB,cAAkBA,OAAlB,CAAA;QACAiB,IAAI,IAAIhB,QAAQ,CAACnJ,MAAjB,CAAA;QACAoK,IAAI,IAAIlB,OAAO,CAAClJ,MAAhB,CAAA;IACH,GAAA;;IACD,EAAA,IAAM8H,MAAM,GAAG;IACXqB,IAAAA,QAAQ,EAAE,IAAIM,YAAJ,CAAiBU,IAAjB,CADC;IAEXF,IAAAA,MAAM,EAAE,IAAIR,YAAJ,CAAiBU,IAAjB,CAFG;QAGXD,EAAE,EAAE,IAAIT,YAAJ,CAAiBU,IAAI,GAAG,CAAP,GAAW,CAA5B,CAHO;IAIXjB,IAAAA,OAAO,EAAE,IAAImB,WAAJ,CAAgBD,IAAhB,CAJE;IAKXJ,IAAAA,OAAO,EAAPA,OAAAA;OALJ,CAAA;MAOA,IAAIM,OAAO,GAAG,CAAd;UAAiBC,MAAM,GAAG,CAA1B;UAA6BC,IAAI,GAAG,CAApC;UAAuCC,QAAQ,GAAG,CAAlD,CAAA;;IACA,EAAA,KAAK,IAAI1J,GAAC,GAAG,CAAR,EAAWoD,IAAG,GAAG6F,OAAO,CAAChK,MAA9B,EAAsCe,GAAC,GAAGoD,IAA1C,EAA+CpD,GAAC,EAAhD,EAAoD;QAChD,IAA0CiJ,WAAAA,GAAAA,OAAO,CAACjJ,GAAD,CAAjD;YAAQoI,SAAR,eAAQA,QAAR;YAAkBD,QAAlB,eAAkBA,OAAlB;YAA2Be,MAA3B,eAA2BA,MAA3B;YAAmCC,EAAnC,eAAmCA,EAAnC,CAAA;IACApC,IAAAA,MAAM,CAACqB,QAAP,CAAgBuB,GAAhB,CAAoBvB,SAApB,EAA8BmB,OAA9B,CAAA,CAAA;IACAxC,IAAAA,MAAM,CAACmC,MAAP,CAAcS,GAAd,CAAkBT,MAAlB,EAA0BK,OAA1B,CAAA,CAAA;IACAxC,IAAAA,MAAM,CAACoC,EAAP,CAAUQ,GAAV,CAAcR,EAAd,EAAkBO,QAAlB,CAAA,CAAA;QACA,IAAI7C,CAAC,GAAG,CAAR,CAAA;IACA,IAAA,IAAM+C,IAAI,GAAGzB,QAAO,CAAClJ,MAArB,CAAA;;QACA,OAAO4H,CAAC,GAAG+C,IAAX,EAAiB;IACb,MAAA,IAAMC,MAAM,GAAG1B,QAAO,CAACtB,CAAD,CAAP,GAAa2C,MAA5B,CAAA;IACAzC,MAAAA,MAAM,CAACoB,OAAP,CAAesB,IAAf,IAAuBI,MAAvB,CAAA;UACAJ,IAAI,EAAA,CAAA;UACJ5C,CAAC,EAAA,CAAA;IACJ,KAAA;;QACD6C,QAAQ,IAAIP,EAAE,CAAClK,MAAf,CAAA;QACAsK,OAAO,IAAInB,SAAQ,CAACnJ,MAApB,CAAA;IACAuK,IAAAA,MAAM,IAAIpB,SAAQ,CAACnJ,MAAT,GAAkB,CAA5B,CAAA;IACH,GAAA;;IACD,EAAA,OAAO8H,MAAP,CAAA;IACH,CAAA;IAEM,SAAS+C,QAAT,CAAkBC,GAAlB,EAAuB;IAC1B,EAAA,OAAOA,GAAG,GAAG,GAAN,GAAY9J,IAAI,CAAC+J,EAAxB,CAAA;IACH,CAAA;IAEM,SAASC,QAAT,CAAkBC,KAAlB,EAAyB;IAC5B,EAAA,OAAOA,KAAK,GAAG,GAAR,GAAcjK,IAAI,CAAC+J,EAA1B,CAAA;IACH;;IAGM,SAASG,kBAAT,CAA4BC,GAA5B,EAAiCpD,QAAjC,EAA2CqD,MAA3C,EAAmDC,MAAnD,EAA2DC,MAA3D,EAAmEC,MAAnE,EAA2E;IAE9E,EAAA,IAAMC,IAAI,GAAGJ,MAAM,GAAG,CAAtB;IAAA,MAAyBK,IAAI,GAAGJ,MAAM,GAAG,CAAzC;IAAA,MAA4CK,IAAI,GAAGJ,MAAM,GAAG,CAA5D;IAAA,MAA+DK,IAAI,GAAGJ,MAAM,GAAG,CAA/E,CAAA;IACA,EAAA,IAAMK,GAAG,GAAG7D,QAAQ,CAACyD,IAAD,CAApB,CAAA;IACA,EAAA,IAAMK,GAAG,GAAG9D,QAAQ,CAACyD,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMM,GAAG,GAAG/D,QAAQ,CAACyD,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMO,GAAG,GAAGhE,QAAQ,CAAC0D,IAAD,CAApB,CAAA;IACA,EAAA,IAAMO,GAAG,GAAGjE,QAAQ,CAAC0D,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMQ,GAAG,GAAGlE,QAAQ,CAAC0D,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMS,GAAG,GAAGnE,QAAQ,CAAC2D,IAAD,CAApB,CAAA;IACA,EAAA,IAAMS,GAAG,GAAGpE,QAAQ,CAAC2D,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMU,GAAG,GAAGrE,QAAQ,CAAC2D,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMW,GAAG,GAAGtE,QAAQ,CAAC4D,IAAD,CAApB,CAAA;IACA,EAAA,IAAMW,GAAG,GAAGvE,QAAQ,CAAC4D,IAAI,GAAG,CAAR,CAApB,CAAA;IACA,EAAA,IAAMY,GAAG,GAAGxE,QAAQ,CAAC4D,IAAI,GAAG,CAAR,CAApB,CAAA;;IAEA,EAAA,IAAI3K,IAAI,CAACsE,GAAL,CAASuG,GAAG,GAAGG,GAAf,CAAA,GAAsBhL,IAAI,CAACsE,GAAL,CAASsG,GAAG,GAAGG,GAAf,CAA1B,EAA+C;IAE3CZ,IAAAA,GAAG,CAAC7I,IAAJ,CAASsJ,GAAT,EAAc,IAAIE,GAAlB,CAAA,CAAA;IACAX,IAAAA,GAAG,CAAC7I,IAAJ,CAASyJ,GAAT,EAAc,IAAIE,GAAlB,CAAA,CAAA;IACAd,IAAAA,GAAG,CAAC7I,IAAJ,CAAS4J,GAAT,EAAc,IAAIE,GAAlB,CAAA,CAAA;IACAjB,IAAAA,GAAG,CAAC7I,IAAJ,CAAS+J,GAAT,EAAc,IAAIE,GAAlB,CAAA,CAAA;IACH,GAND,MAMO;IACHpB,IAAAA,GAAG,CAAC7I,IAAJ,CAASuJ,GAAT,EAAc,IAAIC,GAAlB,CAAA,CAAA;IACAX,IAAAA,GAAG,CAAC7I,IAAJ,CAAS0J,GAAT,EAAc,IAAIC,GAAlB,CAAA,CAAA;IACAd,IAAAA,GAAG,CAAC7I,IAAJ,CAAS6J,GAAT,EAAc,IAAIC,GAAlB,CAAA,CAAA;IACAjB,IAAAA,GAAG,CAAC7I,IAAJ,CAASgK,GAAT,EAAc,IAAIC,GAAlB,CAAA,CAAA;IACH,GAAA;IAEJ;;IC3LM,SAASC,eAAT,CAAyBC,QAAzB,EAAmCC,OAAnC,EAA4C;IAC/CA,EAAAA,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB;IAAEC,IAAAA,KAAK,EAAE,CAAA;OAA3B,EAAgCH,OAAhC,CAAV,CAAA;MACA,IAAM1C,OAAO,GAAGyC,QAAQ,CAACK,GAAT,CAAa,UAAAC,OAAO,EAAI;IACpC,IAAA,KAAK,IAAIhM,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAG4I,OAAO,CAAC/M,MAA9B,EAAsCe,CAAC,GAAGoD,GAA1C,EAA+CpD,CAAC,EAAhD,EAAoD;IAChD,MAAA,IAAMsH,IAAI,GAAG0E,OAAO,CAAChM,CAAD,CAApB,CAAA;UACAiM,YAAY,CAAC3E,IAAD,CAAZ,CAAA;;UACA,IAAItH,CAAC,KAAK,CAAV,EAAa;IACT,QAAA,IAAI,CAACqH,WAAW,CAACC,IAAD,CAAhB,EAAwB;IACpB0E,UAAAA,OAAO,CAAChM,CAAD,CAAP,GAAasH,IAAI,CAAC4E,OAAL,EAAb,CAAA;IACH,SAAA;IACJ,OAJD,MAIO,IAAI7E,WAAW,CAACC,IAAD,CAAf,EAAuB;IAC1B0E,QAAAA,OAAO,CAAChM,CAAD,CAAP,GAAasH,IAAI,CAAC4E,OAAL,EAAb,CAAA;IACH,OAAA;;IACD,MAAA,IAAIC,YAAY,CAAC7E,IAAD,CAAhB,EAAwB;YACpBA,IAAI,CAAC8E,MAAL,CAAY9E,IAAI,CAACrI,MAAL,GAAc,CAA1B,EAA6B,CAA7B,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAM8H,MAAM,GAAGsF,YAAY,CAACL,OAAD,EAAUL,OAAV,CAA3B,CAAA;QACA5E,MAAM,CAACiF,OAAP,GAAiBA,OAAjB,CAAA;IACA,IAAA,IAAM3M,SAAS,GAAGV,QAAM,CAACoI,MAAM,CAACsF,YAAR,EAAsBtF,MAAM,CAACE,KAA7B,EAAoC,CAApC,CAAxB,CAAA;IACAqF,IAAAA,sBAAoB,CAACvF,MAAD,EAAS1H,SAAT,CAApB,CAAA;IACAkN,IAAAA,eAAa,CAACxF,MAAD,EAAS4E,OAAT,CAAb,CAAA;QACA5E,MAAM,CAACqB,QAAP,GAAkB,IAAIM,YAAJ,CAAiB3B,MAAM,CAACyF,MAAxB,CAAlB,CAAA;QACAzF,MAAM,CAACoB,OAAP,GAAiB,IAAImB,WAAJ,CAAgBvC,MAAM,CAAC0F,KAAvB,CAAjB,CAAA;QACA1F,MAAM,CAACoC,EAAP,GAAY,IAAIT,YAAJ,CAAiB3B,MAAM,CAACqD,GAAxB,CAAZ,CAAA;IACArD,IAAAA,MAAM,CAACmC,MAAP,GAAgBhB,cAAc,CAACnB,MAAM,CAACoB,OAAR,EAAiBpB,MAAM,CAACqB,QAAxB,CAA9B,CAAA;IACA,IAAA,OAAOrB,MAAP,CAAA;IACH,GAzBe,CAAhB,CAAA;IA0BA,EAAA,IAAMA,MAAM,GAAGiC,KAAK,CAACC,OAAD,CAApB,CAAA;MACAlC,MAAM,CAAC2E,QAAP,GAAkBA,QAAlB,CAAA;IACA,EAAA,OAAO3E,MAAP,CAAA;IAEH,CAAA;;IAED,SAASuF,sBAAT,CAA8BvF,MAA9B,EAAsC1H,SAAtC,EAAiD;MAC7C,IAAMoN,KAAK,GAAG,EAAd,CAAA;IACA,EAAA,IAAQC,KAAR,GAAkB3F,MAAlB,CAAQ2F,KAAR,CAAA;;IACA,EAAA,KAAK,IAAI1M,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAG/D,SAAS,CAACJ,MAAhC,EAAwCe,CAAC,GAAGoD,GAA5C,EAAiDpD,CAAC,IAAI,CAAtD,EAAyD;IACrD;IACA,IAAA,IAAM0B,CAAC,GAAGrC,SAAS,CAACW,CAAD,CAAnB;IAAA,QAAwB2B,CAAC,GAAGtC,SAAS,CAACW,CAAC,GAAG,CAAL,CAArC;IAAA,QAA8C4B,CAAC,GAAGvC,SAAS,CAACW,CAAC,GAAG,CAAL,CAA3D,CAAA;IACAyM,IAAAA,KAAK,CAACzM,CAAD,CAAL,GAAW0B,CAAX,CAAA;IACA+K,IAAAA,KAAK,CAACzM,CAAC,GAAG,CAAL,CAAL,GAAe2B,CAAf,CAAA;QACA8K,KAAK,CAACzM,CAAC,GAAG,CAAL,CAAL,GAAe4B,CAAf,CALqD;;IAOrD,IAAA,IAAM+K,GAAG,GAAGvJ,GAAG,GAAGpD,CAAlB,CAAA;IACA,IAAA,IAAM4M,EAAE,GAAGF,KAAK,GAAGhL,CAAnB;IAAA,QAAsBmL,EAAE,GAAGH,KAAK,GAAG/K,CAAnC;IAAA,QAAsCmL,EAAE,GAAGJ,KAAK,GAAG9K,CAAnD,CAAA;IACA6K,IAAAA,KAAK,CAACE,GAAD,CAAL,GAAaC,EAAb,CAAA;IACAH,IAAAA,KAAK,CAACE,GAAG,GAAG,CAAP,CAAL,GAAiBE,EAAjB,CAAA;IACAJ,IAAAA,KAAK,CAACE,GAAG,GAAG,CAAP,CAAL,GAAiBG,EAAjB,CAAA;IACH,GAAA;;MACD/F,MAAM,CAAC0F,KAAP,GAAeA,KAAf,CAAA;IACH,CAAA;;IAED,SAASF,eAAT,CAAuBxF,MAAvB,EAA+B4E,OAA/B,EAAwC;IACpC,EAAA,IAAQa,MAAR,GAAwCzF,MAAxC,CAAQyF,MAAR;IAAA,MAAgBC,KAAhB,GAAwC1F,MAAxC,CAAgB0F,KAAhB;IAAA,MAAuBT,OAAvB,GAAwCjF,MAAxC,CAAuBiF,OAAvB;IAAA,MAAgC5B,GAAhC,GAAwCrD,MAAxC,CAAgCqD,GAAhC,CAAA;IACA,EAAA,IAAMtH,CAAC,GAAG6I,OAAO,CAACG,KAAlB,CAAA;;IACA,EAAA,KAAK,IAAI9L,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAG4I,OAAO,CAAC/M,MAA9B,EAAsCe,CAAC,GAAGoD,GAA1C,EAA+CpD,CAAC,EAAhD,EAAoD;IAChD,IAAA,IAAMsH,IAAI,GAAG0E,OAAO,CAAChM,CAAD,CAApB,CAAA;QACA,IAAI6G,CAAC,GAAG,CAAR,CAAA;IACA,IAAA,IAAM+C,IAAI,GAAGtC,IAAI,CAACrI,MAAlB,CAAA;;QACA,OAAO4H,CAAC,GAAG+C,IAAX,EAAiB;IACb,MAAA,IAAMlC,EAAE,GAAGJ,IAAI,CAACT,CAAD,CAAf,CAAA;IACA,MAAA,IAAIc,EAAE,GAAGL,IAAI,CAACT,CAAC,GAAG,CAAL,CAAb,CAAA;;IACA,MAAA,IAAIA,CAAC,KAAK+C,IAAI,GAAG,CAAjB,EAAoB;IAChBjC,QAAAA,EAAE,GAAGL,IAAI,CAAC,CAAD,CAAT,CAAA;IACH,OAAA;;IACD,MAAA,IAAMqF,GAAG,GAAGH,MAAM,CAACvN,MAAP,GAAgB,CAA5B,CAAA;IACA,MAAA,IAAMoD,EAAE,GAAGqF,EAAE,CAAC,CAAD,CAAb;IAAA,UAAkBpF,EAAE,GAAGoF,EAAE,CAAC,CAAD,CAAzB;IAAA,UAA8BqF,EAAE,GAAGpF,EAAE,CAAC,CAAD,CAArC;IAAA,UAA0CqF,EAAE,GAAGrF,EAAE,CAAC,CAAD,CAAjD,CAAA;UACA6E,MAAM,CAACjL,IAAP,CAAYc,EAAZ,EAAgBC,EAAhB,EAAoBQ,CAApB,EAAuBiK,EAAvB,EAA2BC,EAA3B,EAA+BlK,CAA/B,EAAkCT,EAAlC,EAAsCC,EAAtC,EAA0C,CAA1C,EAA6CyK,EAA7C,EAAiDC,EAAjD,EAAqD,CAArD,CAAA,CAAA;IACA,MAAA,IAAMtL,CAAC,GAAGiL,GAAG,GAAG,CAAhB;IAAA,UAAmBhL,CAAC,GAAGgL,GAAG,GAAG,CAA7B;cAAgC/K,CAAC,GAAG+K,GAApC;IAAA,UAAyCvF,CAAC,GAAGuF,GAAG,GAAG,CAAnD,CATa;;IAWbF,MAAAA,KAAK,CAAClL,IAAN,CAAWG,CAAX,EAAcE,CAAd,EAAiBD,CAAjB,EAAoBC,CAApB,EAAuBwF,CAAvB,EAA0BzF,CAA1B,EAXa;;IAcbwI,MAAAA,kBAAkB,CAACC,GAAD,EAAMoC,MAAN,EAAc9K,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB,EAAuBwF,CAAvB,CAAlB,CAAA;UACAP,CAAC,EAAA,CAAA;IACJ,KAAA;IACJ,GAAA;IACJ,CAAA;;IAED,SAASoG,qBAAT,CAA+BjB,OAA/B,EAAwC;MACpC,IAAIU,KAAK,GAAG,CAAZ,CAAA;MACA,IAAI1M,CAAC,GAAG,CAAR,CAAA;IACA,EAAA,IAAMoD,GAAG,GAAG4I,OAAO,CAAC/M,MAApB,CAAA;;MACA,OAAOe,CAAC,GAAGoD,GAAX,EAAgB;IACZsJ,IAAAA,KAAK,IAAKV,OAAO,CAAChM,CAAD,CAAP,CAAWf,MAArB,CAAA;QACAe,CAAC,EAAA,CAAA;IACJ,GAAA;;IACD,EAAA,OAAO0M,KAAP,CAAA;IACH,CAAA;;IAED,SAASL,YAAT,CAAsBL,OAAtB,EAA+BL,OAA/B,EAAwC;IACpC,EAAA,IAAMe,KAAK,GAAGO,qBAAqB,CAACjB,OAAD,CAAnC,CAAA;IACA,EAAA,IAAM5I,GAAG,GAAG4I,OAAO,CAAC/M,MAApB,CAAA;MACA,IAAMgI,KAAK,GAAG,EAAd;UAAkBoF,YAAY,GAAG,IAAI3D,YAAJ,CAAiBgE,KAAK,GAAG,CAAzB,CAAjC;UAA8DF,MAAM,GAAG,EAAvE;UAA2EpC,GAAG,GAAG,EAAjF,CAAA;IACA,EAAA,IAAMb,OAAO,GAAGmD,KAAK,GAAG,CAAxB;IAAA,MAA2BQ,OAAO,GAAGR,KAAK,GAAG,CAA7C,CAAA;IACA,EAAA,IAAM5J,CAAC,GAAG6I,OAAO,CAACG,KAAlB,CAAA;MAEA,IAAIqB,IAAI,GAAG,CAAX;UAAc1C,IAAI,GAAG,CAArB;UAAwBC,IAAI,GAAG,CAA/B,CAAA;;MACA,KAAK,IAAI1K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoD,GAApB,EAAyBpD,CAAC,EAA1B,EAA8B;IAC1B,IAAA,IAAMsH,IAAI,GAAG0E,OAAO,CAAChM,CAAD,CAApB,CAAA;;QACA,IAAIA,CAAC,GAAG,CAAR,EAAW;IACPiH,MAAAA,KAAK,CAAC1F,IAAN,CAAW4L,IAAI,GAAG,CAAlB,CAAA,CAAA;IACH,KAAA;;QACD,IAAItG,CAAC,GAAG,CAAR,CAAA;IACA,IAAA,IAAM+C,IAAI,GAAGtC,IAAI,CAACrI,MAAlB,CAAA;;QACA,OAAO4H,CAAC,GAAG+C,IAAX,EAAiB;IACb,MAAA,IAAMhI,CAAC,GAAG0F,IAAI,CAACT,CAAD,CAAd,CAAA;IACA,MAAA,IAAMjH,CAAC,GAAGgC,CAAC,CAAC,CAAD,CAAX;IAAA,UAAgB/B,CAAC,GAAG+B,CAAC,CAAC,CAAD,CAArB,CAAA;IAEAyK,MAAAA,YAAY,CAACc,IAAI,EAAL,CAAZ,GAAuBvN,CAAvB,CAAA;IACAyM,MAAAA,YAAY,CAACc,IAAI,EAAL,CAAZ,GAAuBtN,CAAvB,CALa;;IAQb2M,MAAAA,MAAM,CAAC/B,IAAD,CAAN,GAAe7K,CAAf,CAAA;IACA4M,MAAAA,MAAM,CAAC/B,IAAI,GAAG,CAAR,CAAN,GAAmB5K,CAAnB,CAAA;UACA2M,MAAM,CAAC/B,IAAI,GAAG,CAAR,CAAN,GAAmB3H,CAAnB,CAVa;;IAab0J,MAAAA,MAAM,CAACjD,OAAO,GAAGkB,IAAX,CAAN,GAAyB7K,CAAzB,CAAA;UACA4M,MAAM,CAACjD,OAAO,GAAGkB,IAAV,GAAiB,CAAlB,CAAN,GAA6B5K,CAA7B,CAAA;UACA2M,MAAM,CAACjD,OAAO,GAAGkB,IAAV,GAAiB,CAAlB,CAAN,GAA6B,CAA7B,CAAA;IAEAL,MAAAA,GAAG,CAACM,IAAD,CAAH,GAAY9K,CAAZ,CAAA;IACAwK,MAAAA,GAAG,CAACM,IAAI,GAAG,CAAR,CAAH,GAAgB7K,CAAhB,CAAA;IAEAuK,MAAAA,GAAG,CAAC8C,OAAO,GAAGxC,IAAX,CAAH,GAAsB9K,CAAtB,CAAA;UACAwK,GAAG,CAAC8C,OAAO,GAAGxC,IAAV,GAAiB,CAAlB,CAAH,GAA0B7K,CAA1B,CAAA;IAEA4K,MAAAA,IAAI,IAAI,CAAR,CAAA;IACAC,MAAAA,IAAI,IAAI,CAAR,CAAA;UACA7D,CAAC,EAAA,CAAA;IACJ,KAAA;IACJ,GAAA;;MACD,OAAO;IACHwF,IAAAA,YAAY,EAAZA,YADG;IAEHpF,IAAAA,KAAK,EAALA,KAFG;IAGHuF,IAAAA,MAAM,EAANA,MAHG;IAIHE,IAAAA,KAAK,EAALA,KAJG;IAKHtC,IAAAA,GAAG,EAAHA,GAAAA;OALJ,CAAA;IAQH,CAAA;;IAED,SAAS6B,YAAT,CAAsB3E,IAAtB,EAA4B;IACxB,EAAA,IAAI,CAAC6E,YAAY,CAAC7E,IAAD,CAAjB,EAAyB;IACrBA,IAAAA,IAAI,CAAC/F,IAAL,CAAU+F,IAAI,CAAC,CAAD,CAAd,CAAA,CAAA;IACH,GAAA;IACJ,CAAA;;IAED,SAAS6E,YAAT,CAAsB7E,IAAtB,EAA4B;IACxB,EAAA,IAAMlE,GAAG,GAAGkE,IAAI,CAACrI,MAAjB,CAAA;MACA,IAAiBqI,MAAAA,GAAAA,IAAI,CAAC,CAAD,CAArB;IAAA,MAAOjF,EAAP,GAAA,MAAA,CAAA,CAAA,CAAA;IAAA,MAAWC,EAAX,GAAA,MAAA,CAAA,CAAA,CAAA;IAAA,MAAA,KAAA,GAAqCgF,IAAI,CAAClE,GAAG,GAAG,CAAP,CAAzC;IAAA,MAA2B2J,EAA3B,GAAA,KAAA,CAAA,CAAA,CAAA;IAAA,MAA+BC,EAA/B,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;IACA,EAAA,OAAQ3K,EAAE,KAAK0K,EAAP,IAAazK,EAAE,KAAK0K,EAA5B,CAAA;IACH;;IC5JM,SAASI,gBAAT,CAA0BC,KAA1B,EAAiC1B,OAAjC,EAA0C;IAC7CA,EAAAA,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB;IAAEC,IAAAA,KAAK,EAAE,CAAT;IAAYwB,IAAAA,SAAS,EAAE,CAAA;OAAzC,EAA8C3B,OAA9C,CAAV,CAAA;MACA,IAAM1C,OAAO,GAAGoE,KAAK,CAACtB,GAAN,CAAU,UAAAwB,IAAI,EAAI;IAC9B,IAAA,IAAMxG,MAAM,GAAGyG,UAAU,CAACD,IAAD,EAAO5B,OAAP,CAAzB,CAAA;QACA5E,MAAM,CAACwG,IAAP,GAAcA,IAAd,CAAA;IACAjB,IAAAA,oBAAoB,CAACvF,MAAD,EAAS4E,OAAT,CAApB,CAAA;IACAY,IAAAA,aAAa,CAACxF,MAAD,EAAS4E,OAAT,CAAb,CAAA;QACA5E,MAAM,CAACqB,QAAP,GAAkB,IAAIM,YAAJ,CAAiB3B,MAAM,CAACyF,MAAxB,CAAlB,CAAA;QACAzF,MAAM,CAACoB,OAAP,GAAiB,IAAImB,WAAJ,CAAgBvC,MAAM,CAAC0F,KAAvB,CAAjB,CAAA;QACA1F,MAAM,CAACoC,EAAP,GAAY,IAAIT,YAAJ,CAAiB3B,MAAM,CAACqD,GAAxB,CAAZ,CAAA;IACArD,IAAAA,MAAM,CAACmC,MAAP,GAAgBhB,cAAc,CAACnB,MAAM,CAACoB,OAAR,EAAiBpB,MAAM,CAACqB,QAAxB,CAA9B,CAAA;IACA,IAAA,OAAOrB,MAAP,CAAA;IACH,GAVe,CAAhB,CAAA;IAWA,EAAA,IAAMA,MAAM,GAAGiC,KAAK,CAACC,OAAD,CAApB,CAAA;MACAlC,MAAM,CAACsG,KAAP,GAAeA,KAAf,CAAA;IACA,EAAA,OAAOtG,MAAP,CAAA;IACH,CAAA;IAEM,SAAS0G,aAAT,CAAuBJ,KAAvB,EAA8B1B,OAA9B,EAAuC;IAC1CA,EAAAA,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB;IAAEC,IAAAA,KAAK,EAAE,CAAT;IAAYwB,IAAAA,SAAS,EAAE,CAAvB;IAA0BI,IAAAA,IAAI,EAAE,MAAhC;IAAwCC,IAAAA,SAAS,EAAE,CAAA;OAArE,EAA0EhC,OAA1E,CAAV,CAAA;IACA,EAAA,IAAA,QAAA,GAAmCA,OAAnC;UAAQG,KAAR,YAAQA,KAAR;UAAe4B,IAAf,YAAeA,IAAf;UAAqBC,SAArB,YAAqBA,SAArB,CAAA;MACA,IAAM1E,OAAO,GAAGoE,KAAK,CAACtB,GAAN,CAAU,UAAAwB,IAAI,EAAI;IAC9B,IAAA,IAAMK,UAAU,GAAGJ,UAAU,CAACD,IAAD,EAAO5B,OAAP,CAA7B,CAAA;QACAiC,UAAU,CAACL,IAAX,GAAkBA,IAAlB,CAAA;IACA,IAAA,IAAQM,UAAR,GAAoCD,UAApC,CAAQC,UAAR;IAAA,QAAoBC,WAApB,GAAoCF,UAApC,CAAoBE,WAApB,CAAA;IACA,IAAA,IAAM/G,MAAM,GAAG;IAAEwG,MAAAA,IAAI,EAAJA,IAAAA;SAAjB,CAAA;IACA,IAAA,IAAIQ,MAAJ,CAAA;;IACA,IAAA,KAAK,IAAI/N,CAAC,GAAG,CAAR,EAAWoD,GAAG,GAAGmK,IAAI,CAACtO,MAA3B,EAAmCe,CAAC,GAAGoD,GAAvC,EAA4CpD,CAAC,EAA7C,EAAiD;IAC7CuN,MAAAA,IAAI,CAACvN,CAAD,CAAJ,CAAQ,CAAR,CAAA,GAAauN,IAAI,CAACvN,CAAD,CAAJ,CAAQ,CAAR,KAAc,CAA3B,CAAA;IACH,KAAA;;QACD,IAAI0N,IAAI,KAAK,MAAb,EAAqB;UACjB3G,MAAM,CAAC8G,UAAP,GAAoBA,UAApB,CAAA;UACA9G,MAAM,CAAC+G,WAAP,GAAqBP,IAArB,CAAA;IACAQ,MAAAA,MAAM,GAAG,CAACJ,SAAD,EAAY7B,KAAZ,CAAT,CAAA;IACH,KAJD,MAIO;UACH/E,MAAM,CAAC8G,UAAP,GAAoBN,IAApB,CAAA;UACAxG,MAAM,CAAC+G,WAAP,GAAqBA,WAArB,CAAA;IACAC,MAAAA,MAAM,GAAG,CAACjC,KAAD,EAAQ6B,SAAR,CAAT,CAAA;IACH,KAAA;;QACD5G,MAAM,CAACgH,MAAP,GAAgBA,MAAhB,CAAA;IACAzB,IAAAA,oBAAoB,CAACvF,MAAD,EAAS4E,OAAT,CAApB,CAAA;IACAY,IAAAA,aAAa,CAACxF,MAAD,EAAS4E,OAAT,CAAb,CAAA;QACA5E,MAAM,CAACqB,QAAP,GAAkB,IAAIM,YAAJ,CAAiB3B,MAAM,CAACyF,MAAxB,CAAlB,CAAA;QACAzF,MAAM,CAACoB,OAAP,GAAiB,IAAImB,WAAJ,CAAgBvC,MAAM,CAAC0F,KAAvB,CAAjB,CAAA;QACA1F,MAAM,CAACoC,EAAP,GAAY,IAAIT,YAAJ,CAAiB3B,MAAM,CAACqD,GAAxB,CAAZ,CAAA;IACArD,IAAAA,MAAM,CAACmC,MAAP,GAAgBhB,cAAc,CAACnB,MAAM,CAACoB,OAAR,EAAiBpB,MAAM,CAACqB,QAAxB,CAA9B,CAAA;IACA,IAAA,OAAOrB,MAAP,CAAA;IACH,GA1Be,CAAhB,CAAA;IA2BA,EAAA,IAAMA,MAAM,GAAGiC,KAAK,CAACC,OAAD,CAApB,CAAA;MACAlC,MAAM,CAACsG,KAAP,GAAeA,KAAf,CAAA;IACA,EAAA,OAAOtG,MAAP,CAAA;IACH,CAAA;;IAED,SAASuF,oBAAT,CAA8BvF,MAA9B,EAAsC4E,OAAtC,EAA+C;IAC3C,EAAA,IAAM7I,CAAC,GAAG6I,OAAO,CAACG,KAAlB,CAAA;IACA,EAAA,IAAMiC,MAAM,GAAGhH,MAAM,CAACgH,MAAtB,CAAA;MACA,IAAIC,EAAE,GAAGlL,CAAT;UAAYmL,EAAE,GAAGnL,CAAjB,CAAA;;IACA,EAAA,IAAIiL,MAAJ,EAAY;IACRC,IAAAA,EAAE,GAAGD,MAAM,CAAC,CAAD,CAAX,CAAA;IACAE,IAAAA,EAAE,GAAGF,MAAM,CAAC,CAAD,CAAX,CAAA;IACH,GAAA;;MACD,IAAMvB,MAAM,GAAG,EAAf;UAAmBC,KAAK,GAAG,EAA3B;UAA+BrC,GAAG,GAAG,EAArC,CAAA;IACA,EAAA,IAAQyD,UAAR,GAAoC9G,MAApC,CAAQ8G,UAAR;IAAA,MAAoBC,WAApB,GAAoC/G,MAApC,CAAoB+G,WAApB,CAAA;MACA,IAAI9N,CAAC,GAAG,CAAR;IAAA,MAAWoD,GAAG,GAAGyK,UAAU,CAAC5O,MAA5B,CAAA;;MACA,OAAOe,CAAC,GAAGoD,GAAX,EAAgB;IACZ;IACA,IAAA,IAAM+J,IAAI,GAAGnN,CAAC,GAAG,CAAjB,CAAA;QACA,IAAqB6N,aAAAA,GAAAA,UAAU,CAAC7N,CAAD,CAA/B;IAAA,QAAOqC,EAAP,GAAA,aAAA,CAAA,CAAA,CAAA;IAAA,QAAWC,EAAX,GAAA,aAAA,CAAA,CAAA,CAAA;IAAA,QAAe4L,EAAf,GAAA,aAAA,CAAA,CAAA,CAAA,CAAA;IACA1B,IAAAA,MAAM,CAACW,IAAD,CAAN,GAAe9K,EAAf,CAAA;IACAmK,IAAAA,MAAM,CAACW,IAAI,GAAG,CAAR,CAAN,GAAmB7K,EAAnB,CAAA;QACAkK,MAAM,CAACW,IAAI,GAAG,CAAR,CAAN,GAAmBa,EAAE,GAAGE,EAAxB,CANY;;QASZ,IAAqBJ,cAAAA,GAAAA,WAAW,CAAC9N,CAAD,CAAhC;IAAA,QAAO+M,EAAP,GAAA,cAAA,CAAA,CAAA,CAAA;IAAA,QAAWC,EAAX,GAAA,cAAA,CAAA,CAAA,CAAA;IAAA,QAAemB,EAAf,GAAA,cAAA,CAAA,CAAA,CAAA,CAAA;IACA,IAAA,IAAM1D,IAAI,GAAGrH,GAAG,GAAG,CAAN,GAAU+J,IAAvB,CAAA;IACAX,IAAAA,MAAM,CAAC/B,IAAD,CAAN,GAAesC,EAAf,CAAA;IACAP,IAAAA,MAAM,CAAC/B,IAAI,GAAG,CAAR,CAAN,GAAmBuC,EAAnB,CAAA;QACAR,MAAM,CAAC/B,IAAI,GAAG,CAAR,CAAN,GAAmBwD,EAAE,GAAGE,EAAxB,CAbY;;QAgBZ,IAAMzD,IAAI,GAAItH,GAAG,GAAG,CAAP,GAAY,CAAZ,GAAgB+J,IAA7B,CAAA;IACAX,IAAAA,MAAM,CAAC9B,IAAD,CAAN,GAAerI,EAAf,CAAA;IACAmK,IAAAA,MAAM,CAAC9B,IAAI,GAAG,CAAR,CAAN,GAAmBpI,EAAnB,CAAA;QACAkK,MAAM,CAAC9B,IAAI,GAAG,CAAR,CAAN,GAAmBwD,EAAnB,CAnBY;;IAsBZ,IAAA,IAAMvD,IAAI,GAAIvH,GAAG,GAAG,CAAP,GAAY,CAAZ,GAAgBA,GAAG,GAAG,CAAtB,GAA0B+J,IAAvC,CAAA;IACAX,IAAAA,MAAM,CAAC7B,IAAD,CAAN,GAAeoC,EAAf,CAAA;IACAP,IAAAA,MAAM,CAAC7B,IAAI,GAAG,CAAR,CAAN,GAAmBqC,EAAnB,CAAA;IACAR,IAAAA,MAAM,CAAC7B,IAAI,GAAG,CAAR,CAAN,GAAmBwD,EAAnB,CAAA;QAEAnO,CAAC,EAAA,CAAA;IACJ,GAAA;;IACDA,EAAAA,CAAC,GAAG,CAAJ,CAAA;MACAoD,GAAG,GAAGoJ,MAAM,CAACvN,MAAb,CAAA;;MACA,OAAOe,CAAC,GAAGoD,GAAX,EAAgB;IACZ,IAAA,IAAMxD,CAAC,GAAG4M,MAAM,CAACxM,CAAD,CAAhB;IAAA,QAAqBH,CAAC,GAAG2M,MAAM,CAACxM,CAAC,GAAG,CAAL,CAA/B,CAAA;IACAoK,IAAAA,GAAG,CAAC7I,IAAJ,CAAS3B,CAAT,EAAYC,CAAZ,CAAA,CAAA;IACAG,IAAAA,CAAC,IAAI,CAAL,CAAA;IACH,GAAA;;IACDA,EAAAA,CAAC,GAAG,CAAJ,CAAA;MACAoD,GAAG,GAAGyK,UAAU,CAAC5O,MAAjB,CAAA;;IACA,EAAA,OAAOe,CAAC,GAAGoD,GAAG,GAAG,CAAjB,EAAoB;IAChB;IACA;QACA,IAAMwJ,EAAE,GAAG5M,CAAX;IAAA,QAAc6M,EAAE,GAAG7M,CAAC,GAAG,CAAvB;IAAA,QAA0B8M,EAAE,GAAGF,EAAE,GAAGxJ,GAApC;IAAA,QAAyCgL,EAAE,GAAGvB,EAAE,GAAGzJ,GAAnD,CAAA;IACAqJ,IAAAA,KAAK,CAAClL,IAAN,CAAWqL,EAAX,EAAeE,EAAf,EAAmBD,EAAnB,CAAA,CAAA;QACAJ,KAAK,CAAClL,IAAN,CAAWuL,EAAX,EAAesB,EAAf,EAAmBvB,EAAnB,CAAA,CALgB;IAQhB;;IACA,IAAA,IAAMwB,IAAI,GAAGjL,GAAG,GAAG,CAAnB,CAAA;IACA,IAAA,IAAMgD,EAAE,GAAGpG,CAAC,GAAGqO,IAAf;IAAA,QAAqB/H,EAAE,GAAGF,EAAE,GAAG,CAA/B;IAAA,QAAkCkI,EAAE,GAAGlI,EAAE,GAAGhD,GAA5C;IAAA,QAAiDmL,EAAE,GAAGjI,EAAE,GAAGlD,GAA3D,CAAA;IACAqJ,IAAAA,KAAK,CAAClL,IAAN,CAAW6E,EAAX,EAAekI,EAAf,EAAmBhI,EAAnB,CAAA,CAAA;IACAmG,IAAAA,KAAK,CAAClL,IAAN,CAAW+M,EAAX,EAAeC,EAAf,EAAmBjI,EAAnB,CAAA,CAAA;QACAtG,CAAC,EAAA,CAAA;IACJ,GAAA;;MACD+G,MAAM,CAAC0F,KAAP,GAAeA,KAAf,CAAA;MACA1F,MAAM,CAACyF,MAAP,GAAgBA,MAAhB,CAAA;MACAzF,MAAM,CAACqD,GAAP,GAAaA,GAAb,CAAA;;IACA,EAAA,IAAI2D,MAAJ,EAAY;QACR3K,GAAG,GAAGyK,UAAU,CAAC5O,MAAjB,CAAA;IACAe,IAAAA,CAAC,GAAG,CAAJ,CAAA;;QACA,OAAOA,CAAC,GAAGoD,GAAX,EAAgB;IACZyK,MAAAA,UAAU,CAAC7N,CAAD,CAAV,CAAc8L,KAAd,GAAsBkC,EAAtB,CAAA;IACAF,MAAAA,WAAW,CAAC9N,CAAD,CAAX,CAAe8L,KAAf,GAAuBmC,EAAvB,CAAA;UACAjO,CAAC,EAAA,CAAA;IACJ,KAAA;IACJ,GAAA;IACJ,CAAA;;IAED,SAASuM,aAAT,CAAuBxF,MAAvB,EAA+B4E,OAA/B,EAAwC;IACpC,EAAA,IAAQa,MAAR,GAAwDzF,MAAxD,CAAQyF,MAAR;IAAA,MAAgBC,KAAhB,GAAwD1F,MAAxD,CAAgB0F,KAAhB;IAAA,MAAuBoB,UAAvB,GAAwD9G,MAAxD,CAAuB8G,UAAvB;IAAA,MAAmCC,WAAnC,GAAwD/G,MAAxD,CAAmC+G,WAAnC;IAAA,MAAgD1D,GAAhD,GAAwDrD,MAAxD,CAAgDqD,GAAhD,CAAA;IACA,EAAA,IAAMtH,CAAC,GAAG6I,OAAO,CAACG,KAAlB,CAAA;IACA,EAAA,IAAM0C,KAAK,GAAG,CAACX,UAAD,EAAaC,WAAb,CAAd,CAAA;IACA,EAAA,IAAMW,YAAY,GAAG1H,MAAM,CAACgH,MAA5B,CAAA;;IAEA,EAAA,SAASW,eAAT,CAAyBhH,EAAzB,EAA6BC,EAA7B,EAAiC;IAC7B,IAAA,IAAMgF,GAAG,GAAGH,MAAM,CAACvN,MAAP,GAAgB,CAA5B,CAAA;IACAuN,IAAAA,MAAM,CAACjL,IAAP,CAAYmG,EAAE,CAAC,CAAD,CAAd,EAAmBA,EAAE,CAAC,CAAD,CAArB,EAA0B,CAAC+G,YAAY,GAAG/G,EAAE,CAACoE,KAAN,GAAchJ,CAA3B,IAAgC4E,EAAE,CAAC,CAAD,CAA5D,EAAiEC,EAAE,CAAC,CAAD,CAAnE,EAAwEA,EAAE,CAAC,CAAD,CAA1E,EAA+E,CAAC8G,YAAY,GAAG9G,EAAE,CAACmE,KAAN,GAAchJ,CAA3B,IAAgC6E,EAAE,CAAC,CAAD,CAAjH,EAAsHD,EAAE,CAAC,CAAD,CAAxH,EAA6HA,EAAE,CAAC,CAAD,CAA/H,EAAoIA,EAAE,CAAC,CAAD,CAAtI,EAA2IC,EAAE,CAAC,CAAD,CAA7I,EAAkJA,EAAE,CAAC,CAAD,CAApJ,EAAyJA,EAAE,CAAC,CAAD,CAA3J,CAAA,CAAA;IACA,IAAA,IAAMjG,CAAC,GAAGiL,GAAG,GAAG,CAAhB;IAAA,QAAmBhL,CAAC,GAAGgL,GAAG,GAAG,CAA7B;YAAgC/K,CAAC,GAAG+K,GAApC;IAAA,QAAyCvF,CAAC,GAAGuF,GAAG,GAAG,CAAnD,CAAA;IACAF,IAAAA,KAAK,CAAClL,IAAN,CAAWG,CAAX,EAAcE,CAAd,EAAiBD,CAAjB,EAAoBC,CAApB,EAAuBwF,CAAvB,EAA0BzF,CAA1B,CAAA,CAAA;IACAwI,IAAAA,kBAAkB,CAACC,GAAD,EAAMoC,MAAN,EAAc9K,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB,EAAuBwF,CAAvB,CAAlB,CAAA;IACH,GAAA;;IAED,EAAA,KAAK,IAAIpH,CAAC,GAAG,CAAR,EAAWoD,IAAG,GAAGoL,KAAK,CAACvP,MAA5B,EAAoCe,CAAC,GAAGoD,IAAxC,EAA6CpD,CAAC,EAA9C,EAAkD;IAC9C,IAAA,IAAIsH,IAAI,GAAGkH,KAAK,CAACxO,CAAD,CAAhB,CAAA;;QACA,IAAIA,CAAC,GAAG,CAAR,EAAW;IACPsH,MAAAA,IAAI,GAAGA,IAAI,CAACyE,GAAL,CAAS,UAAAlL,CAAC,EAAI;IACjB,QAAA,OAAOA,CAAP,CAAA;IACH,OAFM,CAAP,CAAA;IAGAyG,MAAAA,IAAI,GAAGA,IAAI,CAAC4E,OAAL,EAAP,CAAA;IACH,KAAA;;QACD,IAAIrF,CAAC,GAAG,CAAR,CAAA;IACA,IAAA,IAAM+C,IAAI,GAAGtC,IAAI,CAACrI,MAAL,GAAc,CAA3B,CAAA;;QACA,OAAO4H,CAAC,GAAG+C,IAAX,EAAiB;IACb,MAAA,IAAMlC,EAAE,GAAGJ,IAAI,CAACT,CAAD,CAAf,CAAA;IACA,MAAA,IAAMc,EAAE,GAAGL,IAAI,CAACT,CAAC,GAAG,CAAL,CAAf,CAAA;IACA6H,MAAAA,eAAe,CAAChH,EAAD,EAAKC,EAAL,CAAf,CAAA;UACAd,CAAC,EAAA,CAAA;IACJ,KAAA;IACJ,GAAA;;IACD,EAAA,IAAMzD,GAAG,GAAGyK,UAAU,CAAC5O,MAAvB,CAAA;MACA,IAAM0P,EAAE,GAAG,CAACb,WAAW,CAAC,CAAD,CAAZ,EAAiBD,UAAU,CAAC,CAAD,CAA3B,EAAgCA,UAAU,CAACzK,GAAG,GAAG,CAAP,CAA1C,EAAqD0K,WAAW,CAAC1K,GAAG,GAAG,CAAP,CAAhE,CAAX,CAAA;;IACA,EAAA,KAAK,IAAIpD,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG2O,EAAE,CAAC1P,MAAvB,EAA+Be,EAAC,IAAI,CAApC,EAAuC;IACnC,IAAA,IAAM0H,EAAE,GAAGiH,EAAE,CAAC3O,EAAD,CAAb;IAAA,QAAkB2H,GAAE,GAAGgH,EAAE,CAAC3O,EAAC,GAAG,CAAL,CAAzB,CAAA;IACA0O,IAAAA,eAAe,CAAChH,EAAD,EAAKC,GAAL,CAAf,CAAA;IACH,GAAA;IACJ,CAAA;;IAED,IAAMiH,MAAM,GAAG;IAAEhP,EAAAA,CAAC,EAAE,CAAL;IAAQC,EAAAA,CAAC,EAAE,CAAA;IAAX,CAAf;IAAA,IAA+BgP,MAAM,GAAG;IAAEjP,EAAAA,CAAC,EAAE,CAAL;IAAQC,EAAAA,CAAC,EAAE,CAAA;IAAX,CAAxC,CAAA;IAEO,SAAS2N,UAAT,CAAoBD,IAApB,EAA0B5B,OAA1B,EAAmC;IACtC;IACA,EAAA,IAAMmD,MAAM,GAAGnD,OAAO,CAAC2B,SAAR,GAAoB,CAAnC,CAAA;MACA,IAAMd,MAAM,GAAG,EAAf;UAAmBqB,UAAU,GAAG,EAAhC;UAAoCC,WAAW,GAAG,EAAlD,CAAA;IACA,EAAA,IAAM1K,GAAG,GAAGmK,IAAI,CAACtO,MAAjB,CAAA;MACA,IAAIe,CAAC,GAAG,CAAR,CAAA;;MACA,OAAOA,CAAC,GAAGoD,GAAX,EAAgB;IACZ,IAAA,IAAImC,EAAE,GAAGgI,IAAI,CAACvN,CAAD,CAAb;IAAA,QACIwF,EAAE,GAAG+H,IAAI,CAACvN,CAAC,GAAG,CAAL,CADb,CAAA;IAEA,IAAA,IAAM+O,QAAQ,GAAGxB,IAAI,CAACvN,CAAD,CAArB,CAHY;;IAKZ,IAAA,IAAIA,CAAC,KAAKoD,GAAG,GAAG,CAAhB,EAAmB;IACfmC,MAAAA,EAAE,GAAGgI,IAAI,CAACnK,GAAG,GAAG,CAAP,CAAT,CAAA;IACAoC,MAAAA,EAAE,GAAG+H,IAAI,CAACnK,GAAG,GAAG,CAAP,CAAT,CAAA;IACH,KAAA;;QACD,IAAM4L,EAAE,GAAGxJ,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;YACI0J,EAAE,GAAGzJ,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CADnB,CAAA;QAEA,IAAI2J,MAAM,GAAG,CAAb,CAAA;QACA,IAAMnF,GAAG,GAAG9J,IAAI,CAACkP,IAAL,CAAUH,EAAE,GAAGC,EAAf,CAAZ,CAAA;IACA,IAAA,IAAM/E,KAAK,GAAGJ,QAAQ,CAACC,GAAD,CAAtB,CAbY;;QAeZ,IAAI/J,CAAC,KAAK,CAAN,IAAWA,CAAC,KAAKoD,GAAG,GAAG,CAA3B,EAA8B;IAC1B8L,MAAAA,MAAM,GAAGhF,KAAT,CAAA;IACAgF,MAAAA,MAAM,IAAI,EAAV,CAAA;IACH,KAHD,MAGO;IACH;IACA,MAAA,IAAME,EAAE,GAAG7B,IAAI,CAACvN,CAAC,GAAG,CAAL,CAAf,CAAA;UACA4O,MAAM,CAAChP,CAAP,GAAWwP,EAAE,CAAC,CAAD,CAAF,GAAQ7J,EAAE,CAAC,CAAD,CAArB,CAAA;UACAqJ,MAAM,CAAC/O,CAAP,GAAWuP,EAAE,CAAC,CAAD,CAAF,GAAQ7J,EAAE,CAAC,CAAD,CAArB,CAAA;UACAsJ,MAAM,CAACjP,CAAP,GAAW4F,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB,CAAA;UACAsJ,MAAM,CAAChP,CAAP,GAAW2F,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB,CAAA;IACA,MAAA,IAAM8J,MAAM,GAAGC,QAAQ,CAACV,MAAD,EAASC,MAAT,CAAvB,CAAA;IACAK,MAAAA,MAAM,GAAGhF,KAAK,GAAGmF,MAAM,GAAG,CAA1B,CAAA;IACH,KAAA;;IACD,IAAA,IAAME,IAAI,GAAGtF,QAAQ,CAACiF,MAAD,CAArB,CAAA;QACA,IAAM5G,EAAE,GAAGyG,QAAX,CAAA;QACA,IAAMnP,CAAC,GAAGK,IAAI,CAACuP,GAAL,CAASD,IAAT,CAAiBjH,GAAAA,EAAE,CAAC,CAAD,CAA7B;YAAkCzI,CAAC,GAAGI,IAAI,CAACwP,GAAL,CAASF,IAAT,CAAiBjH,GAAAA,EAAE,CAAC,CAAD,CAAzD,CAAA;IACA,IAAA,IAAMoH,EAAE,GAAG,CAAC9P,CAAD,EAAIC,CAAJ,CAAX,CAAA;;IACA,IAAA,IAAA,cAAA,GAAuB8P,aAAa,CAACpK,EAAD,EAAKC,EAAL,EAASsJ,MAAT,CAApC;IAAA,QAAOc,KAAP,GAAA,cAAA,CAAA,CAAA,CAAA;IAAA,QAAcC,KAAd,GAAA,cAAA,CAAA,CAAA,CAAA,CAAA;;IACA,IAAA,IAAIC,GAAG,GAAGC,gBAAgB,CAACH,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBtH,EAArB,EAAyBoH,EAAzB,CAA1B,CAAA;IACA,IAAA,IAAIM,GAAG,GAAGD,gBAAgB,CAACF,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBvH,EAArB,EAAyBoH,EAAzB,CAA1B,CAlCY;;IAoCZ,IAAA,IAAI,CAACI,GAAD,IAAQ,CAACE,GAAb,EAAkB;IACd,MAAA,IAAMpG,IAAI,GAAG4C,MAAM,CAACvN,MAApB,CAAA;IACA,MAAA,IAAMgR,MAAM,GAAGzD,MAAM,CAAC5C,IAAI,GAAG,CAAR,CAArB,CAAA;IACA,MAAA,IAAMsG,MAAM,GAAG1D,MAAM,CAAC5C,IAAI,GAAG,CAAR,CAArB,CAAA;;IACA,MAAA,IAAI,CAACqG,MAAD,IAAW,CAACC,MAAhB,EAAwB;IACpB,QAAA,SAAA;IACH,OAAA;;UACDJ,GAAG,GAAG,CAACG,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAAN,CAAA;UACAD,GAAG,GAAG,CAACE,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAAN,CAAA;IACH,KAAA;;QACDJ,GAAG,CAAC,CAAD,CAAH,GAASf,QAAQ,CAAC,CAAD,CAAR,IAAe,CAAxB,CAAA;QACAiB,GAAG,CAAC,CAAD,CAAH,GAASjB,QAAQ,CAAC,CAAD,CAAR,IAAe,CAAxB,CA/CY;;IAiDZvC,IAAAA,MAAM,CAACjL,IAAP,CAAYuO,GAAZ,EAAiBE,GAAjB,CAAA,CAAA;;QACA,IAAIG,UAAU,CAACL,GAAD,EAAMvK,EAAN,EAAUC,EAAV,CAAd,EAA6B;UACzBqI,UAAU,CAACtM,IAAX,CAAgBuO,GAAhB,CAAA,CAAA;UACAhC,WAAW,CAACvM,IAAZ,CAAiByO,GAAjB,CAAA,CAAA;IACH,KAHD,MAGO;UACHnC,UAAU,CAACtM,IAAX,CAAgByO,GAAhB,CAAA,CAAA;UACAlC,WAAW,CAACvM,IAAZ,CAAiBuO,GAAjB,CAAA,CAAA;IACH,KAAA;;QACD9P,CAAC,EAAA,CAAA;IACJ,GAAA;;MAED,OAAO;IAAEoQ,IAAAA,YAAY,EAAE5D,MAAhB;IAAwBqB,IAAAA,UAAU,EAAVA,UAAxB;IAAoCC,IAAAA,WAAW,EAAXA,WAAAA;OAA3C,CAAA;IACH;;IAcD,IAAMwB,QAAQ,GAAG,SAAXA,QAAW,CAAwC,IAAA,EAAA,KAAA,EAAA;MAAA,IAAlCjN,EAAkC,QAArCzC,CAAqC;UAA3B0C,EAA2B,QAA9BzC,CAA8B,CAAA;MAAA,IAAhBkN,EAAgB,SAAnBnN,CAAmB;UAAToN,EAAS,SAAZnN,CAAY,CAAA;MACrD,IAAMwQ,GAAG,GAAGhO,EAAE,GAAG0K,EAAL,GAAUzK,EAAE,GAAG0K,EAA3B,CAAA;MACA,IAAMsD,GAAG,GAAGjO,EAAE,GAAG2K,EAAL,GAAU1K,EAAE,GAAGyK,EAA3B,CAAA;IACA,EAAA,IAAM7C,KAAK,GAAGjK,IAAI,CAACsQ,KAAL,CAAWD,GAAX,EAAgBD,GAAhB,CAAuBpQ,GAAAA,IAAI,CAAC+J,EAA5B,GAAiC,GAA/C,CAAA;IACA,EAAA,OAAO,CAACE,KAAK,GAAG,GAAT,IAAgB,GAAvB,CAAA;IACH,CALD,CAAA;;IAOO,SAASiG,UAAT,CAAoBtP,CAApB,EAAuB0E,EAAvB,EAA2BC,EAA3B,EAA+B;MAClC,IAAOnD,EAAP,GAAiBkD,EAAjB,CAAA,CAAA,CAAA;UAAWjD,EAAX,GAAiBiD,EAAjB,CAAA,CAAA,CAAA,CAAA;MACA,IAAOwH,EAAP,GAAiBvH,EAAjB,CAAA,CAAA,CAAA;UAAWwH,EAAX,GAAiBxH,EAAjB,CAAA,CAAA,CAAA,CAAA;MACA,IAAO5F,CAAP,GAAeiB,CAAf,CAAA,CAAA,CAAA;UAAUhB,CAAV,GAAegB,CAAf,CAAA,CAAA,CAAA,CAAA;MACA,OAAO,CAACyB,EAAE,GAAG0K,EAAN,IAAYpN,CAAZ,GAAgB,CAACmN,EAAE,GAAG1K,EAAN,IAAYxC,CAA5B,GAAgCwC,EAAE,GAAG2K,EAArC,GAA0CD,EAAE,GAAGzK,EAA/C,GAAoD,CAA3D,CAAA;IACH,CAAA;IAED;IACA;IACA;IACA;IACA;IACA;IACA;;IACA,SAASqN,aAAT,CAAuBpK,EAAvB,EAA2BC,EAA3B,EAA+BgL,QAA/B,EAAyC;MACrC,IAAMxB,EAAE,GAAGxJ,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;UAA0B0J,EAAE,GAAGzJ,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAAzC,CAAA;MACA,IAAMwE,GAAG,GAAG9J,IAAI,CAACsQ,KAAL,CAAWvB,EAAX,EAAeC,EAAf,CAAZ,CAAA;MACA,IAAMwB,IAAI,GAAG1G,GAAG,GAAG9J,IAAI,CAAC+J,EAAL,GAAU,CAA7B,CAAA;MACA,IAAI0G,OAAO,GAAGzQ,IAAI,CAACuP,GAAL,CAASiB,IAAT,IAAiBD,QAA/B;UAAyCG,OAAO,GAAG1Q,IAAI,CAACwP,GAAL,CAASgB,IAAT,IAAiBD,QAApE,CAAA;IACA,EAAA,IAAMI,GAAG,GAAG,CAACrL,EAAE,CAAC,CAAD,CAAF,GAAQmL,OAAT,EAAkBnL,EAAE,CAAC,CAAD,CAAF,GAAQoL,OAA1B,CAAZ,CAAA;IACA,EAAA,IAAME,GAAG,GAAG,CAACrL,EAAE,CAAC,CAAD,CAAF,GAAQkL,OAAT,EAAkBlL,EAAE,CAAC,CAAD,CAAF,GAAQmL,OAA1B,CAAZ,CAAA;MACA,IAAMG,IAAI,GAAG/G,GAAG,GAAG9J,IAAI,CAAC+J,EAAL,GAAU,CAA7B,CAAA;IACA0G,EAAAA,OAAO,GAAGzQ,IAAI,CAACuP,GAAL,CAASsB,IAAT,IAAiBN,QAA3B,CAAA;IACAG,EAAAA,OAAO,GAAG1Q,IAAI,CAACwP,GAAL,CAASqB,IAAT,IAAiBN,QAA3B,CAAA;IACA,EAAA,IAAMO,GAAG,GAAG,CAACxL,EAAE,CAAC,CAAD,CAAF,GAAQmL,OAAT,EAAkBnL,EAAE,CAAC,CAAD,CAAF,GAAQoL,OAA1B,CAAZ,CAAA;IACA,EAAA,IAAMK,GAAG,GAAG,CAACxL,EAAE,CAAC,CAAD,CAAF,GAAQkL,OAAT,EAAkBlL,EAAE,CAAC,CAAD,CAAF,GAAQmL,OAA1B,CAAZ,CAAA;IACA,EAAA,OAAO,CAAC,CAACC,GAAD,EAAMC,GAAN,CAAD,EAAa,CAACE,GAAD,EAAMC,GAAN,CAAb,CAAP,CAAA;IACH,CAAA;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;IACA,SAASjB,gBAAT,CAA0BxK,EAA1B,EAA8BC,EAA9B,EAAkC8C,EAAlC,EAAsCoH,EAAtC,EAA0C;MACtC,IAAMuB,GAAG,GAAGzL,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAAtB;UAA2B2L,GAAG,GAAG1L,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAA3C,CAAA;MACA,IAAM4L,GAAG,GAAGzB,EAAE,CAAC,CAAD,CAAF,GAAQpH,EAAE,CAAC,CAAD,CAAtB;UAA2B8I,GAAG,GAAG1B,EAAE,CAAC,CAAD,CAAF,GAAQpH,EAAE,CAAC,CAAD,CAA3C,CAAA;;IACA,EAAA,IAAI2I,GAAG,KAAK,CAAR,IAAaE,GAAG,KAAK,CAAzB,EAA4B;IACxB,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IACD,EAAA,IAAID,GAAG,KAAK,CAAR,IAAaE,GAAG,KAAK,CAAzB,EAA4B;IACxB,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAED,EAAA,IAAMC,EAAE,GAAGH,GAAG,GAAGD,GAAjB,CAAA;IACA,EAAA,IAAMK,EAAE,GAAGF,GAAG,GAAGD,GAAjB,CAAA;IAEA,EAAA,IAAMtE,EAAE,GAAGtH,EAAE,CAAC,CAAD,CAAF,GAAQ8L,EAAE,GAAG9L,EAAE,CAAC,CAAD,CAA1B,CAAA;IACA,EAAA,IAAMe,EAAE,GAAGgC,EAAE,CAAC,CAAD,CAAF,GAAQgJ,EAAE,GAAGhJ,EAAE,CAAC,CAAD,CAA1B,CAAA;MAEA,IAAI1I,CAAJ,EAAOC,CAAP,CAAA;;MAEA,IAAIoR,GAAG,KAAK,CAAZ,EAAe;IACXrR,IAAAA,CAAC,GAAG2F,EAAE,CAAC,CAAD,CAAN,CAAA;IACA1F,IAAAA,CAAC,GAAGyR,EAAE,GAAG1R,CAAL,GAAS0G,EAAb,CAAA;IACH,GAHD,MAGO,IAAI6K,GAAG,KAAK,CAAZ,EAAe;IAClBvR,IAAAA,CAAC,GAAG0I,EAAE,CAAC,CAAD,CAAN,CAAA;IACAzI,IAAAA,CAAC,GAAGwR,EAAE,GAAGzR,CAAL,GAASiN,EAAb,CAAA;IACH,GAHM,MAGA,IAAIqE,GAAG,KAAK,CAAZ,EAAe;IAClBrR,IAAAA,CAAC,GAAG0F,EAAE,CAAC,CAAD,CAAN,CAAA;IACA3F,IAAAA,CAAC,GAAG,CAACC,CAAC,GAAGyG,EAAL,IAAWgL,EAAf,CAAA;IACH,GAHM,MAGA,IAAIF,GAAG,KAAK,CAAZ,EAAe;IAClBvR,IAAAA,CAAC,GAAGyI,EAAE,CAAC,CAAD,CAAN,CAAA;IACA1I,IAAAA,CAAC,GAAG,CAACC,CAAC,GAAGgN,EAAL,IAAWwE,EAAf,CAAA;IACH,GAHM,MAGA;QACHzR,CAAC,GAAG,CAAC0G,EAAE,GAAGuG,EAAN,KAAawE,EAAE,GAAGC,EAAlB,CAAJ,CAAA;IACAzR,IAAAA,CAAC,GAAGwR,EAAE,GAAGzR,CAAL,GAASiN,EAAb,CAAA;IACH,GAAA;;IACD,EAAA,OAAO,CAACjN,CAAD,EAAIC,CAAJ,CAAP,CAAA;IACH;;IC5UM,SAAS0R,QAAT,CAAkBC,KAAlB,EAAyB7F,OAAzB,EAAuC;IAAA,EAAA,IAAdA,OAAc,KAAA,KAAA,CAAA,EAAA;IAAdA,IAAAA,OAAc,GAAJ,EAAI,CAAA;IAAA,GAAA;;IAC1CA,EAAAA,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB;IAAEiD,IAAAA,MAAM,EAAE,CAAV;IAAa2C,IAAAA,MAAM,EAAE,CAArB;IAAwBC,IAAAA,cAAc,EAAE,CAAA;OAA1D,EAA+D/F,OAA/D,CAAV,CAAA;IACA,EAAA,IAAM+F,cAAc,GAAGzR,IAAI,CAAC0R,KAAL,CAAW1R,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYyL,OAAO,CAAC+F,cAApB,CAAX,CAAvB,CAAA;IACA,EAAA,IAAA,QAAA,GAA2B/F,OAA3B;UAAQmD,MAAR,YAAQA,MAAR;UAAgB2C,MAAhB,YAAgBA,MAAhB,CAAA;MACA,IAAMG,IAAI,GAAG,GAAA,GAAMF,cAAN,GAAuB,GAAvB,GAA6BzR,IAAI,CAAC+J,EAAlC,GAAuC,CAApD,CAAA;IACA,EAAA,IAAM6H,eAAe,GAAIH,cAAc,GAAG,CAA1C,CAAA;MACA,IAAMlF,MAAM,GAAG,IAAI9D,YAAJ,CAAiBmJ,eAAe,GAAG,CAAlB,GAAsB,CAAvC,CAAf,CAAA;MACA,IAAOC,OAAP,GAA2BN,KAA3B,CAAA,CAAA,CAAA;UAAgBO,OAAhB,GAA2BP,KAA3B,CAAA,CAAA,CAAA,CAAA;MACA,IAAI7E,GAAG,GAAG,CAAV;UAAaqF,IAAI,GAAG,CAApB,CAAA;IACA,EAAA,IAAMC,MAAM,GAAGJ,eAAe,GAAG,CAAjC;IAAA,MAAoC3E,OAAO,GAAG2E,eAAe,GAAG,CAAhE,CAAA;MACA,IAAM1J,OAAO,GAAG,EAAhB;UAAoBiC,GAAG,GAAG,EAA1B,CAAA;;IACA,EAAA,KAAK,IAAIpK,CAAC,GAAG,CAAC,CAAd,EAAiBA,CAAC,GAAG0R,cAArB,EAAqC1R,CAAC,EAAtC,EAA0C;IACtC,IAAA,IAAM+J,GAAG,GAAG6H,IAAI,GAAG5R,CAAnB,CAAA;QACA,IAAMJ,CAAC,GAAGK,IAAI,CAACuP,GAAL,CAASzF,GAAT,CAAA,GAAgB+E,MAAhB,GAAyBgD,OAAnC;IAAA,QAA4CjS,CAAC,GAAGI,IAAI,CAACwP,GAAL,CAAS1F,GAAT,CAAA,GAAgB+E,MAAhB,GAAyBiD,OAAzE,CAFsC;;IAItCvF,IAAAA,MAAM,CAACG,GAAD,CAAN,GAAc/M,CAAd,CAAA;IACA4M,IAAAA,MAAM,CAACG,GAAG,GAAG,CAAP,CAAN,GAAkB9M,CAAlB,CAAA;QACA2M,MAAM,CAACG,GAAG,GAAG,CAAP,CAAN,GAAkB,CAAlB,CANsC;;IAStCH,IAAAA,MAAM,CAACG,GAAG,GAAGsF,MAAP,CAAN,GAAuBrS,CAAvB,CAAA;QACA4M,MAAM,CAACG,GAAG,GAAG,CAAN,GAAUsF,MAAX,CAAN,GAA2BpS,CAA3B,CAAA;QACA2M,MAAM,CAACG,GAAG,GAAG,CAAN,GAAUsF,MAAX,CAAN,GAA2BR,MAA3B,CAAA;QAEA,IAAIS,CAAC,GAAG,CAAR;YAAWrK,CAAC,GAAG,CAAf,CAAA;IACAqK,IAAAA,CAAC,GAAG,GAAMtS,GAAAA,CAAC,GAAGkP,MAAJ,GAAa,CAAvB,CAAA;IACAjH,IAAAA,CAAC,GAAG,GAAMhI,GAAAA,CAAC,GAAGiP,MAAJ,GAAa,CAAvB,CAAA;IACA1E,IAAAA,GAAG,CAAC4H,IAAD,CAAH,GAAYE,CAAZ,CAAA;IACA9H,IAAAA,GAAG,CAAC4H,IAAI,GAAG,CAAR,CAAH,GAAgBnK,CAAhB,CAAA;IACAuC,IAAAA,GAAG,CAAC4H,IAAI,GAAG9E,OAAR,CAAH,GAAsBgF,CAAtB,CAAA;QACA9H,GAAG,CAAC4H,IAAI,GAAG,CAAP,GAAW9E,OAAZ,CAAH,GAA0BrF,CAA1B,CAAA;IAEA8E,IAAAA,GAAG,IAAI,CAAP,CAAA;IACAqF,IAAAA,IAAI,IAAI,CAAR,CAAA;;QACA,IAAIhS,CAAC,GAAG,CAAR,EAAW;IACP;UACAmI,OAAO,CAAC5G,IAAR,CAAa,CAAb,EAAgBvB,CAAC,GAAG,CAApB,EAAuBA,CAAvB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IACD2M,EAAAA,GAAG,IAAI,CAAP,CAAA;IACAH,EAAAA,MAAM,CAACG,GAAD,CAAN,GAAcH,MAAM,CAAC,CAAD,CAApB,CAAA;MACAA,MAAM,CAACG,GAAG,GAAG,CAAP,CAAN,GAAkBH,MAAM,CAAC,CAAD,CAAxB,CAAA;MACAA,MAAM,CAACG,GAAG,GAAG,CAAP,CAAN,GAAkBH,MAAM,CAAC,CAAD,CAAxB,CAAA;IACA,EAAA,IAAM2F,SAAS,GAAG3F,MAAM,CAACvN,MAAzB,CAAA;MACAuN,MAAM,CAAC2F,SAAS,GAAG,CAAb,CAAN,GAAwB3F,MAAM,CAAC,CAAD,CAA9B,CAAA;MACAA,MAAM,CAAC2F,SAAS,GAAG,CAAb,CAAN,GAAwB3F,MAAM,CAAC,CAAD,CAA9B,CAAA;IACAA,EAAAA,MAAM,CAAC2F,SAAS,GAAG,CAAb,CAAN,GAAwBV,MAAxB,CAAA;IAEA,EAAA,IAAMW,UAAU,GAAGjK,OAAO,CAAClJ,MAA3B,CAhD0C;;MAkD1C,KAAK,IAAIe,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGoS,UAApB,EAAgCpS,EAAC,EAAjC,EAAqC;IACjC,IAAA,IAAMyM,KAAK,GAAGtE,OAAO,CAACnI,EAAD,CAArB,CAAA;IACAmI,IAAAA,OAAO,CAAC5G,IAAR,CAAakL,KAAK,GAAGoF,eAArB,CAAA,CAAA;IACH,GAAA;;IAED,EAAA,IAAMQ,UAAU,GAAG,IAAI3J,YAAJ,CAAiB,CAACmJ,eAAe,GAAG,CAAlB,GAAsB,CAAtB,GAA0B,CAA3B,IAAgC,CAAjD,CAAnB,CAAA;MACA,IAAIhI,MAAM,GAAG,CAAC,CAAd,CAAA;MACA8C,GAAG,GAAGkF,eAAe,GAAG,CAAxB,CAAA;IACAG,EAAAA,IAAI,GAAG,CAAP,CAAA;;MACA,KAAK,IAAIhS,GAAC,GAAG,CAAR,EAAWoD,GAAG,GAAGoJ,MAAM,CAACvN,MAAP,GAAgB,CAAtC,EAAyCe,GAAC,GAAGoD,GAAG,GAAG,CAAnD,EAAsDpD,GAAC,IAAI,CAA3D,EAA8D;IAC1D,IAAA,IAAMqC,EAAE,GAAGmK,MAAM,CAACxM,GAAD,CAAjB;IAAA,QAAsBsC,EAAE,GAAGkK,MAAM,CAACxM,GAAC,GAAG,CAAL,CAAjC;IAAA,QAA0C+M,EAAE,GAAGP,MAAM,CAACxM,GAAC,GAAG,CAAL,CAArD;IAAA,QAA8DgN,EAAE,GAAGR,MAAM,CAACxM,GAAC,GAAG,CAAL,CAAzE,CAAA;IACAqS,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBxH,EAAvB,CAAA;IACAgQ,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBvH,EAAvB,CAAA;IACA+P,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuB4H,MAAvB,CAAA;IACAY,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBkD,EAAvB,CAAA;IACAsF,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBmD,EAAvB,CAAA;IACAqF,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuB4H,MAAvB,CAAA;IACAY,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBxH,EAAvB,CAAA;IACAgQ,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBvH,EAAvB,CAAA;IACA+P,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuB,CAAvB,CAAA;IACAwI,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBkD,EAAvB,CAAA;IACAsF,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuBmD,EAAvB,CAAA;IACAqF,IAAAA,UAAU,CAAC,EAAExI,MAAH,CAAV,GAAuB,CAAvB,CAAA;IACA,IAAA,IAAMnI,CAAC,GAAGiL,GAAG,GAAG,CAAhB;IAAA,QAAmBhL,CAAC,GAAGgL,GAAG,GAAG,CAA7B;YAAgC/K,CAAC,GAAG+K,GAApC;IAAA,QAAyCvF,CAAC,GAAGuF,GAAG,GAAG,CAAnD,CAd0D;;IAgB1DxE,IAAAA,OAAO,CAAC5G,IAAR,CAAaK,CAAb,EAAgBF,CAAhB,EAAmB0F,CAAnB,EAAsB1F,CAAtB,EAAyBC,CAAzB,EAA4ByF,CAA5B,CAAA,CAAA;IACAuF,IAAAA,GAAG,IAAI,CAAP,CAAA;IACA,IAAA,IAAM2F,EAAE,GAAGN,IAAI,GAAGH,eAAlB;IAAA,QAAmCU,EAAE,GAAG,CAACP,IAAI,GAAG,CAAR,IAAaH,eAArD,CAAA;QACAzH,GAAG,CAAC7I,IAAJ,CAAS+Q,EAAT,EAAab,MAAM,GAAG3C,MAAT,GAAkB,CAA/B,EAAkCyD,EAAlC,EAAsCd,MAAM,GAAG3C,MAAT,GAAkB,CAAxD,EAA2DwD,EAA3D,EAA+D,CAA/D,EAAkEC,EAAlE,EAAsE,CAAtE,CAAA,CAAA;QACAP,IAAI,EAAA,CAAA;IACP,GAAA;;IACD,EAAA,IAAM5J,QAAQ,GAAG,IAAIM,YAAJ,CAAiB8D,MAAM,CAACvN,MAAP,GAAgBoT,UAAU,CAACpT,MAA5C,CAAjB,CAAA;IACAmJ,EAAAA,QAAQ,CAACuB,GAAT,CAAa6C,MAAb,EAAqB,CAArB,CAAA,CAAA;IACApE,EAAAA,QAAQ,CAACuB,GAAT,CAAa0I,UAAb,EAAyB7F,MAAM,CAACvN,MAAhC,CAAA,CAAA;IACA,EAAA,IAAMiK,MAAM,GAAGhB,cAAc,CAACC,OAAD,EAAUC,QAAV,CAA7B,CAAA;MACA,OAAO;IAAEoE,IAAAA,MAAM,EAANA,MAAF;IAAUrE,IAAAA,OAAO,EAAE,IAAImB,WAAJ,CAAgBnB,OAAhB,CAAnB;IAA6CC,IAAAA,QAAQ,EAARA,QAA7C;IAAuDc,IAAAA,MAAM,EAANA,MAAvD;IAA+DC,IAAAA,EAAE,EAAE,IAAIT,YAAJ,CAAiB0B,GAAjB,CAAA;OAA1E,CAAA;IACH;;ICxFD;IACA;QAEMoI;IAEF,EAAA,SAAA,OAAA,CAAY5S,CAAZ,EAAmBC,CAAnB,EAA0BiD,CAA1B,EAAiC;IAAA,IAAA,IAArBlD,CAAqB,KAAA,KAAA,CAAA,EAAA;IAArBA,MAAAA,CAAqB,GAAjB,CAAiB,CAAA;IAAA,KAAA;;IAAA,IAAA,IAAdC,CAAc,KAAA,KAAA,CAAA,EAAA;IAAdA,MAAAA,CAAc,GAAV,CAAU,CAAA;IAAA,KAAA;;IAAA,IAAA,IAAPiD,CAAO,KAAA,KAAA,CAAA,EAAA;IAAPA,MAAAA,CAAO,GAAH,CAAG,CAAA;IAAA,KAAA;;QAC7B,IAAKlD,CAAAA,CAAL,GAASA,CAAT,CAAA;QACA,IAAKC,CAAAA,CAAL,GAASA,CAAT,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAASA,CAAT,CAAA;IAEH,GAAA;;;;IAED6G,EAAAA,MAAAA,CAAAA,MAAA,SAAI/J,GAAAA,CAAAA,CAAJ,EAAOC,CAAP,EAAUiD,CAAV,EAAa;QAET,IAAIA,CAAC,KAAK2P,SAAV,EAAqB3P,CAAC,GAAG,IAAA,CAAKA,CAAT,CAFZ;;QAIT,IAAKlD,CAAAA,CAAL,GAASA,CAAT,CAAA;QACA,IAAKC,CAAAA,CAAL,GAASA,CAAT,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAASA,CAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;;;IAEA4P,EAAAA,MAAAA,CAAAA,QAAA,SAAQ,KAAA,GAAA;IAEJ,IAAA,OAAO,IAAI,IAAA,CAAKC,WAAT,CAAqB,IAAK/S,CAAAA,CAA1B,EAA6B,IAAA,CAAKC,CAAlC,EAAqC,IAAKiD,CAAAA,CAA1C,CAAP,CAAA;;;aAIJ8P,OAAA,SAAK/K,IAAAA,CAAAA,CAAL,EAAQ;IAEJ,IAAA,IAAA,CAAKjI,CAAL,GAASiI,CAAC,CAACjI,CAAX,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,GAASgI,CAAC,CAAChI,CAAX,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,GAAS+E,CAAC,CAAC/E,CAAX,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJ+P,MAAA,SAAIhL,GAAAA,CAAAA,CAAJ,EAAO;IAEH,IAAA,IAAA,CAAKjI,CAAL,IAAUiI,CAAC,CAACjI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,IAAUgI,CAAC,CAAChI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,IAAU+E,CAAC,CAAC/E,CAAZ,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJgQ,YAAA,SAAUC,SAAAA,CAAAA,CAAV,EAAa;QAET,IAAKnT,CAAAA,CAAL,IAAUmT,CAAV,CAAA;QACA,IAAKlT,CAAAA,CAAL,IAAUkT,CAAV,CAAA;QACA,IAAKjQ,CAAAA,CAAL,IAAUiQ,CAAV,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJC,EAAAA,MAAAA,CAAAA,aAAA,SAAA,UAAA,CAAWtR,CAAX,EAAcC,CAAd,EAAiB;QAEb,IAAK/B,CAAAA,CAAL,GAAS8B,CAAC,CAAC9B,CAAF,GAAM+B,CAAC,CAAC/B,CAAjB,CAAA;QACA,IAAKC,CAAAA,CAAL,GAAS6B,CAAC,CAAC7B,CAAF,GAAM8B,CAAC,CAAC9B,CAAjB,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAASpB,CAAC,CAACoB,CAAF,GAAMnB,CAAC,CAACmB,CAAjB,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJmQ,EAAAA,MAAAA,CAAAA,kBAAA,SAAA,eAAA,CAAgBpL,CAAhB,EAAmBkL,CAAnB,EAAsB;IAElB,IAAA,IAAA,CAAKnT,CAAL,IAAUiI,CAAC,CAACjI,CAAF,GAAMmT,CAAhB,CAAA;IACA,IAAA,IAAA,CAAKlT,CAAL,IAAUgI,CAAC,CAAChI,CAAF,GAAMkT,CAAhB,CAAA;IACA,IAAA,IAAA,CAAKjQ,CAAL,IAAU+E,CAAC,CAAC/E,CAAF,GAAMiQ,CAAhB,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJG,MAAA,SAAIrL,GAAAA,CAAAA,CAAJ,EAAO;IAEH,IAAA,IAAA,CAAKjI,CAAL,IAAUiI,CAAC,CAACjI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,IAAUgI,CAAC,CAAChI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,IAAU+E,CAAC,CAAC/E,CAAZ,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJqQ,YAAA,SAAUJ,SAAAA,CAAAA,CAAV,EAAa;QAET,IAAKnT,CAAAA,CAAL,IAAUmT,CAAV,CAAA;QACA,IAAKlT,CAAAA,CAAL,IAAUkT,CAAV,CAAA;QACA,IAAKjQ,CAAAA,CAAL,IAAUiQ,CAAV,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJK,EAAAA,MAAAA,CAAAA,aAAA,SAAA,UAAA,CAAW1R,CAAX,EAAcC,CAAd,EAAiB;QAEb,IAAK/B,CAAAA,CAAL,GAAS8B,CAAC,CAAC9B,CAAF,GAAM+B,CAAC,CAAC/B,CAAjB,CAAA;QACA,IAAKC,CAAAA,CAAL,GAAS6B,CAAC,CAAC7B,CAAF,GAAM8B,CAAC,CAAC9B,CAAjB,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAASpB,CAAC,CAACoB,CAAF,GAAMnB,CAAC,CAACmB,CAAjB,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJuQ,WAAA,SAASxL,QAAAA,CAAAA,CAAT,EAAY;IAER,IAAA,IAAA,CAAKjI,CAAL,IAAUiI,CAAC,CAACjI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,IAAUgI,CAAC,CAAChI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,IAAU+E,CAAC,CAAC/E,CAAZ,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJwQ,iBAAA,SAAeC,cAAAA,CAAAA,MAAf,EAAuB;QAEnB,IAAK3T,CAAAA,CAAL,IAAU2T,MAAV,CAAA;QACA,IAAK1T,CAAAA,CAAL,IAAU0T,MAAV,CAAA;QACA,IAAKzQ,CAAAA,CAAL,IAAUyQ,MAAV,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJC,EAAAA,MAAAA,CAAAA,kBAAA,SAAA,eAAA,CAAgB9R,CAAhB,EAAmBC,CAAnB,EAAsB;QAElB,IAAK/B,CAAAA,CAAL,GAAS8B,CAAC,CAAC9B,CAAF,GAAM+B,CAAC,CAAC/B,CAAjB,CAAA;QACA,IAAKC,CAAAA,CAAL,GAAS6B,CAAC,CAAC7B,CAAF,GAAM8B,CAAC,CAAC9B,CAAjB,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAASpB,CAAC,CAACoB,CAAF,GAAMnB,CAAC,CAACmB,CAAjB,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;;;aAEA2Q,eAAA,SAAavP,YAAAA,CAAAA,CAAb,EAAgB;QAEZ,IAAMtE,CAAC,GAAG,IAAA,CAAKA,CAAf;YAAkBC,CAAC,GAAG,IAAA,CAAKA,CAA3B;YAA8BiD,CAAC,GAAG,IAAA,CAAKA,CAAvC,CAAA;IACA,IAAA,IAAM6B,CAAC,GAAGT,CAAC,CAACwP,QAAZ,CAAA;IAEA,IAAA,IAAMC,CAAC,GAAG,CAAKhP,IAAAA,CAAC,CAAC,CAAD,CAAD,GAAO/E,CAAP,GAAW+E,CAAC,CAAC,CAAD,CAAD,GAAO9E,CAAlB,GAAsB8E,CAAC,CAAC,EAAD,CAAD,GAAQ7B,CAA9B,GAAkC6B,CAAC,CAAC,EAAD,CAAxC,CAAV,CAAA;IAEA,IAAA,IAAA,CAAK/E,CAAL,GAAS,CAAC+E,CAAC,CAAC,CAAD,CAAD,GAAO/E,CAAP,GAAW+E,CAAC,CAAC,CAAD,CAAD,GAAO9E,CAAlB,GAAsB8E,CAAC,CAAC,CAAD,CAAD,GAAO7B,CAA7B,GAAiC6B,CAAC,CAAC,EAAD,CAAnC,IAA2CgP,CAApD,CAAA;IACA,IAAA,IAAA,CAAK9T,CAAL,GAAS,CAAC8E,CAAC,CAAC,CAAD,CAAD,GAAO/E,CAAP,GAAW+E,CAAC,CAAC,CAAD,CAAD,GAAO9E,CAAlB,GAAsB8E,CAAC,CAAC,CAAD,CAAD,GAAO7B,CAA7B,GAAiC6B,CAAC,CAAC,EAAD,CAAnC,IAA2CgP,CAApD,CAAA;IACA,IAAA,IAAA,CAAK7Q,CAAL,GAAS,CAAC6B,CAAC,CAAC,CAAD,CAAD,GAAO/E,CAAP,GAAW+E,CAAC,CAAC,CAAD,CAAD,GAAO9E,CAAlB,GAAsB8E,CAAC,CAAC,EAAD,CAAD,GAAQ7B,CAA9B,GAAkC6B,CAAC,CAAC,EAAD,CAApC,IAA4CgP,CAArD,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IACA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IACA;IAEA;IACA;IACA;IAEA;IAEA;;;aAEAC,SAAA,SAAO/L,MAAAA,CAAAA,CAAP,EAAU;IAEN,IAAA,IAAA,CAAKjI,CAAL,IAAUiI,CAAC,CAACjI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,IAAUgI,CAAC,CAAChI,CAAZ,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,IAAU+E,CAAC,CAAC/E,CAAZ,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJ+Q,eAAA,SAAaN,YAAAA,CAAAA,MAAb,EAAqB;IAEjB,IAAA,OAAO,IAAKD,CAAAA,cAAL,CAAoB,CAAA,GAAIC,MAAxB,CAAP,CAAA;;;aAIJtN,MAAA,SAAI4B,GAAAA,CAAAA,CAAJ,EAAO;IAEH,IAAA,IAAA,CAAKjI,CAAL,GAASK,IAAI,CAACgG,GAAL,CAAS,IAAKrG,CAAAA,CAAd,EAAiBiI,CAAC,CAACjI,CAAnB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,GAASI,IAAI,CAACgG,GAAL,CAAS,IAAKpG,CAAAA,CAAd,EAAiBgI,CAAC,CAAChI,CAAnB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,GAAS7C,IAAI,CAACgG,GAAL,CAAS,IAAKnD,CAAAA,CAAd,EAAiB+E,CAAC,CAAC/E,CAAnB,CAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJ5C,MAAA,SAAI2H,GAAAA,CAAAA,CAAJ,EAAO;IAEH,IAAA,IAAA,CAAKjI,CAAL,GAASK,IAAI,CAACC,GAAL,CAAS,IAAKN,CAAAA,CAAd,EAAiBiI,CAAC,CAACjI,CAAnB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,GAASI,IAAI,CAACC,GAAL,CAAS,IAAKL,CAAAA,CAAd,EAAiBgI,CAAC,CAAChI,CAAnB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,GAAS7C,IAAI,CAACC,GAAL,CAAS,IAAK4C,CAAAA,CAAd,EAAiB+E,CAAC,CAAC/E,CAAnB,CAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJgR,EAAAA,MAAAA,CAAAA,QAAA,SAAA,KAAA,CAAM7N,GAAN,EAAW/F,GAAX,EAAgB;IAEZ;QAEA,IAAKN,CAAAA,CAAL,GAASK,IAAI,CAACC,GAAL,CAAS+F,GAAG,CAACrG,CAAb,EAAgBK,IAAI,CAACgG,GAAL,CAAS/F,GAAG,CAACN,CAAb,EAAgB,IAAA,CAAKA,CAArB,CAAhB,CAAT,CAAA;QACA,IAAKC,CAAAA,CAAL,GAASI,IAAI,CAACC,GAAL,CAAS+F,GAAG,CAACpG,CAAb,EAAgBI,IAAI,CAACgG,GAAL,CAAS/F,GAAG,CAACL,CAAb,EAAgB,IAAA,CAAKA,CAArB,CAAhB,CAAT,CAAA;QACA,IAAKiD,CAAAA,CAAL,GAAS7C,IAAI,CAACC,GAAL,CAAS+F,GAAG,CAACnD,CAAb,EAAgB7C,IAAI,CAACgG,GAAL,CAAS/F,GAAG,CAAC4C,CAAb,EAAgB,IAAA,CAAKA,CAArB,CAAhB,CAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJiR,EAAAA,MAAAA,CAAAA,cAAA,SAAA,WAAA,CAAYC,MAAZ,EAAoBC,MAApB,EAA4B;IAExB,IAAA,IAAA,CAAKrU,CAAL,GAASK,IAAI,CAACC,GAAL,CAAS8T,MAAT,EAAiB/T,IAAI,CAACgG,GAAL,CAASgO,MAAT,EAAiB,IAAKrU,CAAAA,CAAtB,CAAjB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKC,CAAL,GAASI,IAAI,CAACC,GAAL,CAAS8T,MAAT,EAAiB/T,IAAI,CAACgG,GAAL,CAASgO,MAAT,EAAiB,IAAKpU,CAAAA,CAAtB,CAAjB,CAAT,CAAA;IACA,IAAA,IAAA,CAAKiD,CAAL,GAAS7C,IAAI,CAACC,GAAL,CAAS8T,MAAT,EAAiB/T,IAAI,CAACgG,GAAL,CAASgO,MAAT,EAAiB,IAAKnR,CAAAA,CAAtB,CAAjB,CAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJoR,EAAAA,MAAAA,CAAAA,cAAA,SAAA,WAAA,CAAYjO,GAAZ,EAAiB/F,GAAjB,EAAsB;IAElB,IAAA,IAAMjB,MAAM,GAAG,IAAKA,CAAAA,MAAL,EAAf,CAAA;QAEA,OAAO,IAAA,CAAK4U,YAAL,CAAkB5U,MAAM,IAAI,CAA5B,CAA+BqU,CAAAA,cAA/B,CAA8CrT,IAAI,CAACC,GAAL,CAAS+F,GAAT,EAAchG,IAAI,CAACgG,GAAL,CAAS/F,GAAT,EAAcjB,MAAd,CAAd,CAA9C,CAAP,CAAA;IAEH;IAID;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;;;aAEAoR,MAAA,SAAIxI,GAAAA,CAAAA,CAAJ,EAAO;IAEH,IAAA,OAAO,KAAKjI,CAAL,GAASiI,CAAC,CAACjI,CAAX,GAAe,IAAKC,CAAAA,CAAL,GAASgI,CAAC,CAAChI,CAA1B,GAA8B,IAAA,CAAKiD,CAAL,GAAS+E,CAAC,CAAC/E,CAAhD,CAAA;IAEH;;;IAIDqR,EAAAA,MAAAA,CAAAA,WAAA,SAAW,QAAA,GAAA;IAEP,IAAA,OAAO,KAAKvU,CAAL,GAAS,IAAKA,CAAAA,CAAd,GAAkB,IAAKC,CAAAA,CAAL,GAAS,IAAA,CAAKA,CAAhC,GAAoC,IAAA,CAAKiD,CAAL,GAAS,KAAKA,CAAzD,CAAA;;;IAIJ7D,EAAAA,MAAAA,CAAAA,SAAA,SAAS,MAAA,GAAA;QAEL,OAAOgB,IAAI,CAAC6H,IAAL,CAAU,KAAKlI,CAAL,GAAS,KAAKA,CAAd,GAAkB,KAAKC,CAAL,GAAS,KAAKA,CAAhC,GAAoC,KAAKiD,CAAL,GAAS,IAAKA,CAAAA,CAA5D,CAAP,CAAA;IAEH;IAID;IAEA;;;IAEAsR,EAAAA,MAAAA,CAAAA,YAAA,SAAY,SAAA,GAAA;IAER,IAAA,OAAO,KAAKP,YAAL,CAAkB,KAAK5U,MAAL,EAAA,IAAiB,CAAnC,CAAP,CAAA;;;aAIJoV,YAAA,SAAUpV,SAAAA,CAAAA,MAAV,EAAkB;IAEd,IAAA,OAAO,KAAKmV,SAAL,EAAA,CAAiBd,cAAjB,CAAgCrU,MAAhC,CAAP,CAAA;;;IAIJqV,EAAAA,MAAAA,CAAAA,OAAA,SAAA,IAAA,CAAKzM,CAAL,EAAQ0M,KAAR,EAAe;QAEX,IAAK3U,CAAAA,CAAL,IAAU,CAACiI,CAAC,CAACjI,CAAF,GAAM,IAAA,CAAKA,CAAZ,IAAiB2U,KAA3B,CAAA;QACA,IAAK1U,CAAAA,CAAL,IAAU,CAACgI,CAAC,CAAChI,CAAF,GAAM,IAAA,CAAKA,CAAZ,IAAiB0U,KAA3B,CAAA;QACA,IAAKzR,CAAAA,CAAL,IAAU,CAAC+E,CAAC,CAAC/E,CAAF,GAAM,IAAA,CAAKA,CAAZ,IAAiByR,KAA3B,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;IAIJC,EAAAA,MAAAA,CAAAA,cAAA,SAAY9M,WAAAA,CAAAA,EAAZ,EAAgBC,EAAhB,EAAoB4M,KAApB,EAA2B;IAEvB,IAAA,IAAA,CAAK3U,CAAL,GAAS8H,EAAE,CAAC9H,CAAH,GAAO,CAAC+H,EAAE,CAAC/H,CAAH,GAAO8H,EAAE,CAAC9H,CAAX,IAAgB2U,KAAhC,CAAA;IACA,IAAA,IAAA,CAAK1U,CAAL,GAAS6H,EAAE,CAAC7H,CAAH,GAAO,CAAC8H,EAAE,CAAC9H,CAAH,GAAO6H,EAAE,CAAC7H,CAAX,IAAgB0U,KAAhC,CAAA;IACA,IAAA,IAAA,CAAKzR,CAAL,GAAS4E,EAAE,CAAC5E,CAAH,GAAO,CAAC6E,EAAE,CAAC7E,CAAH,GAAO4E,EAAE,CAAC5E,CAAX,IAAgByR,KAAhC,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;;;aAIJE,QAAA,SAAM5M,KAAAA,CAAAA,CAAN,EAAS;IAEL,IAAA,OAAO,KAAK6M,YAAL,CAAkB,IAAlB,EAAwB7M,CAAxB,CAAP,CAAA;;;IAIJ6M,EAAAA,MAAAA,CAAAA,eAAA,SAAA,YAAA,CAAahT,CAAb,EAAgBC,CAAhB,EAAmB;IAEf,IAAA,IAAME,EAAE,GAAGH,CAAC,CAAC9B,CAAb;IAAA,QAAgBoC,EAAE,GAAGN,CAAC,CAAC7B,CAAvB;IAAA,QAA0BmI,EAAE,GAAGtG,CAAC,CAACoB,CAAjC,CAAA;IACA,IAAA,IAAMhB,EAAE,GAAGH,CAAC,CAAC/B,CAAb;IAAA,QAAgBqC,EAAE,GAAGN,CAAC,CAAC9B,CAAvB;IAAA,QAA0BoI,EAAE,GAAGtG,CAAC,CAACmB,CAAjC,CAAA;QAEA,IAAKlD,CAAAA,CAAL,GAASoC,EAAE,GAAGiG,EAAL,GAAUD,EAAE,GAAG/F,EAAxB,CAAA;QACA,IAAKpC,CAAAA,CAAL,GAASmI,EAAE,GAAGlG,EAAL,GAAUD,EAAE,GAAGoG,EAAxB,CAAA;QACA,IAAKnF,CAAAA,CAAL,GAASjB,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAxB,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;;;aAEA6S,aAAA,SAAW9M,UAAAA,CAAAA,CAAX,EAAc;QAEV,OAAO5H,IAAI,CAAC6H,IAAL,CAAU,KAAK8M,iBAAL,CAAuB/M,CAAvB,CAAV,CAAP,CAAA;IAEH;IAID;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;;;aAEAnH,SAAA,SAAOmH,MAAAA,CAAAA,CAAP,EAAU;IAEN,IAAA,OAASA,CAAC,CAACjI,CAAF,KAAQ,IAAKA,CAAAA,CAAd,IAAqBiI,CAAC,CAAChI,CAAF,KAAQ,IAAA,CAAKA,CAAlC,IAAyCgI,CAAC,CAAC/E,CAAF,KAAQ,KAAKA,CAA9D,CAAA;;;IAIJ+R,EAAAA,MAAAA,CAAAA,YAAA,SAAA,SAAA,CAAUC,KAAV,EAAiB7C,MAAjB,EAA6B;IAAA,IAAA,IAAZA,MAAY,KAAA,KAAA,CAAA,EAAA;IAAZA,MAAAA,MAAY,GAAH,CAAG,CAAA;IAAA,KAAA;;IAEzB,IAAA,IAAA,CAAKrS,CAAL,GAASkV,KAAK,CAAC7C,MAAD,CAAd,CAAA;IACA,IAAA,IAAA,CAAKpS,CAAL,GAASiV,KAAK,CAAC7C,MAAM,GAAG,CAAV,CAAd,CAAA;IACA,IAAA,IAAA,CAAKnP,CAAL,GAASgS,KAAK,CAAC7C,MAAM,GAAG,CAAV,CAAd,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;;;IAEA8C,EAAAA,MAAAA,CAAAA,SAAA,SAAS,MAAA,GAAA;IAEL,IAAA,IAAA,CAAKnV,CAAL,GAASK,IAAI,CAAC8U,MAAL,EAAT,CAAA;IACA,IAAA,IAAA,CAAKlV,CAAL,GAASI,IAAI,CAAC8U,MAAL,EAAT,CAAA;IACA,IAAA,IAAA,CAAKjS,CAAL,GAAS7C,IAAI,CAAC8U,MAAL,EAAT,CAAA;IAEA,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;;;;;;IClsBJ;IAMA;IACA;IACA;;QACMC;MACL,SAAc,SAAA,GAAA;IACb,IAAA,IAAA,CAAKC,GAAL,GAAW,IAAIzC,OAAJ,EAAX,CAAA;IACA,IAAA,IAAA,CAAK0C,GAAL,GAAW,IAAI1C,OAAJ,EAAX,CAAA;IACA,IAAA,IAAA,CAAK2C,KAAL,GAAa,IAAI3C,OAAJ,EAAb,CAAA;IACA,IAAA,IAAA,CAAK4C,EAAL,GAAU,IAAI5C,OAAJ,EAAV,CAJa;;IAKb,IAAA,IAAA,CAAK6C,IAAL,GAAY,CAAZ,CALa;;IAMb,IAAA,IAAA,CAAKC,UAAL,GAAkB,CAAlB,CANa;;IAOb,IAAA,IAAA,CAAKC,KAAL,GAAa,KAAb,CAPa;IAQb,GAAA;;;;IAEDC,EAAAA,MAAAA,CAAAA,iBAAA,SAAejQ,cAAAA,CAAAA,EAAf,EAAmBC,EAAnB,EAAuB+O,KAAvB,EAA8B;IAC7B,IAAA,IAAA,CAAKU,GAAL,CAAST,WAAT,CAAqBjP,EAAE,CAAC0P,GAAxB,EAA6BzP,EAAE,CAACyP,GAAhC,EAAqCV,KAArC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKW,GAAL,CAASV,WAAT,CAAqBjP,EAAE,CAAC2P,GAAxB,EAA6B1P,EAAE,CAAC0P,GAAhC,EAAqCX,KAArC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKa,EAAL,CAAQZ,WAAR,CAAoBjP,EAAE,CAAC6P,EAAvB,EAA2B5P,EAAE,CAAC4P,EAA9B,EAAkCb,KAAlC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKY,KAAL,CAAWX,WAAX,CAAuBjP,EAAE,CAAC4P,KAA1B,EAAiC3P,EAAE,CAAC2P,KAApC,EAA2CZ,KAA3C,CAAA,CAAA;IACA,IAAA,IAAA,CAAKc,IAAL,GAAY,CAAC7P,EAAE,CAAC6P,IAAH,GAAU9P,EAAE,CAAC8P,IAAd,IAAsBd,KAAtB,GAA8BhP,EAAE,CAAC8P,IAA7C,CAAA;IACA,IAAA,IAAA,CAAKC,UAAL,GAAkB,CAAC9P,EAAE,CAAC8P,UAAH,GAAgB/P,EAAE,CAAC+P,UAApB,IAAkCf,KAAlC,GAA0ChP,EAAE,CAAC+P,UAA/D,CAAA;;;aAGD1C,OAAA,SAAK6C,IAAAA,CAAAA,MAAL,EAAa;IACZ,IAAA,IAAA,CAAKR,GAAL,CAASrC,IAAT,CAAc6C,MAAM,CAACR,GAArB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKC,GAAL,CAAStC,IAAT,CAAc6C,MAAM,CAACP,GAArB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKE,EAAL,CAAQxC,IAAR,CAAa6C,MAAM,CAACL,EAApB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKD,KAAL,CAAWvC,IAAX,CAAgB6C,MAAM,CAACN,KAAvB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKE,IAAL,GAAYI,MAAM,CAACJ,IAAnB,CAAA;IACA,IAAA,IAAA,CAAKC,UAAL,GAAkBG,MAAM,CAACH,UAAzB,CAAA;;;;;;ICnCF;IACA;IACA;QAEMI;IAEF,EAAA,SAAA,OAAA,CAAYC,GAAZ,EAAiBC,GAAjB,EAAsBC,GAAtB,EAA2BC,GAA3B,EAAgCC,GAAhC,EAAqCC,GAArC,EAA0CC,GAA1C,EAA+CC,GAA/C,EAAoDC,GAApD,EAAyDC,GAAzD,EAA8DC,GAA9D,EAAmEC,GAAnE,EAAwEC,GAAxE,EAA6EC,GAA7E,EAAkFC,GAAlF,EAAuFC,GAAvF,EAA4F;IAExF,IAAA,IAAA,CAAKhD,QAAL,GAAgB,CAEZ,CAFY,EAET,CAFS,EAEN,CAFM,EAEH,CAFG,EAGZ,CAHY,EAGT,CAHS,EAGN,CAHM,EAGH,CAHG,EAIZ,CAJY,EAIT,CAJS,EAIN,CAJM,EAIH,CAJG,EAKZ,CALY,EAKT,CALS,EAKN,CALM,EAKH,CALG,CAAhB,CAAA;;QASA,IAAIiC,GAAG,KAAKlD,SAAZ,EAAuB;IAEnB,MAAA,IAAA,CAAK9I,GAAL,CAASgM,GAAT,EAAcC,GAAd,EAAmBC,GAAnB,EAAwBC,GAAxB,EAA6BC,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C,EAAiDC,GAAjD,EAAsDC,GAAtD,EAA2DC,GAA3D,EAAgEC,GAAhE,EAAqEC,GAArE,EAA0EC,GAA1E,EAA+EC,GAA/E,EAAoFC,GAApF,CAAA,CAAA;IAEH,KAAA;IAEJ,GAAA;;;;IAED/M,EAAAA,MAAAA,CAAAA,MAAA,SAAA,GAAA,CAAIgM,GAAJ,EAASC,GAAT,EAAcC,GAAd,EAAmBC,GAAnB,EAAwBC,GAAxB,EAA6BC,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C,EAAiDC,GAAjD,EAAsDC,GAAtD,EAA2DC,GAA3D,EAAgEC,GAAhE,EAAqEC,GAArE,EAA0EC,GAA1E,EAA+EC,GAA/E,EAAoF;QAEhF,IAAMC,EAAE,GAAG,IAAA,CAAKjD,QAAhB,CAAA;IAEAiD,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQhB,GAAR,CAAA;IAAagB,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQf,GAAR,CAAA;IAAae,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQd,GAAR,CAAA;IAAac,IAAAA,EAAE,CAAC,EAAD,CAAF,GAASb,GAAT,CAAA;IACvCa,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQZ,GAAR,CAAA;IAAaY,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQX,GAAR,CAAA;IAAaW,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQV,GAAR,CAAA;IAAaU,IAAAA,EAAE,CAAC,EAAD,CAAF,GAAST,GAAT,CAAA;IACvCS,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQR,GAAR,CAAA;IAAaQ,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQP,GAAR,CAAA;IAAaO,IAAAA,EAAE,CAAC,EAAD,CAAF,GAASN,GAAT,CAAA;IAAcM,IAAAA,EAAE,CAAC,EAAD,CAAF,GAASL,GAAT,CAAA;IACxCK,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQJ,GAAR,CAAA;IAAaI,IAAAA,EAAE,CAAC,CAAD,CAAF,GAAQH,GAAR,CAAA;IAAaG,IAAAA,EAAE,CAAC,EAAD,CAAF,GAASF,GAAT,CAAA;IAAcE,IAAAA,EAAE,CAAC,EAAD,CAAF,GAASD,GAAT,CAAA;IAExC,IAAA,OAAO,IAAP,CAAA;IAEH;IAID;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IAEA;IAEA;IACA;IAEA;IACA;IACA;IAEA;IAEA;;;aAEArD,WAAA,SAASnP,QAAAA,CAAAA,CAAT,EAAY;IAER,IAAA,OAAO,KAAK0S,gBAAL,CAAsB,IAAtB,EAA4B1S,CAA5B,CAAP,CAAA;IAEH;IAID;IAEA;IAEA;IAEA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IACA;IAEA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;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"}
1
+ {"version":3,"file":"poly-extrude.js","sources":["../node_modules/.pnpm/earcut@2.2.4/node_modules/earcut/src/earcut.js","../src/util.js","../src/polygon.js","../src/polyline.js","../src/cylinder.js","../src/math/Quaternion.js","../src/math/Vector3.js","../src/path/PathPoint.js","../src/math/Matrix4.js","../src/math/Curve.js","../src/math/Interpolations.js","../src/math/QuadraticBezierCurve3.js","../src/path/PathPointList.js","../src/path.js","../src/tube.js"],"sourcesContent":["'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/**\r\n * https://github.com/Turfjs/turf/blob/master/packages/turf-boolean-clockwise/index.ts\r\n * @param {*} ring\r\n * @returns\r\n */\r\nexport function isClockwise(ring) {\r\n let sum = 0;\r\n let i = 1;\r\n let prev;\r\n let cur;\r\n const len = ring.length;\r\n\r\n while (i < len) {\r\n prev = cur || ring[0];\r\n cur = ring[i];\r\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\r\n i++;\r\n }\r\n return sum > 0;\r\n}\r\n\r\nfunction v3Sub(out, v1, v2) {\r\n out[0] = v1[0] - v2[0];\r\n out[1] = v1[1] - v2[1];\r\n out[2] = v1[2] - v2[2];\r\n return out;\r\n}\r\n\r\nfunction v3Normalize(out, v) {\r\n const x = v[0];\r\n const y = v[1];\r\n const z = v[2];\r\n const d = Math.sqrt(x * x + y * y + z * z) || 1;\r\n out[0] = x / d;\r\n out[1] = y / d;\r\n out[2] = z / d;\r\n return out;\r\n}\r\n\r\nfunction v3Cross(out, v1, v2) {\r\n const ax = v1[0], ay = v1[1], az = v1[2],\r\n bx = v2[0], by = v2[1], bz = v2[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\nexport function generateNormal(indices, position) {\r\n\r\n function v3Set(p, a, b, c) {\r\n p[0] = a; p[1] = b; p[2] = c;\r\n }\r\n\r\n const p1 = [];\r\n const p2 = [];\r\n const p3 = [];\r\n\r\n const v21 = [];\r\n const v32 = [];\r\n\r\n const n = [];\r\n\r\n const len = indices.length;\r\n const normals = new Float32Array(position.length);\r\n let f = 0;\r\n while (f < len) {\r\n\r\n // const i1 = indices[f++] * 3;\r\n // const i2 = indices[f++] * 3;\r\n // const i3 = indices[f++] * 3;\r\n // const i1 = indices[f];\r\n // const i2 = indices[f + 1];\r\n // const i3 = indices[f + 2];\r\n const a = indices[f], b = indices[f + 1], c = indices[f + 2];\r\n const i1 = a * 3, i2 = b * 3, i3 = c * 3;\r\n\r\n v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);\r\n v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);\r\n v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);\r\n\r\n v3Sub(v32, p3, p2);\r\n v3Sub(v21, p1, p2);\r\n v3Cross(n, v32, v21);\r\n // Already be weighted by the triangle area\r\n for (let i = 0; i < 3; i++) {\r\n normals[i1 + i] += n[i];\r\n normals[i2 + i] += n[i];\r\n normals[i3 + i] += n[i];\r\n }\r\n f += 3;\r\n }\r\n\r\n let i = 0;\r\n const l = normals.length;\r\n while (i < l) {\r\n v3Set(n, normals[i], normals[i + 1], normals[i + 2]);\r\n v3Normalize(n, n);\r\n normals[i] = n[0] || 0;\r\n normals[i + 1] = n[1] || 0;\r\n normals[i + 2] = n[2] || 0;\r\n i += 3;\r\n }\r\n\r\n return normals;\r\n}\r\n\r\nexport function merge(results) {\r\n if (results.length === 1) {\r\n const result = {\r\n position: results[0].position,\r\n normal: results[0].normal,\r\n uv: results[0].uv,\r\n indices: results[0].indices,\r\n results\r\n };\r\n return result;\r\n }\r\n let plen = 0, ilen = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices } = results[i];\r\n plen += position.length;\r\n ilen += indices.length;\r\n }\r\n const result = {\r\n position: new Float32Array(plen),\r\n normal: new Float32Array(plen),\r\n uv: new Float32Array(plen / 3 * 2),\r\n indices: new Uint32Array(ilen),\r\n results\r\n };\r\n let pOffset = 0, pCount = 0, iIdx = 0, uvOffset = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices, normal, uv } = results[i];\r\n result.position.set(position, pOffset);\r\n result.normal.set(normal, pOffset);\r\n result.uv.set(uv, uvOffset);\r\n let j = 0;\r\n const len1 = indices.length;\r\n while (j < len1) {\r\n const pIndex = indices[j] + pCount;\r\n result.indices[iIdx] = pIndex;\r\n iIdx++;\r\n j++;\r\n }\r\n uvOffset += uv.length;\r\n pOffset += position.length;\r\n pCount += position.length / 3;\r\n }\r\n return result;\r\n}\r\n\r\nexport function radToDeg(rad) {\r\n return rad * 180 / Math.PI;\r\n}\r\n\r\nexport function degToRad(angle) {\r\n return angle / 180 * Math.PI;\r\n}\r\n\r\n// https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736\r\nexport function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {\r\n\r\n const idx1 = indexA * 3, idx2 = indexB * 3, idx3 = indexC * 3, idx4 = indexD * 3;\r\n const a_x = vertices[idx1];\r\n const a_y = vertices[idx1 + 1];\r\n const a_z = vertices[idx1 + 2];\r\n const b_x = vertices[idx2];\r\n const b_y = vertices[idx2 + 1];\r\n const b_z = vertices[idx2 + 2];\r\n const c_x = vertices[idx3];\r\n const c_y = vertices[idx3 + 1];\r\n const c_z = vertices[idx3 + 2];\r\n const d_x = vertices[idx4];\r\n const d_y = vertices[idx4 + 1];\r\n const d_z = vertices[idx4 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {\r\n\r\n uvs.push(a_x, 1 - a_z);\r\n uvs.push(b_x, 1 - b_z);\r\n uvs.push(c_x, 1 - c_z);\r\n uvs.push(d_x, 1 - d_z);\r\n } else {\r\n uvs.push(a_y, 1 - a_z);\r\n uvs.push(b_y, 1 - b_z);\r\n uvs.push(c_y, 1 - c_z);\r\n uvs.push(d_y, 1 - d_z);\r\n }\r\n\r\n}\r\n","\r\nimport earcut from 'earcut';\r\nimport { generateNormal, generateSideWallUV, isClockwise, merge } from './util';\r\n\r\nexport function extrudePolygons(polygons, options) {\r\n options = Object.assign({}, { depth: 2 }, options);\r\n const results = polygons.map(polygon => {\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n validateRing(ring);\r\n if (i === 0) {\r\n if (!isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n } else if (isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n if (isClosedRing(ring)) {\r\n ring.splice(ring.length - 1, 1);\r\n }\r\n }\r\n const result = flatVertices(polygon, options);\r\n result.polygon = polygon;\r\n const triangles = earcut(result.flatVertices, result.holes, 2);\r\n generateTopAndBottom(result, triangles);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.polygons = polygons;\r\n return result;\r\n\r\n}\r\n\r\nfunction generateTopAndBottom(result, triangles) {\r\n const index = [];\r\n const { count } = result;\r\n for (let i = 0, len = triangles.length; i < len; i += 3) {\r\n // top\r\n const a = triangles[i], b = triangles[i + 1], c = triangles[i + 2];\r\n index[i] = a;\r\n index[i + 1] = b;\r\n index[i + 2] = c;\r\n // bottom\r\n const idx = len + i;\r\n const a1 = count + a, b1 = count + b, c1 = count + c;\r\n index[idx] = a1;\r\n index[idx + 1] = b1;\r\n index[idx + 2] = c1;\r\n }\r\n result.index = index;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, polygon, uvs } = result;\r\n const z = options.depth;\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n let v2 = ring[j + 1];\r\n if (j === len1 - 1) {\r\n v2 = ring[0];\r\n }\r\n const idx = points.length / 3;\r\n const x1 = v1[0], y1 = v1[1], x2 = v2[0], y2 = v2[1];\r\n points.push(x1, y1, z, x2, y2, z, x1, y1, 0, x2, y2, 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // points.push(p3, p4, p1, p2);\r\n index.push(a, c, b, c, d, b);\r\n // index.push(c, d, b);\r\n\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n j++;\r\n }\r\n }\r\n}\r\n\r\nfunction calPolygonPointsCount(polygon) {\r\n let count = 0;\r\n let i = 0;\r\n const len = polygon.length;\r\n while (i < len) {\r\n count += (polygon[i].length);\r\n i++;\r\n }\r\n return count;\r\n}\r\n\r\nfunction flatVertices(polygon, options) {\r\n const count = calPolygonPointsCount(polygon);\r\n const len = polygon.length;\r\n const holes = [], flatVertices = new Float32Array(count * 2), points = [], uvs = [];\r\n const pOffset = count * 3, uOffset = count * 2;\r\n const z = options.depth;\r\n\r\n let idx0 = 0, idx1 = 0, idx2 = 0;\r\n for (let i = 0; i < len; i++) {\r\n const ring = polygon[i];\r\n if (i > 0) {\r\n holes.push(idx0 / 2);\r\n }\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const c = ring[j];\r\n const x = c[0], y = c[1];\r\n\r\n flatVertices[idx0++] = x;\r\n flatVertices[idx0++] = y;\r\n\r\n // top vertices\r\n points[idx1] = x;\r\n points[idx1 + 1] = y;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom vertices\r\n points[pOffset + idx1] = x;\r\n points[pOffset + idx1 + 1] = y;\r\n points[pOffset + idx1 + 2] = 0;\r\n\r\n uvs[idx2] = x;\r\n uvs[idx2 + 1] = y;\r\n\r\n uvs[uOffset + idx2] = x;\r\n uvs[uOffset + idx2 + 1] = y;\r\n\r\n idx1 += 3;\r\n idx2 += 2;\r\n j++;\r\n }\r\n }\r\n return {\r\n flatVertices,\r\n holes,\r\n points,\r\n count,\r\n uvs\r\n };\r\n\r\n}\r\n\r\nfunction validateRing(ring) {\r\n if (!isClosedRing(ring)) {\r\n ring.push(ring[0]);\r\n }\r\n}\r\n\r\nfunction isClosedRing(ring) {\r\n const len = ring.length;\r\n const [x1, y1] = ring[0], [x2, y2] = ring[len - 1];\r\n return (x1 === x2 && y1 === y2);\r\n}\r\n","import { degToRad, generateNormal, generateSideWallUV, merge, radToDeg } from './util';\r\n\r\nfunction checkOptions(options) {\r\n options.lineWidth = Math.max(0, options.lineWidth);\r\n options.depth = Math.max(0, options.depth);\r\n options.sideDepth = Math.max(0, options.sideDepth);\r\n}\r\n\r\nexport function extrudePolylines(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1, bottomStickGround: false }, options);\r\n checkOptions(options);\r\n const results = lines.map(line => {\r\n const result = expandLine(line, options);\r\n result.line = line;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nexport function extrudeSlopes(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1, side: 'left', sideDepth: 0, bottomStickGround: false }, options);\r\n checkOptions(options);\r\n const { depth, side, sideDepth } = options;\r\n const results = lines.map(line => {\r\n const tempResult = expandLine(line, options);\r\n tempResult.line = line;\r\n const { leftPoints, rightPoints } = tempResult;\r\n const result = { line };\r\n let depths;\r\n for (let i = 0, len = line.length; i < len; i++) {\r\n line[i][2] = line[i][2] || 0;\r\n }\r\n if (side === 'left') {\r\n result.leftPoints = leftPoints;\r\n result.rightPoints = line;\r\n depths = [sideDepth, depth];\r\n } else {\r\n result.leftPoints = line;\r\n result.rightPoints = rightPoints;\r\n depths = [depth, sideDepth];\r\n }\r\n result.depths = depths;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nfunction generateTopAndBottom(result, options) {\r\n const bottomStickGround = options.bottomStickGround;\r\n const z = options.depth;\r\n const depths = result.depths;\r\n let lz = z, rz = z;\r\n if (depths) {\r\n lz = depths[0];\r\n rz = depths[1];\r\n }\r\n const points = [], index = [], uvs = [];\r\n const { leftPoints, rightPoints } = result;\r\n let i = 0, len = leftPoints.length;\r\n while (i < len) {\r\n // top left\r\n const idx0 = i * 3;\r\n const [x1, y1, z1] = leftPoints[i];\r\n points[idx0] = x1;\r\n points[idx0 + 1] = y1;\r\n points[idx0 + 2] = lz + z1;\r\n\r\n // top right\r\n const [x2, y2, z2] = rightPoints[i];\r\n const idx1 = len * 3 + idx0;\r\n points[idx1] = x2;\r\n points[idx1 + 1] = y2;\r\n points[idx1 + 2] = rz + z2;\r\n\r\n // bottom left\r\n const idx2 = (len * 2) * 3 + idx0;\r\n points[idx2] = x1;\r\n points[idx2 + 1] = y1;\r\n points[idx2 + 2] = z1;\r\n if (bottomStickGround) {\r\n points[idx2 + 2] = 0;\r\n }\r\n\r\n // bottom right\r\n const idx3 = (len * 2) * 3 + len * 3 + idx0;\r\n points[idx3] = x2;\r\n points[idx3 + 1] = y2;\r\n points[idx3 + 2] = z2;\r\n if (bottomStickGround) {\r\n points[idx3 + 2] = 0;\r\n }\r\n\r\n i++;\r\n }\r\n i = 0;\r\n len = points.length;\r\n while (i < len) {\r\n const x = points[i], y = points[i + 1];\r\n uvs.push(x, y);\r\n i += 3;\r\n }\r\n i = 0;\r\n len = leftPoints.length;\r\n while (i < len - 1) {\r\n // top\r\n // left1 left2 right1,right2\r\n const a1 = i, b1 = i + 1, c1 = a1 + len, d1 = b1 + len;\r\n index.push(a1, c1, b1);\r\n index.push(c1, d1, b1);\r\n\r\n // bottom\r\n // left1 left2 right1,right2\r\n const len2 = len * 2;\r\n const a2 = i + len2, b2 = a2 + 1, c2 = a2 + len, d2 = b2 + len;\r\n index.push(a2, c2, b2);\r\n index.push(c2, d2, b2);\r\n i++;\r\n }\r\n result.index = index;\r\n result.points = points;\r\n result.uvs = uvs;\r\n if (depths) {\r\n len = leftPoints.length;\r\n i = 0;\r\n while (i < len) {\r\n leftPoints[i].depth = lz;\r\n rightPoints[i].depth = rz;\r\n i++;\r\n }\r\n }\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, leftPoints, rightPoints, uvs } = result;\r\n const z = options.depth;\r\n const bottomStickGround = options.bottomStickGround;\r\n const rings = [leftPoints, rightPoints];\r\n const depthsEnable = result.depths;\r\n\r\n function addOneSideIndex(v1, v2) {\r\n const idx = points.length / 3;\r\n let pIndex = points.length - 1;\r\n\r\n // top\r\n points[++pIndex] = v1[0];\r\n points[++pIndex] = v1[1];\r\n points[++pIndex] = (depthsEnable ? v1.depth : z) + v1[2];\r\n\r\n points[++pIndex] = v2[0];\r\n points[++pIndex] = v2[1];\r\n points[++pIndex] = (depthsEnable ? v2.depth : z) + v2[2];\r\n\r\n // points.push(v1[0], v1[1], (depthsEnable ? v1.depth : z) + v1[2], v2[0], v2[1], (depthsEnable ? v2.depth : z) + v2[2]);\r\n\r\n // bottom\r\n\r\n points[++pIndex] = v1[0];\r\n points[++pIndex] = v1[1];\r\n points[++pIndex] = bottomStickGround ? 0 : v1[2];\r\n\r\n points[++pIndex] = v2[0];\r\n points[++pIndex] = v2[1];\r\n points[++pIndex] = bottomStickGround ? 0 : v2[2];\r\n\r\n // points.push(v1[0], v1[1], v1[2], v2[0], v2[1], v2[2]);\r\n\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n index.push(a, c, b, c, d, b);\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n }\r\n\r\n for (let i = 0, len = rings.length; i < len; i++) {\r\n let ring = rings[i];\r\n if (i > 0) {\r\n ring = ring.map(p => {\r\n return p;\r\n });\r\n ring = ring.reverse();\r\n }\r\n let j = 0;\r\n const len1 = ring.length - 1;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n const v2 = ring[j + 1];\r\n addOneSideIndex(v1, v2);\r\n j++;\r\n }\r\n }\r\n const len = leftPoints.length;\r\n const vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];\r\n for (let i = 0; i < vs.length; i += 2) {\r\n const v1 = vs[i], v2 = vs[i + 1];\r\n addOneSideIndex(v1, v2);\r\n }\r\n}\r\n\r\nconst TEMPV1 = { x: 0, y: 0 }, TEMPV2 = { x: 0, y: 0 };\r\n\r\nexport function expandLine(line, options) {\r\n // let preAngle = 0;\r\n const radius = options.lineWidth / 2;\r\n const points = [], leftPoints = [], rightPoints = [];\r\n const len = line.length;\r\n let i = 0;\r\n while (i < len) {\r\n let p1 = line[i],\r\n p2 = line[i + 1];\r\n const currentp = line[i];\r\n // last vertex\r\n if (i === len - 1) {\r\n p1 = line[len - 2];\r\n p2 = line[len - 1];\r\n }\r\n const dy = p2[1] - p1[1],\r\n dx = p2[0] - p1[0];\r\n let rAngle = 0;\r\n const rad = Math.atan(dy / dx);\r\n const angle = radToDeg(rad);\r\n // preAngle = angle;\r\n if (i === 0 || i === len - 1) {\r\n rAngle = angle;\r\n rAngle -= 90;\r\n } else {\r\n // 至少3个顶点才会触发\r\n const p0 = line[i - 1];\r\n TEMPV1.x = p0[0] - p1[0];\r\n TEMPV1.y = p0[1] - p1[1];\r\n TEMPV2.x = p2[0] - p1[0];\r\n TEMPV2.y = p2[1] - p1[1];\r\n const vAngle = getAngle(TEMPV1, TEMPV2);\r\n rAngle = angle - vAngle / 2;\r\n }\r\n const rRad = degToRad(rAngle);\r\n const p3 = currentp;\r\n const x = Math.cos(rRad) + p3[0], y = Math.sin(rRad) + p3[1];\r\n const p4 = [x, y];\r\n const [line1, line2] = translateLine(p1, p2, radius);\r\n let op1 = lineIntersection(line1[0], line1[1], p3, p4);\r\n let op2 = lineIntersection(line2[0], line2[1], p3, p4);\r\n // 平行,回头路\r\n if (!op1 || !op2) {\r\n const len1 = points.length;\r\n const point1 = points[len1 - 2];\r\n const point2 = points[len1 - 1];\r\n if (!point1 || !point2) {\r\n continue;\r\n }\r\n op1 = [point1[0], point1[1]];\r\n op2 = [point2[0], point2[1]];\r\n }\r\n op1[2] = currentp[2] || 0;\r\n op2[2] = currentp[2] || 0;\r\n // const [op1, op2] = calOffsetPoint(rRad, radius, p1);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n i++;\r\n }\r\n\r\n return { offsetPoints: points, leftPoints, rightPoints };\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nfunction calOffsetPoint(rad, radius, p) {\r\n const [x, y] = p;\r\n const z = p[2] || 0;\r\n const x1 = Math.cos(rad) * radius, y1 = Math.sin(rad) * radius;\r\n const p1 = [x + x1, y + y1, z];\r\n const rad1 = rad += Math.PI;\r\n const x2 = Math.cos(rad1) * radius, y2 = Math.sin(rad1) * radius;\r\n const p2 = [x + x2, y + y2, z];\r\n return [p1, p2];\r\n}\r\n\r\nconst getAngle = ({ x: x1, y: y1 }, { x: x2, y: y2 }) => {\r\n const dot = x1 * x2 + y1 * y2;\r\n const det = x1 * y2 - y1 * x2;\r\n const angle = Math.atan2(det, dot) / Math.PI * 180;\r\n return (angle + 360) % 360;\r\n};\r\n\r\nexport function leftOnLine(p, p1, p2) {\r\n const [x1, y1] = p1;\r\n const [x2, y2] = p2;\r\n const [x, y] = p;\r\n return (y1 - y2) * x + (x2 - x1) * y + x1 * y2 - x2 * y1 > 0;\r\n}\r\n\r\n/**\r\n * 平移线\r\n * @param {*} p1\r\n * @param {*} p2\r\n * @param {*} distance\r\n * @returns\r\n */\r\nfunction translateLine(p1, p2, distance) {\r\n const dy = p2[1] - p1[1], dx = p2[0] - p1[0];\r\n const rad = Math.atan2(dy, dx);\r\n const rad1 = rad + Math.PI / 2;\r\n let offsetX = Math.cos(rad1) * distance, offsetY = Math.sin(rad1) * distance;\r\n const tp1 = [p1[0] + offsetX, p1[1] + offsetY];\r\n const tp2 = [p2[0] + offsetX, p2[1] + offsetY];\r\n const rad2 = rad - Math.PI / 2;\r\n offsetX = Math.cos(rad2) * distance;\r\n offsetY = Math.sin(rad2) * distance;\r\n const tp3 = [p1[0] + offsetX, p1[1] + offsetY];\r\n const tp4 = [p2[0] + offsetX, p2[1] + offsetY];\r\n return [[tp1, tp2], [tp3, tp4]];\r\n}\r\n\r\n/**\r\n * 直线交点\r\n * @param {*} p1\r\n * @param {*} p2\r\n * @param {*} p3\r\n * @param {*} p4\r\n * @returns\r\n */\r\nfunction lineIntersection(p1, p2, p3, p4) {\r\n const dx1 = p2[0] - p1[0], dy1 = p2[1] - p1[1];\r\n const dx2 = p4[0] - p3[0], dy2 = p4[1] - p3[1];\r\n if (dx1 === 0 && dx2 === 0) {\r\n return null;\r\n }\r\n if (dy1 === 0 && dy2 === 0) {\r\n return null;\r\n }\r\n\r\n const k1 = dy1 / dx1;\r\n const k2 = dy2 / dx2;\r\n\r\n const b1 = p1[1] - k1 * p1[0];\r\n const b2 = p3[1] - k2 * p3[0];\r\n\r\n let x, y;\r\n\r\n if (dx1 === 0) {\r\n x = p1[0];\r\n y = k2 * x + b2;\r\n } else if (dx2 === 0) {\r\n x = p3[0];\r\n y = k1 * x + b1;\r\n } else if (dy1 === 0) {\r\n y = p1[1];\r\n x = (y - b2) / k2;\r\n } else if (dy2 === 0) {\r\n y = p3[1];\r\n x = (y - b1) / k1;\r\n } else {\r\n x = (b2 - b1) / (k1 - k2);\r\n y = k1 * x + b1;\r\n }\r\n return [x, y];\r\n}\r\n","import { generateNormal } from './util';\r\n\r\nexport function cylinder(point, options = {}) {\r\n options = Object.assign({}, { radius: 1, height: 2, radialSegments: 6 }, options);\r\n const radialSegments = Math.round(Math.max(4, options.radialSegments));\r\n const { radius, height } = options;\r\n const aRad = 360 / radialSegments / 360 * Math.PI * 2;\r\n const circlePointsLen = (radialSegments + 1);\r\n const points = new Float32Array(circlePointsLen * 3 * 2);\r\n const [centerx, centery] = point;\r\n let idx = 0, uIdx = 0;\r\n const offset = circlePointsLen * 3, uOffset = circlePointsLen * 2;\r\n const indices = [], uvs = [];\r\n for (let i = -1; i < radialSegments; i++) {\r\n const rad = aRad * i;\r\n const x = Math.cos(rad) * radius + centerx, y = Math.sin(rad) * radius + centery;\r\n // bottom vertices\r\n points[idx] = x;\r\n points[idx + 1] = y;\r\n points[idx + 2] = 0;\r\n\r\n // top vertices\r\n points[idx + offset] = x;\r\n points[idx + 1 + offset] = y;\r\n points[idx + 2 + offset] = height;\r\n\r\n let u = 0, v = 0;\r\n u = 0.5 + x / radius / 2;\r\n v = 0.5 + y / radius / 2;\r\n uvs[uIdx] = u;\r\n uvs[uIdx + 1] = v;\r\n uvs[uIdx + uOffset] = u;\r\n uvs[uIdx + 1 + uOffset] = v;\r\n\r\n idx += 3;\r\n uIdx += 2;\r\n if (i > 1) {\r\n // bottom indices\r\n indices.push(0, i - 1, i);\r\n }\r\n }\r\n idx -= 3;\r\n points[idx] = points[0];\r\n points[idx + 1] = points[1];\r\n points[idx + 2] = points[2];\r\n const pointsLen = points.length;\r\n points[pointsLen - 3] = points[0];\r\n points[pointsLen - 2] = points[1];\r\n points[pointsLen - 1] = height;\r\n\r\n const indicesLen = indices.length;\r\n // top indices\r\n for (let i = 0; i < indicesLen; i++) {\r\n const index = indices[i];\r\n indices.push(index + circlePointsLen);\r\n }\r\n\r\n const sidePoints = new Float32Array((circlePointsLen * 3 * 2 - 6) * 2);\r\n let pIndex = -1;\r\n idx = circlePointsLen * 2;\r\n uIdx = 0;\r\n for (let i = 0, len = points.length / 2; i < len - 3; i += 3) {\r\n const x1 = points[i], y1 = points[i + 1], x2 = points[i + 3], y2 = points[i + 4];\r\n sidePoints[++pIndex] = x1;\r\n sidePoints[++pIndex] = y1;\r\n sidePoints[++pIndex] = height;\r\n sidePoints[++pIndex] = x2;\r\n sidePoints[++pIndex] = y2;\r\n sidePoints[++pIndex] = height;\r\n sidePoints[++pIndex] = x1;\r\n sidePoints[++pIndex] = y1;\r\n sidePoints[++pIndex] = 0;\r\n sidePoints[++pIndex] = x2;\r\n sidePoints[++pIndex] = y2;\r\n sidePoints[++pIndex] = 0;\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // indices.push(a, c, b, c, d, b);\r\n indices.push(c, a, d, a, b, d);\r\n idx += 4;\r\n const u1 = uIdx / circlePointsLen, u2 = (uIdx + 1) / circlePointsLen;\r\n uvs.push(u1, height / radius / 2, u2, height / radius / 2, u1, 0, u2, 0);\r\n uIdx++;\r\n }\r\n const position = new Float32Array(points.length + sidePoints.length);\r\n position.set(points, 0);\r\n position.set(sidePoints, points.length);\r\n const normal = generateNormal(indices, position);\r\n return { points, indices: new Uint32Array(indices), position, normal, uv: new Float32Array(uvs) };\r\n}\r\n","// code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js\r\n\r\n// import { clamp } from './MathUtils.js';\r\n\r\nclass Quaternion {\r\n\r\n constructor(x = 0, y = 0, z = 0, w = 1) {\r\n\r\n this.isQuaternion = true;\r\n\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n this._w = w;\r\n\r\n }\r\n\r\n static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\r\n\r\n // fuzz-free, array-based Quaternion SLERP operation\r\n\r\n let x0 = src0[srcOffset0 + 0],\r\n y0 = src0[srcOffset0 + 1],\r\n z0 = src0[srcOffset0 + 2],\r\n w0 = src0[srcOffset0 + 3];\r\n\r\n const x1 = src1[srcOffset1 + 0],\r\n y1 = src1[srcOffset1 + 1],\r\n z1 = src1[srcOffset1 + 2],\r\n w1 = src1[srcOffset1 + 3];\r\n\r\n if (t === 0) {\r\n\r\n dst[dstOffset + 0] = x0;\r\n dst[dstOffset + 1] = y0;\r\n dst[dstOffset + 2] = z0;\r\n dst[dstOffset + 3] = w0;\r\n return;\r\n\r\n }\r\n\r\n if (t === 1) {\r\n\r\n dst[dstOffset + 0] = x1;\r\n dst[dstOffset + 1] = y1;\r\n dst[dstOffset + 2] = z1;\r\n dst[dstOffset + 3] = w1;\r\n return;\r\n\r\n }\r\n\r\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\r\n\r\n let s = 1 - t;\r\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\r\n dir = (cos >= 0 ? 1 : -1),\r\n sqrSin = 1 - cos * cos;\r\n\r\n // Skip the Slerp for tiny steps to avoid numeric problems:\r\n if (sqrSin > Number.EPSILON) {\r\n\r\n const sin = Math.sqrt(sqrSin),\r\n len = Math.atan2(sin, cos * dir);\r\n\r\n s = Math.sin(s * len) / sin;\r\n t = Math.sin(t * len) / sin;\r\n\r\n }\r\n\r\n const tDir = t * dir;\r\n\r\n x0 = x0 * s + x1 * tDir;\r\n y0 = y0 * s + y1 * tDir;\r\n z0 = z0 * s + z1 * tDir;\r\n w0 = w0 * s + w1 * tDir;\r\n\r\n // Normalize in case we just did a lerp:\r\n if (s === 1 - t) {\r\n\r\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\r\n\r\n x0 *= f;\r\n y0 *= f;\r\n z0 *= f;\r\n w0 *= f;\r\n\r\n }\r\n\r\n }\r\n\r\n dst[dstOffset] = x0;\r\n dst[dstOffset + 1] = y0;\r\n dst[dstOffset + 2] = z0;\r\n dst[dstOffset + 3] = w0;\r\n\r\n }\r\n\r\n static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\r\n\r\n const x0 = src0[srcOffset0];\r\n const y0 = src0[srcOffset0 + 1];\r\n const z0 = src0[srcOffset0 + 2];\r\n const w0 = src0[srcOffset0 + 3];\r\n\r\n const x1 = src1[srcOffset1];\r\n const y1 = src1[srcOffset1 + 1];\r\n const z1 = src1[srcOffset1 + 2];\r\n const w1 = src1[srcOffset1 + 3];\r\n\r\n dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\r\n dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\r\n dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\r\n dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\r\n\r\n return dst;\r\n\r\n }\r\n\r\n get x() {\r\n\r\n return this._x;\r\n\r\n }\r\n\r\n set x(value) {\r\n\r\n this._x = value;\r\n this._onChangeCallback();\r\n\r\n }\r\n\r\n get y() {\r\n\r\n return this._y;\r\n\r\n }\r\n\r\n set y(value) {\r\n\r\n this._y = value;\r\n this._onChangeCallback();\r\n\r\n }\r\n\r\n get z() {\r\n\r\n return this._z;\r\n\r\n }\r\n\r\n set z(value) {\r\n\r\n this._z = value;\r\n this._onChangeCallback();\r\n\r\n }\r\n\r\n get w() {\r\n\r\n return this._w;\r\n\r\n }\r\n\r\n set w(value) {\r\n\r\n this._w = value;\r\n this._onChangeCallback();\r\n\r\n }\r\n\r\n set(x, y, z, w) {\r\n\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n this._w = w;\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n clone() {\r\n\r\n return new this.constructor(this._x, this._y, this._z, this._w);\r\n\r\n }\r\n\r\n copy(quaternion) {\r\n\r\n this._x = quaternion.x;\r\n this._y = quaternion.y;\r\n this._z = quaternion.z;\r\n this._w = quaternion.w;\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromEuler(euler, update = true) {\r\n\r\n const x = euler._x, y = euler._y, z = euler._z, order = euler._order;\r\n\r\n // http://www.mathworks.com/matlabcentral/fileexchange/\r\n // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\r\n // content/SpinCalc.m\r\n\r\n const cos = Math.cos;\r\n const sin = Math.sin;\r\n\r\n const c1 = cos(x / 2);\r\n const c2 = cos(y / 2);\r\n const c3 = cos(z / 2);\r\n\r\n const s1 = sin(x / 2);\r\n const s2 = sin(y / 2);\r\n const s3 = sin(z / 2);\r\n\r\n switch (order) {\r\n\r\n case 'XYZ':\r\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n break;\r\n\r\n case 'YXZ':\r\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n break;\r\n\r\n case 'ZXY':\r\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n break;\r\n\r\n case 'ZYX':\r\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n break;\r\n\r\n case 'YZX':\r\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n break;\r\n\r\n case 'XZY':\r\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n break;\r\n\r\n default:\r\n console.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order);\r\n\r\n }\r\n\r\n if (update === true) this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromAxisAngle(axis, angle) {\r\n\r\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\r\n\r\n // assumes axis is normalized\r\n\r\n const halfAngle = angle / 2, s = Math.sin(halfAngle);\r\n\r\n this._x = axis.x * s;\r\n this._y = axis.y * s;\r\n this._z = axis.z * s;\r\n this._w = Math.cos(halfAngle);\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromRotationMatrix(m) {\r\n\r\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\r\n\r\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n const te = m.elements,\r\n\r\n m11 = te[0], m12 = te[4], m13 = te[8],\r\n m21 = te[1], m22 = te[5], m23 = te[9],\r\n m31 = te[2], m32 = te[6], m33 = te[10],\r\n\r\n trace = m11 + m22 + m33;\r\n\r\n if (trace > 0) {\r\n\r\n const s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n this._w = 0.25 / s;\r\n this._x = (m32 - m23) * s;\r\n this._y = (m13 - m31) * s;\r\n this._z = (m21 - m12) * s;\r\n\r\n } else if (m11 > m22 && m11 > m33) {\r\n\r\n const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n this._w = (m32 - m23) / s;\r\n this._x = 0.25 * s;\r\n this._y = (m12 + m21) / s;\r\n this._z = (m13 + m31) / s;\r\n\r\n } else if (m22 > m33) {\r\n\r\n const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n this._w = (m13 - m31) / s;\r\n this._x = (m12 + m21) / s;\r\n this._y = 0.25 * s;\r\n this._z = (m23 + m32) / s;\r\n\r\n } else {\r\n\r\n const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n this._w = (m21 - m12) / s;\r\n this._x = (m13 + m31) / s;\r\n this._y = (m23 + m32) / s;\r\n this._z = 0.25 * s;\r\n\r\n }\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromUnitVectors(vFrom, vTo) {\r\n\r\n // assumes direction vectors vFrom and vTo are normalized\r\n\r\n let r = vFrom.dot(vTo) + 1;\r\n\r\n if (r < Number.EPSILON) {\r\n\r\n // vFrom and vTo point in opposite directions\r\n\r\n r = 0;\r\n\r\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\r\n\r\n this._x = -vFrom.y;\r\n this._y = vFrom.x;\r\n this._z = 0;\r\n this._w = r;\r\n\r\n } else {\r\n\r\n this._x = 0;\r\n this._y = -vFrom.z;\r\n this._z = vFrom.y;\r\n this._w = r;\r\n\r\n }\r\n\r\n } else {\r\n\r\n // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\r\n\r\n this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\r\n this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\r\n this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\r\n this._w = r;\r\n\r\n }\r\n\r\n return this.normalize();\r\n\r\n }\r\n\r\n // angleTo(q) {\r\n\r\n // return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\r\n\r\n // }\r\n\r\n rotateTowards(q, step) {\r\n\r\n const angle = this.angleTo(q);\r\n\r\n if (angle === 0) return this;\r\n\r\n const t = Math.min(1, step / angle);\r\n\r\n this.slerp(q, t);\r\n\r\n return this;\r\n\r\n }\r\n\r\n identity() {\r\n\r\n return this.set(0, 0, 0, 1);\r\n\r\n }\r\n\r\n invert() {\r\n\r\n // quaternion is assumed to have unit length\r\n\r\n return this.conjugate();\r\n\r\n }\r\n\r\n conjugate() {\r\n\r\n this._x *= -1;\r\n this._y *= -1;\r\n this._z *= -1;\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n dot(v) {\r\n\r\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\r\n\r\n }\r\n\r\n lengthSq() {\r\n\r\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\r\n\r\n }\r\n\r\n length() {\r\n\r\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\r\n\r\n }\r\n\r\n normalize() {\r\n\r\n let l = this.length();\r\n\r\n if (l === 0) {\r\n\r\n this._x = 0;\r\n this._y = 0;\r\n this._z = 0;\r\n this._w = 1;\r\n\r\n } else {\r\n\r\n l = 1 / l;\r\n\r\n this._x = this._x * l;\r\n this._y = this._y * l;\r\n this._z = this._z * l;\r\n this._w = this._w * l;\r\n\r\n }\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiply(q) {\r\n\r\n return this.multiplyQuaternions(this, q);\r\n\r\n }\r\n\r\n premultiply(q) {\r\n\r\n return this.multiplyQuaternions(q, this);\r\n\r\n }\r\n\r\n multiplyQuaternions(a, b) {\r\n\r\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\r\n\r\n const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\r\n const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\r\n\r\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\r\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\r\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\r\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n slerp(qb, t) {\r\n\r\n if (t === 0) return this;\r\n if (t === 1) return this.copy(qb);\r\n\r\n const x = this._x, y = this._y, z = this._z, w = this._w;\r\n\r\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\r\n\r\n let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\r\n\r\n if (cosHalfTheta < 0) {\r\n\r\n this._w = -qb._w;\r\n this._x = -qb._x;\r\n this._y = -qb._y;\r\n this._z = -qb._z;\r\n\r\n cosHalfTheta = -cosHalfTheta;\r\n\r\n } else {\r\n\r\n this.copy(qb);\r\n\r\n }\r\n\r\n if (cosHalfTheta >= 1.0) {\r\n\r\n this._w = w;\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\r\n\r\n if (sqrSinHalfTheta <= Number.EPSILON) {\r\n\r\n const s = 1 - t;\r\n this._w = s * w + t * this._w;\r\n this._x = s * x + t * this._x;\r\n this._y = s * y + t * this._y;\r\n this._z = s * z + t * this._z;\r\n\r\n this.normalize(); // normalize calls _onChangeCallback()\r\n\r\n return this;\r\n\r\n }\r\n\r\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\r\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\r\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,\r\n ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\r\n\r\n this._w = (w * ratioA + this._w * ratioB);\r\n this._x = (x * ratioA + this._x * ratioB);\r\n this._y = (y * ratioA + this._y * ratioB);\r\n this._z = (z * ratioA + this._z * ratioB);\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n slerpQuaternions(qa, qb, t) {\r\n\r\n return this.copy(qa).slerp(qb, t);\r\n\r\n }\r\n\r\n random() {\r\n\r\n // sets this quaternion to a uniform random unit quaternnion\r\n\r\n // Ken Shoemake\r\n // Uniform random rotations\r\n // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\r\n\r\n const theta1 = 2 * Math.PI * Math.random();\r\n const theta2 = 2 * Math.PI * Math.random();\r\n\r\n const x0 = Math.random();\r\n const r1 = Math.sqrt(1 - x0);\r\n const r2 = Math.sqrt(x0);\r\n\r\n return this.set(\r\n r1 * Math.sin(theta1),\r\n r1 * Math.cos(theta1),\r\n r2 * Math.sin(theta2),\r\n r2 * Math.cos(theta2)\r\n );\r\n\r\n }\r\n\r\n equals(quaternion) {\r\n\r\n return (quaternion._x === this._x) && (quaternion._y === this._y) && (quaternion._z === this._z) && (quaternion._w === this._w);\r\n\r\n }\r\n\r\n fromArray(array, offset = 0) {\r\n\r\n this._x = array[offset];\r\n this._y = array[offset + 1];\r\n this._z = array[offset + 2];\r\n this._w = array[offset + 3];\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n toArray(array = [], offset = 0) {\r\n\r\n array[offset] = this._x;\r\n array[offset + 1] = this._y;\r\n array[offset + 2] = this._z;\r\n array[offset + 3] = this._w;\r\n\r\n return array;\r\n\r\n }\r\n\r\n fromBufferAttribute(attribute, index) {\r\n\r\n this._x = attribute.getX(index);\r\n this._y = attribute.getY(index);\r\n this._z = attribute.getZ(index);\r\n this._w = attribute.getW(index);\r\n\r\n this._onChangeCallback();\r\n\r\n return this;\r\n\r\n }\r\n\r\n toJSON() {\r\n\r\n return this.toArray();\r\n\r\n }\r\n\r\n _onChange(callback) {\r\n\r\n this._onChangeCallback = callback;\r\n\r\n return this;\r\n\r\n }\r\n\r\n _onChangeCallback() { }\r\n\r\n * [Symbol.iterator]() {\r\n\r\n yield this._x;\r\n yield this._y;\r\n yield this._z;\r\n yield this._w;\r\n\r\n }\r\n\r\n}\r\n\r\nexport { Quaternion };\r\n","// import * as MathUtils from './MathUtils.js';\r\n// code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Vector3.js\r\n\r\nimport { Quaternion } from './Quaternion';\r\n\r\nconst _quaternion = new Quaternion();\r\n\r\nclass Vector3 {\r\n\r\n constructor(x = 0, y = 0, z = 0) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n\r\n }\r\n\r\n set(x, y, z) {\r\n\r\n if (z === undefined) z = this.z; // sprite.scale.set(x,y)\r\n\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // setScalar(scalar) {\r\n\r\n // this.x = scalar;\r\n // this.y = scalar;\r\n // this.z = scalar;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setX(x) {\r\n\r\n // this.x = x;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setY(y) {\r\n\r\n // this.y = y;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setZ(z) {\r\n\r\n // this.z = z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setComponent(index, value) {\r\n\r\n // switch (index) {\r\n\r\n // case 0: this.x = value; break;\r\n // case 1: this.y = value; break;\r\n // case 2: this.z = value; break;\r\n // default: throw new Error('index is out of range: ' + index);\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // getComponent(index) {\r\n\r\n // switch (index) {\r\n\r\n // case 0: return this.x;\r\n // case 1: return this.y;\r\n // case 2: return this.z;\r\n // default: throw new Error('index is out of range: ' + index);\r\n\r\n // }\r\n\r\n // }\r\n\r\n clone() {\r\n\r\n return new this.constructor(this.x, this.y, this.z);\r\n\r\n }\r\n\r\n copy(v) {\r\n\r\n this.x = v.x;\r\n this.y = v.y;\r\n this.z = v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n add(v) {\r\n\r\n this.x += v.x;\r\n this.y += v.y;\r\n this.z += v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addScalar(s) {\r\n\r\n this.x += s;\r\n this.y += s;\r\n this.z += s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addVectors(a, b) {\r\n\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n this.z = a.z + b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addScaledVector(v, s) {\r\n\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n this.z += v.z * s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n sub(v) {\r\n\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n this.z -= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n subScalar(s) {\r\n\r\n this.x -= s;\r\n this.y -= s;\r\n this.z -= s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n subVectors(a, b) {\r\n\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n this.z = a.z - b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiply(v) {\r\n\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n this.z *= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyScalar(scalar) {\r\n\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n this.z *= scalar;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyVectors(a, b) {\r\n\r\n this.x = a.x * b.x;\r\n this.y = a.y * b.y;\r\n this.z = a.z * b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // applyEuler(euler) {\r\n\r\n // return this.applyQuaternion(_quaternion.setFromEuler(euler));\r\n\r\n // }\r\n\r\n applyAxisAngle(axis, angle) {\r\n\r\n return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\r\n\r\n }\r\n\r\n // applyMatrix3(m) {\r\n\r\n // const x = this.x, y = this.y, z = this.z;\r\n // const e = m.elements;\r\n\r\n // this.x = e[0] * x + e[3] * y + e[6] * z;\r\n // this.y = e[1] * x + e[4] * y + e[7] * z;\r\n // this.z = e[2] * x + e[5] * y + e[8] * z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // applyNormalMatrix(m) {\r\n\r\n // return this.applyMatrix3(m).normalize();\r\n\r\n // }\r\n\r\n applyMatrix4(m) {\r\n\r\n const x = this.x, y = this.y, z = this.z;\r\n const e = m.elements;\r\n\r\n const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\r\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\r\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyQuaternion(q) {\r\n\r\n const x = this.x, y = this.y, z = this.z;\r\n const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\r\n\r\n // calculate quat * vector\r\n\r\n const ix = qw * x + qy * z - qz * y;\r\n const iy = qw * y + qz * x - qx * z;\r\n const iz = qw * z + qx * y - qy * x;\r\n const iw = -qx * x - qy * y - qz * z;\r\n\r\n // calculate result * inverse quat\r\n\r\n this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // project(camera) {\r\n\r\n // return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\r\n\r\n // }\r\n\r\n // unproject(camera) {\r\n\r\n // return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\r\n\r\n // }\r\n\r\n // transformDirection(m) {\r\n\r\n // // input: THREE.Matrix4 affine matrix\r\n // // vector interpreted as a direction\r\n\r\n // const x = this.x, y = this.y, z = this.z;\r\n // const e = m.elements;\r\n\r\n // this.x = e[0] * x + e[4] * y + e[8] * z;\r\n // this.y = e[1] * x + e[5] * y + e[9] * z;\r\n // this.z = e[2] * x + e[6] * y + e[10] * z;\r\n\r\n // return this.normalize();\r\n\r\n // }\r\n\r\n divide(v) {\r\n\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n this.z /= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n divideScalar(scalar) {\r\n\r\n return this.multiplyScalar(1 / scalar);\r\n\r\n }\r\n\r\n min(v) {\r\n\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n this.z = Math.min(this.z, v.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n max(v) {\r\n\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n this.z = Math.max(this.z, v.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n clamp(min, max) {\r\n\r\n // assumes min < max, componentwise\r\n\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n this.z = Math.max(min.z, Math.min(max.z, this.z));\r\n\r\n return this;\r\n\r\n }\r\n\r\n clampScalar(minVal, maxVal) {\r\n\r\n this.x = Math.max(minVal, Math.min(maxVal, this.x));\r\n this.y = Math.max(minVal, Math.min(maxVal, this.y));\r\n this.z = Math.max(minVal, Math.min(maxVal, this.z));\r\n\r\n return this;\r\n\r\n }\r\n\r\n clampLength(min, max) {\r\n\r\n const length = this.length();\r\n\r\n return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\r\n\r\n }\r\n\r\n // floor() {\r\n\r\n // this.x = Math.floor(this.x);\r\n // this.y = Math.floor(this.y);\r\n // this.z = Math.floor(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // ceil() {\r\n\r\n // this.x = Math.ceil(this.x);\r\n // this.y = Math.ceil(this.y);\r\n // this.z = Math.ceil(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // round() {\r\n\r\n // this.x = Math.round(this.x);\r\n // this.y = Math.round(this.y);\r\n // this.z = Math.round(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // roundToZero() {\r\n\r\n // this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n // this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n // this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // negate() {\r\n\r\n // this.x = -this.x;\r\n // this.y = -this.y;\r\n // this.z = -this.z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n dot(v) {\r\n\r\n return this.x * v.x + this.y * v.y + this.z * v.z;\r\n\r\n }\r\n\r\n // TODO lengthSquared?\r\n\r\n lengthSq() {\r\n\r\n return this.x * this.x + this.y * this.y + this.z * this.z;\r\n\r\n }\r\n\r\n length() {\r\n\r\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\r\n\r\n }\r\n\r\n // manhattanLength() {\r\n\r\n // return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\r\n\r\n // }\r\n\r\n normalize() {\r\n\r\n return this.divideScalar(this.length() || 1);\r\n\r\n }\r\n\r\n setLength(length) {\r\n\r\n return this.normalize().multiplyScalar(length);\r\n\r\n }\r\n\r\n lerp(v, alpha) {\r\n\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n this.z += (v.z - this.z) * alpha;\r\n\r\n return this;\r\n\r\n }\r\n\r\n lerpVectors(v1, v2, alpha) {\r\n\r\n this.x = v1.x + (v2.x - v1.x) * alpha;\r\n this.y = v1.y + (v2.y - v1.y) * alpha;\r\n this.z = v1.z + (v2.z - v1.z) * alpha;\r\n\r\n return this;\r\n\r\n }\r\n\r\n cross(v) {\r\n\r\n return this.crossVectors(this, v);\r\n\r\n }\r\n\r\n crossVectors(a, b) {\r\n\r\n const ax = a.x, ay = a.y, az = a.z;\r\n const bx = b.x, by = b.y, bz = b.z;\r\n\r\n this.x = ay * bz - az * by;\r\n this.y = az * bx - ax * bz;\r\n this.z = ax * by - ay * bx;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // projectOnVector(v) {\r\n\r\n // const denominator = v.lengthSq();\r\n\r\n // if (denominator === 0) return this.set(0, 0, 0);\r\n\r\n // const scalar = v.dot(this) / denominator;\r\n\r\n // return this.copy(v).multiplyScalar(scalar);\r\n\r\n // }\r\n\r\n // projectOnPlane(planeNormal) {\r\n\r\n // _vector.copy(this).projectOnVector(planeNormal);\r\n\r\n // return this.sub(_vector);\r\n\r\n // }\r\n\r\n // reflect(normal) {\r\n\r\n // // reflect incident vector off plane orthogonal to normal\r\n // // normal is assumed to have unit length\r\n\r\n // return this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\r\n\r\n // }\r\n\r\n // angleTo(v) {\r\n\r\n // const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\r\n\r\n // if (denominator === 0) return Math.PI / 2;\r\n\r\n // const theta = this.dot(v) / denominator;\r\n\r\n // // clamp, to handle numerical problems\r\n\r\n // return Math.acos(MathUtils.clamp(theta, -1, 1));\r\n\r\n // }\r\n\r\n distanceTo(v) {\r\n\r\n return Math.sqrt(this.distanceToSquared(v));\r\n\r\n }\r\n\r\n // distanceToSquared(v) {\r\n\r\n // const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\r\n\r\n // return dx * dx + dy * dy + dz * dz;\r\n\r\n // }\r\n\r\n // manhattanDistanceTo(v) {\r\n\r\n // return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\r\n\r\n // }\r\n\r\n // setFromSpherical(s) {\r\n\r\n // return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\r\n\r\n // }\r\n\r\n // setFromSphericalCoords(radius, phi, theta) {\r\n\r\n // const sinPhiRadius = Math.sin(phi) * radius;\r\n\r\n // this.x = sinPhiRadius * Math.sin(theta);\r\n // this.y = Math.cos(phi) * radius;\r\n // this.z = sinPhiRadius * Math.cos(theta);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromCylindrical(c) {\r\n\r\n // return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\r\n\r\n // }\r\n\r\n // setFromCylindricalCoords(radius, theta, y) {\r\n\r\n // this.x = radius * Math.sin(theta);\r\n // this.y = y;\r\n // this.z = radius * Math.cos(theta);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixPosition(m) {\r\n\r\n // const e = m.elements;\r\n\r\n // this.x = e[12];\r\n // this.y = e[13];\r\n // this.z = e[14];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixScale(m) {\r\n\r\n // const sx = this.setFromMatrixColumn(m, 0).length();\r\n // const sy = this.setFromMatrixColumn(m, 1).length();\r\n // const sz = this.setFromMatrixColumn(m, 2).length();\r\n\r\n // this.x = sx;\r\n // this.y = sy;\r\n // this.z = sz;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrixColumn(m, index) {\r\n\r\n // return this.fromArray(m.elements, index * 4);\r\n\r\n // }\r\n\r\n // setFromMatrix3Column(m, index) {\r\n\r\n // return this.fromArray(m.elements, index * 3);\r\n\r\n // }\r\n\r\n // setFromEuler(e) {\r\n\r\n // this.x = e._x;\r\n // this.y = e._y;\r\n // this.z = e._z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromColor(c) {\r\n\r\n // this.x = c.r;\r\n // this.y = c.g;\r\n // this.z = c.b;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n equals(v) {\r\n\r\n return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z));\r\n\r\n }\r\n\r\n fromArray(array, offset = 0) {\r\n\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n this.z = array[offset + 2];\r\n\r\n return this;\r\n\r\n }\r\n\r\n // toArray(array = [], offset = 0) {\r\n\r\n // array[offset] = this.x;\r\n // array[offset + 1] = this.y;\r\n // array[offset + 2] = this.z;\r\n\r\n // return array;\r\n\r\n // }\r\n\r\n // fromBufferAttribute(attribute, index) {\r\n\r\n // this.x = attribute.getX(index);\r\n // this.y = attribute.getY(index);\r\n // this.z = attribute.getZ(index);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n random() {\r\n\r\n this.x = Math.random();\r\n this.y = Math.random();\r\n this.z = Math.random();\r\n\r\n return this;\r\n\r\n }\r\n\r\n // randomDirection() {\r\n\r\n // // Derived from https://mathworld.wolfram.com/SpherePointPicking.html\r\n\r\n // const u = (Math.random() - 0.5) * 2;\r\n // const t = Math.random() * Math.PI * 2;\r\n // const f = Math.sqrt(1 - u ** 2);\r\n\r\n // this.x = f * Math.cos(t);\r\n // this.y = f * Math.sin(t);\r\n // this.z = u;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { Vector3 };\r\n","/* eslint-disable no-tabs */\r\n\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathPoint.js\r\n\r\nimport { Vector3 } from '../math/Vector3';\r\n\r\n/**\r\n * PathPoint\r\n */\r\nclass PathPoint {\r\n\tconstructor() {\r\n\t\tthis.pos = new Vector3();\r\n\t\tthis.dir = new Vector3();\r\n\t\tthis.right = new Vector3();\r\n\t\tthis.up = new Vector3(); // normal\r\n\t\tthis.dist = 0; // distance from start\r\n\t\tthis.widthScale = 1; // for corner\r\n\t\tthis.sharp = false; // marks as sharp corner\r\n\t}\r\n\r\n\tlerpPathPoints(p1, p2, alpha) {\r\n\t\tthis.pos.lerpVectors(p1.pos, p2.pos, alpha);\r\n\t\tthis.dir.lerpVectors(p1.dir, p2.dir, alpha);\r\n\t\tthis.up.lerpVectors(p1.up, p2.up, alpha);\r\n\t\tthis.right.lerpVectors(p1.right, p2.right, alpha);\r\n\t\tthis.dist = (p2.dist - p1.dist) * alpha + p1.dist;\r\n\t\tthis.widthScale = (p2.widthScale - p1.widthScale) * alpha + p1.widthScale;\r\n\t}\r\n\r\n\tcopy(source) {\r\n\t\tthis.pos.copy(source.pos);\r\n\t\tthis.dir.copy(source.dir);\r\n\t\tthis.up.copy(source.up);\r\n\t\tthis.right.copy(source.right);\r\n\t\tthis.dist = source.dist;\r\n\t\tthis.widthScale = source.widthScale;\r\n\t}\r\n\r\n}\r\n\r\nexport { PathPoint };\r\n","// code copy from https://github.com/mrdoob/three.js/blob/dev/src/math/Matrix4.js\r\n// import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';\r\n// import { Vector3 } from './Vector3.js';\r\n\r\nclass Matrix4 {\r\n\r\n constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n\r\n this.elements = [\r\n\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n 0, 0, 0, 1\r\n\r\n ];\r\n\r\n if (n11 !== undefined) {\r\n\r\n this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44);\r\n\r\n }\r\n\r\n }\r\n\r\n set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n\r\n const te = this.elements;\r\n\r\n te[0] = n11; te[4] = n12; te[8] = n13; te[12] = n14;\r\n te[1] = n21; te[5] = n22; te[9] = n23; te[13] = n24;\r\n te[2] = n31; te[6] = n32; te[10] = n33; te[14] = n34;\r\n te[3] = n41; te[7] = n42; te[11] = n43; te[15] = n44;\r\n\r\n return this;\r\n\r\n }\r\n\r\n // identity() {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, 0,\r\n // 0, 1, 0, 0,\r\n // 0, 0, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // clone() {\r\n\r\n // return new Matrix4().fromArray(this.elements);\r\n\r\n // }\r\n\r\n // copy(m) {\r\n\r\n // const te = this.elements;\r\n // const me = m.elements;\r\n\r\n // te[0] = me[0]; te[1] = me[1]; te[2] = me[2]; te[3] = me[3];\r\n // te[4] = me[4]; te[5] = me[5]; te[6] = me[6]; te[7] = me[7];\r\n // te[8] = me[8]; te[9] = me[9]; te[10] = me[10]; te[11] = me[11];\r\n // te[12] = me[12]; te[13] = me[13]; te[14] = me[14]; te[15] = me[15];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // copyPosition(m) {\r\n\r\n // const te = this.elements, me = m.elements;\r\n\r\n // te[12] = me[12];\r\n // te[13] = me[13];\r\n // te[14] = me[14];\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setFromMatrix3(m) {\r\n\r\n // const me = m.elements;\r\n\r\n // this.set(\r\n\r\n // me[0], me[3], me[6], 0,\r\n // me[1], me[4], me[7], 0,\r\n // me[2], me[5], me[8], 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // extractBasis(xAxis, yAxis, zAxis) {\r\n\r\n // xAxis.setFromMatrixColumn(this, 0);\r\n // yAxis.setFromMatrixColumn(this, 1);\r\n // zAxis.setFromMatrixColumn(this, 2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeBasis(xAxis, yAxis, zAxis) {\r\n\r\n // this.set(\r\n // xAxis.x, yAxis.x, zAxis.x, 0,\r\n // xAxis.y, yAxis.y, zAxis.y, 0,\r\n // xAxis.z, yAxis.z, zAxis.z, 0,\r\n // 0, 0, 0, 1\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // extractRotation(m) {\r\n\r\n // // this method does not support reflection matrices\r\n\r\n // const te = this.elements;\r\n // const me = m.elements;\r\n\r\n // const scaleX = 1 / _v1.setFromMatrixColumn(m, 0).length();\r\n // const scaleY = 1 / _v1.setFromMatrixColumn(m, 1).length();\r\n // const scaleZ = 1 / _v1.setFromMatrixColumn(m, 2).length();\r\n\r\n // te[0] = me[0] * scaleX;\r\n // te[1] = me[1] * scaleX;\r\n // te[2] = me[2] * scaleX;\r\n // te[3] = 0;\r\n\r\n // te[4] = me[4] * scaleY;\r\n // te[5] = me[5] * scaleY;\r\n // te[6] = me[6] * scaleY;\r\n // te[7] = 0;\r\n\r\n // te[8] = me[8] * scaleZ;\r\n // te[9] = me[9] * scaleZ;\r\n // te[10] = me[10] * scaleZ;\r\n // te[11] = 0;\r\n\r\n // te[12] = 0;\r\n // te[13] = 0;\r\n // te[14] = 0;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationFromEuler(euler) {\r\n\r\n // const te = this.elements;\r\n\r\n // const x = euler.x, y = euler.y, z = euler.z;\r\n // const a = Math.cos(x), b = Math.sin(x);\r\n // const c = Math.cos(y), d = Math.sin(y);\r\n // const e = Math.cos(z), f = Math.sin(z);\r\n\r\n // if (euler.order === 'XYZ') {\r\n\r\n // const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n // te[0] = c * e;\r\n // te[4] = -c * f;\r\n // te[8] = d;\r\n\r\n // te[1] = af + be * d;\r\n // te[5] = ae - bf * d;\r\n // te[9] = -b * c;\r\n\r\n // te[2] = bf - ae * d;\r\n // te[6] = be + af * d;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'YXZ') {\r\n\r\n // const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n // te[0] = ce + df * b;\r\n // te[4] = de * b - cf;\r\n // te[8] = a * d;\r\n\r\n // te[1] = a * f;\r\n // te[5] = a * e;\r\n // te[9] = -b;\r\n\r\n // te[2] = cf * b - de;\r\n // te[6] = df + ce * b;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'ZXY') {\r\n\r\n // const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n // te[0] = ce - df * b;\r\n // te[4] = -a * f;\r\n // te[8] = de + cf * b;\r\n\r\n // te[1] = cf + de * b;\r\n // te[5] = a * e;\r\n // te[9] = df - ce * b;\r\n\r\n // te[2] = -a * d;\r\n // te[6] = b;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'ZYX') {\r\n\r\n // const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n // te[0] = c * e;\r\n // te[4] = be * d - af;\r\n // te[8] = ae * d + bf;\r\n\r\n // te[1] = c * f;\r\n // te[5] = bf * d + ae;\r\n // te[9] = af * d - be;\r\n\r\n // te[2] = -d;\r\n // te[6] = b * c;\r\n // te[10] = a * c;\r\n\r\n // } else if (euler.order === 'YZX') {\r\n\r\n // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n // te[0] = c * e;\r\n // te[4] = bd - ac * f;\r\n // te[8] = bc * f + ad;\r\n\r\n // te[1] = f;\r\n // te[5] = a * e;\r\n // te[9] = -b * e;\r\n\r\n // te[2] = -d * e;\r\n // te[6] = ad * f + bc;\r\n // te[10] = ac - bd * f;\r\n\r\n // } else if (euler.order === 'XZY') {\r\n\r\n // const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n // te[0] = c * e;\r\n // te[4] = -f;\r\n // te[8] = d * e;\r\n\r\n // te[1] = ac * f + bd;\r\n // te[5] = a * e;\r\n // te[9] = ad * f - bc;\r\n\r\n // te[2] = bc * f - ad;\r\n // te[6] = b * e;\r\n // te[10] = bd * f + ac;\r\n\r\n // }\r\n\r\n // // bottom row\r\n // te[3] = 0;\r\n // te[7] = 0;\r\n // te[11] = 0;\r\n\r\n // // last column\r\n // te[12] = 0;\r\n // te[13] = 0;\r\n // te[14] = 0;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationFromQuaternion(q) {\r\n\r\n // return this.compose(_zero, q, _one);\r\n\r\n // }\r\n\r\n // lookAt(eye, target, up) {\r\n\r\n // const te = this.elements;\r\n\r\n // _z.subVectors(eye, target);\r\n\r\n // if (_z.lengthSq() === 0) {\r\n\r\n // // eye and target are in the same position\r\n\r\n // _z.z = 1;\r\n\r\n // }\r\n\r\n // _z.normalize();\r\n // _x.crossVectors(up, _z);\r\n\r\n // if (_x.lengthSq() === 0) {\r\n\r\n // // up and z are parallel\r\n\r\n // if (Math.abs(up.z) === 1) {\r\n\r\n // _z.x += 0.0001;\r\n\r\n // } else {\r\n\r\n // _z.z += 0.0001;\r\n\r\n // }\r\n\r\n // _z.normalize();\r\n // _x.crossVectors(up, _z);\r\n\r\n // }\r\n\r\n // _x.normalize();\r\n // _y.crossVectors(_z, _x);\r\n\r\n // te[0] = _x.x; te[4] = _y.x; te[8] = _z.x;\r\n // te[1] = _x.y; te[5] = _y.y; te[9] = _z.y;\r\n // te[2] = _x.z; te[6] = _y.z; te[10] = _z.z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n multiply(m) {\r\n\r\n return this.multiplyMatrices(this, m);\r\n\r\n }\r\n\r\n // premultiply(m) {\r\n\r\n // return this.multiplyMatrices(m, this);\r\n\r\n // }\r\n\r\n // multiplyMatrices(a, b) {\r\n\r\n // const ae = a.elements;\r\n // const be = b.elements;\r\n // const te = this.elements;\r\n\r\n // const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\r\n // const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\r\n // const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\r\n // const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\r\n\r\n // const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\r\n // const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\r\n // const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\r\n // const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\r\n\r\n // te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n // te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n // te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n // te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n\r\n // te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n // te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n // te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n // te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n\r\n // te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n // te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n // te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n // te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n\r\n // te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n // te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n // te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n // te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // multiplyScalar(s) {\r\n\r\n // const te = this.elements;\r\n\r\n // te[0] *= s; te[4] *= s; te[8] *= s; te[12] *= s;\r\n // te[1] *= s; te[5] *= s; te[9] *= s; te[13] *= s;\r\n // te[2] *= s; te[6] *= s; te[10] *= s; te[14] *= s;\r\n // te[3] *= s; te[7] *= s; te[11] *= s; te[15] *= s;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // determinant() {\r\n\r\n // const te = this.elements;\r\n\r\n // const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12];\r\n // const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13];\r\n // const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14];\r\n // const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15];\r\n\r\n // //TODO: make this more efficient\r\n // //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\r\n\r\n // return (\r\n // n41 * (\r\n // + n14 * n23 * n32\r\n // - n13 * n24 * n32\r\n // - n14 * n22 * n33\r\n // + n12 * n24 * n33\r\n // + n13 * n22 * n34\r\n // - n12 * n23 * n34\r\n // ) +\r\n // n42 * (\r\n // + n11 * n23 * n34\r\n // - n11 * n24 * n33\r\n // + n14 * n21 * n33\r\n // - n13 * n21 * n34\r\n // + n13 * n24 * n31\r\n // - n14 * n23 * n31\r\n // ) +\r\n // n43 * (\r\n // + n11 * n24 * n32\r\n // - n11 * n22 * n34\r\n // - n14 * n21 * n32\r\n // + n12 * n21 * n34\r\n // + n14 * n22 * n31\r\n // - n12 * n24 * n31\r\n // ) +\r\n // n44 * (\r\n // - n13 * n22 * n31\r\n // - n11 * n23 * n32\r\n // + n11 * n22 * n33\r\n // + n13 * n21 * n32\r\n // - n12 * n21 * n33\r\n // + n12 * n23 * n31\r\n // )\r\n\r\n // );\r\n\r\n // }\r\n\r\n // transpose() {\r\n\r\n // const te = this.elements;\r\n // let tmp;\r\n\r\n // tmp = te[1]; te[1] = te[4]; te[4] = tmp;\r\n // tmp = te[2]; te[2] = te[8]; te[8] = tmp;\r\n // tmp = te[6]; te[6] = te[9]; te[9] = tmp;\r\n\r\n // tmp = te[3]; te[3] = te[12]; te[12] = tmp;\r\n // tmp = te[7]; te[7] = te[13]; te[13] = tmp;\r\n // tmp = te[11]; te[11] = te[14]; te[14] = tmp;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // setPosition(x, y, z) {\r\n\r\n // const te = this.elements;\r\n\r\n // if (x.isVector3) {\r\n\r\n // te[12] = x.x;\r\n // te[13] = x.y;\r\n // te[14] = x.z;\r\n\r\n // } else {\r\n\r\n // te[12] = x;\r\n // te[13] = y;\r\n // te[14] = z;\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // invert() {\r\n\r\n // // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\r\n // const te = this.elements,\r\n\r\n // n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3],\r\n // n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7],\r\n // n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11],\r\n // n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15],\r\n\r\n // t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\r\n // t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\r\n // t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\r\n // t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\r\n\r\n // const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\r\n\r\n // if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r\n\r\n // const detInv = 1 / det;\r\n\r\n // te[0] = t11 * detInv;\r\n // te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\r\n // te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\r\n // te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\r\n\r\n // te[4] = t12 * detInv;\r\n // te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\r\n // te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\r\n // te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\r\n\r\n // te[8] = t13 * detInv;\r\n // te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\r\n // te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\r\n // te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\r\n\r\n // te[12] = t14 * detInv;\r\n // te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\r\n // te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\r\n // te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // scale(v) {\r\n\r\n // const te = this.elements;\r\n // const x = v.x, y = v.y, z = v.z;\r\n\r\n // te[0] *= x; te[4] *= y; te[8] *= z;\r\n // te[1] *= x; te[5] *= y; te[9] *= z;\r\n // te[2] *= x; te[6] *= y; te[10] *= z;\r\n // te[3] *= x; te[7] *= y; te[11] *= z;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // getMaxScaleOnAxis() {\r\n\r\n // const te = this.elements;\r\n\r\n // const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n // const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n // const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n // return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\r\n\r\n // }\r\n\r\n // makeTranslation(x, y, z) {\r\n\r\n // if (x.isVector3) {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, x.x,\r\n // 0, 1, 0, x.y,\r\n // 0, 0, 1, x.z,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // } else {\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, x,\r\n // 0, 1, 0, y,\r\n // 0, 0, 1, z,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationX(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // 1, 0, 0, 0,\r\n // 0, c, -s, 0,\r\n // 0, s, c, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationY(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // c, 0, s, 0,\r\n // 0, 1, 0, 0,\r\n // -s, 0, c, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeRotationZ(theta) {\r\n\r\n // const c = Math.cos(theta), s = Math.sin(theta);\r\n\r\n // this.set(\r\n\r\n // c, -s, 0, 0,\r\n // s, c, 0, 0,\r\n // 0, 0, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n makeRotationAxis(axis, angle) {\r\n\r\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\r\n\r\n const c = Math.cos(angle);\r\n const s = Math.sin(angle);\r\n const t = 1 - c;\r\n const x = axis.x, y = axis.y, z = axis.z;\r\n const tx = t * x, ty = t * y;\r\n\r\n this.set(\r\n\r\n tx * x + c, tx * y - s * z, tx * z + s * y, 0,\r\n tx * y + s * z, ty * y + c, ty * z - s * x, 0,\r\n tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\r\n 0, 0, 0, 1\r\n\r\n );\r\n\r\n return this;\r\n\r\n }\r\n\r\n // makeScale(x, y, z) {\r\n\r\n // this.set(\r\n\r\n // x, 0, 0, 0,\r\n // 0, y, 0, 0,\r\n // 0, 0, z, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeShear(xy, xz, yx, yz, zx, zy) {\r\n\r\n // this.set(\r\n\r\n // 1, yx, zx, 0,\r\n // xy, 1, zy, 0,\r\n // xz, yz, 1, 0,\r\n // 0, 0, 0, 1\r\n\r\n // );\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // compose(position, quaternion, scale) {\r\n\r\n // const te = this.elements;\r\n\r\n // const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\r\n // const x2 = x + x, y2 = y + y, z2 = z + z;\r\n // const xx = x * x2, xy = x * y2, xz = x * z2;\r\n // const yy = y * y2, yz = y * z2, zz = z * z2;\r\n // const wx = w * x2, wy = w * y2, wz = w * z2;\r\n\r\n // const sx = scale.x, sy = scale.y, sz = scale.z;\r\n\r\n // te[0] = (1 - (yy + zz)) * sx;\r\n // te[1] = (xy + wz) * sx;\r\n // te[2] = (xz - wy) * sx;\r\n // te[3] = 0;\r\n\r\n // te[4] = (xy - wz) * sy;\r\n // te[5] = (1 - (xx + zz)) * sy;\r\n // te[6] = (yz + wx) * sy;\r\n // te[7] = 0;\r\n\r\n // te[8] = (xz + wy) * sz;\r\n // te[9] = (yz - wx) * sz;\r\n // te[10] = (1 - (xx + yy)) * sz;\r\n // te[11] = 0;\r\n\r\n // te[12] = position.x;\r\n // te[13] = position.y;\r\n // te[14] = position.z;\r\n // te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // decompose(position, quaternion, scale) {\r\n\r\n // const te = this.elements;\r\n\r\n // let sx = _v1.set(te[0], te[1], te[2]).length();\r\n // const sy = _v1.set(te[4], te[5], te[6]).length();\r\n // const sz = _v1.set(te[8], te[9], te[10]).length();\r\n\r\n // // if determine is negative, we need to invert one scale\r\n // const det = this.determinant();\r\n // if (det < 0) sx = -sx;\r\n\r\n // position.x = te[12];\r\n // position.y = te[13];\r\n // position.z = te[14];\r\n\r\n // // scale the rotation part\r\n // _m1.copy(this);\r\n\r\n // const invSX = 1 / sx;\r\n // const invSY = 1 / sy;\r\n // const invSZ = 1 / sz;\r\n\r\n // _m1.elements[0] *= invSX;\r\n // _m1.elements[1] *= invSX;\r\n // _m1.elements[2] *= invSX;\r\n\r\n // _m1.elements[4] *= invSY;\r\n // _m1.elements[5] *= invSY;\r\n // _m1.elements[6] *= invSY;\r\n\r\n // _m1.elements[8] *= invSZ;\r\n // _m1.elements[9] *= invSZ;\r\n // _m1.elements[10] *= invSZ;\r\n\r\n // quaternion.setFromRotationMatrix(_m1);\r\n\r\n // scale.x = sx;\r\n // scale.y = sy;\r\n // scale.z = sz;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\r\n\r\n // const te = this.elements;\r\n // const x = 2 * near / (right - left);\r\n // const y = 2 * near / (top - bottom);\r\n\r\n // const a = (right + left) / (right - left);\r\n // const b = (top + bottom) / (top - bottom);\r\n\r\n // let c, d;\r\n\r\n // if (coordinateSystem === WebGLCoordinateSystem) {\r\n\r\n // c = - (far + near) / (far - near);\r\n // d = (- 2 * far * near) / (far - near);\r\n\r\n // } else if (coordinateSystem === WebGPUCoordinateSystem) {\r\n\r\n // c = - far / (far - near);\r\n // d = (- far * near) / (far - near);\r\n\r\n // } else {\r\n\r\n // throw new Error('THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem);\r\n\r\n // }\r\n\r\n // te[0] = x; te[4] = 0; te[8] = a; te[12] = 0;\r\n // te[1] = 0; te[5] = y; te[9] = b; te[13] = 0;\r\n // te[2] = 0; te[6] = 0; te[10] = c; te[14] = d;\r\n // te[3] = 0; te[7] = 0; te[11] = - 1; te[15] = 0;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) {\r\n\r\n // const te = this.elements;\r\n // const w = 1.0 / (right - left);\r\n // const h = 1.0 / (top - bottom);\r\n // const p = 1.0 / (far - near);\r\n\r\n // const x = (right + left) * w;\r\n // const y = (top + bottom) * h;\r\n\r\n // let z, zInv;\r\n\r\n // if (coordinateSystem === WebGLCoordinateSystem) {\r\n\r\n // z = (far + near) * p;\r\n // zInv = - 2 * p;\r\n\r\n // } else if (coordinateSystem === WebGPUCoordinateSystem) {\r\n\r\n // z = near * p;\r\n // zInv = - 1 * p;\r\n\r\n // } else {\r\n\r\n // throw new Error('THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem);\r\n\r\n // }\r\n\r\n // te[0] = 2 * w; te[4] = 0; te[8] = 0; te[12] = - x;\r\n // te[1] = 0; te[5] = 2 * h; te[9] = 0; te[13] = - y;\r\n // te[2] = 0; te[6] = 0; te[10] = zInv; te[14] = - z;\r\n // te[3] = 0; te[7] = 0; te[11] = 0; te[15] = 1;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n equals(matrix) {\r\n\r\n const te = this.elements;\r\n const me = matrix.elements;\r\n\r\n for (let i = 0; i < 16; i++) {\r\n\r\n if (te[i] !== me[i]) return false;\r\n\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n // fromArray(array, offset = 0) {\r\n\r\n // for (let i = 0; i < 16; i++) {\r\n\r\n // this.elements[i] = array[i + offset];\r\n\r\n // }\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toArray(array = [], offset = 0) {\r\n\r\n // const te = this.elements;\r\n\r\n // array[offset] = te[0];\r\n // array[offset + 1] = te[1];\r\n // array[offset + 2] = te[2];\r\n // array[offset + 3] = te[3];\r\n\r\n // array[offset + 4] = te[4];\r\n // array[offset + 5] = te[5];\r\n // array[offset + 6] = te[6];\r\n // array[offset + 7] = te[7];\r\n\r\n // array[offset + 8] = te[8];\r\n // array[offset + 9] = te[9];\r\n // array[offset + 10] = te[10];\r\n // array[offset + 11] = te[11];\r\n\r\n // array[offset + 12] = te[12];\r\n // array[offset + 13] = te[13];\r\n // array[offset + 14] = te[14];\r\n // array[offset + 15] = te[15];\r\n\r\n // return array;\r\n\r\n // }\r\n\r\n}\r\n\r\n// const _v1 = new Vector3();\r\n// const _m1 = new Matrix4();\r\n// const _zero = new Vector3(0, 0, 0);\r\n// const _one = new Vector3(1, 1, 1);\r\n// const _x = new Vector3();\r\n// const _y = new Vector3();\r\n// const _z = new Vector3();\r\n\r\nexport { Matrix4 };\r\n","\r\n// code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Curve.js\r\n// import * as MathUtils from '../../math/MathUtils.js';\r\n// import { Vector2 } from '../../math/Vector2.js';\r\n// import { Vector3 } from '../../math/Vector3.js';\r\n// import { Matrix4 } from '../../math/Matrix4.js';\r\n\r\n/**\r\n * Extensible curve object.\r\n *\r\n * Some common of curve methods:\r\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\r\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\r\n * .getPoints(), .getSpacedPoints()\r\n * .getLength()\r\n * .updateArcLengths()\r\n *\r\n * This following curves inherit from THREE.Curve:\r\n *\r\n * -- 2D curves --\r\n * THREE.ArcCurve\r\n * THREE.CubicBezierCurve\r\n * THREE.EllipseCurve\r\n * THREE.LineCurve\r\n * THREE.QuadraticBezierCurve\r\n * THREE.SplineCurve\r\n *\r\n * -- 3D curves --\r\n * THREE.CatmullRomCurve3\r\n * THREE.CubicBezierCurve3\r\n * THREE.LineCurve3\r\n * THREE.QuadraticBezierCurve3\r\n *\r\n * A series of curves can be represented as a THREE.CurvePath.\r\n *\r\n **/\r\n\r\nclass Curve {\r\n\r\n constructor() {\r\n\r\n this.type = 'Curve';\r\n\r\n this.arcLengthDivisions = 200;\r\n\r\n }\r\n\r\n // Virtual base class method to overwrite and implement in subclasses\r\n\r\n getPoint() {\r\n\r\n console.warn('THREE.Curve: .getPoint() not implemented.');\r\n return null;\r\n\r\n }\r\n\r\n // Get point at relative position in curve according to arc length\r\n // - u [0 .. 1]\r\n\r\n getPointAt(u, optionalTarget) {\r\n\r\n const t = this.getUtoTmapping(u);\r\n return this.getPoint(t, optionalTarget);\r\n\r\n }\r\n\r\n // Get sequence of points using getPoint( t )\r\n\r\n getPoints(divisions = 5) {\r\n\r\n const points = [];\r\n\r\n for (let d = 0; d <= divisions; d++) {\r\n\r\n points.push(this.getPoint(d / divisions));\r\n\r\n }\r\n\r\n return points;\r\n\r\n }\r\n\r\n // // Get sequence of points using getPointAt( u )\r\n\r\n // getSpacedPoints(divisions = 5) {\r\n\r\n // const points = [];\r\n\r\n // for (let d = 0; d <= divisions; d++) {\r\n\r\n // points.push(this.getPointAt(d / divisions));\r\n\r\n // }\r\n\r\n // return points;\r\n\r\n // }\r\n\r\n // Get total curve arc length\r\n\r\n getLength() {\r\n\r\n const lengths = this.getLengths();\r\n return lengths[lengths.length - 1];\r\n\r\n }\r\n\r\n // Get list of cumulative segment lengths\r\n\r\n getLengths(divisions = this.arcLengthDivisions) {\r\n\r\n if (this.cacheArcLengths &&\r\n (this.cacheArcLengths.length === divisions + 1) &&\r\n !this.needsUpdate) {\r\n\r\n return this.cacheArcLengths;\r\n\r\n }\r\n\r\n this.needsUpdate = false;\r\n\r\n const cache = [];\r\n let current, last = this.getPoint(0);\r\n let sum = 0;\r\n\r\n cache.push(0);\r\n\r\n for (let p = 1; p <= divisions; p++) {\r\n\r\n current = this.getPoint(p / divisions);\r\n sum += current.distanceTo(last);\r\n cache.push(sum);\r\n last = current;\r\n\r\n }\r\n\r\n this.cacheArcLengths = cache;\r\n\r\n return cache; // { sums: cache, sum: sum }; Sum is in the last element.\r\n\r\n }\r\n\r\n // updateArcLengths() {\r\n\r\n // this.needsUpdate = true;\r\n // this.getLengths();\r\n\r\n // }\r\n\r\n // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\r\n\r\n getUtoTmapping(u, distance) {\r\n\r\n const arcLengths = this.getLengths();\r\n\r\n let i = 0;\r\n const il = arcLengths.length;\r\n\r\n let targetArcLength; // The targeted u distance value to get\r\n\r\n if (distance) {\r\n\r\n targetArcLength = distance;\r\n\r\n } else {\r\n\r\n targetArcLength = u * arcLengths[il - 1];\r\n\r\n }\r\n\r\n // binary search for the index with largest value smaller than target u distance\r\n\r\n let low = 0, high = il - 1, comparison;\r\n\r\n while (low <= high) {\r\n\r\n i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n comparison = arcLengths[i] - targetArcLength;\r\n\r\n if (comparison < 0) {\r\n\r\n low = i + 1;\r\n\r\n } else if (comparison > 0) {\r\n\r\n high = i - 1;\r\n\r\n } else {\r\n\r\n high = i;\r\n break;\r\n\r\n // DONE\r\n\r\n }\r\n\r\n }\r\n\r\n i = high;\r\n\r\n if (arcLengths[i] === targetArcLength) {\r\n\r\n return i / (il - 1);\r\n\r\n }\r\n\r\n // we could get finer grain at lengths, or use simple interpolation between two points\r\n\r\n const lengthBefore = arcLengths[i];\r\n const lengthAfter = arcLengths[i + 1];\r\n\r\n const segmentLength = lengthAfter - lengthBefore;\r\n\r\n // determine where we are between the 'before' and 'after' points\r\n\r\n const segmentFraction = (targetArcLength - lengthBefore) / segmentLength;\r\n\r\n // add that fractional amount to t\r\n\r\n const t = (i + segmentFraction) / (il - 1);\r\n\r\n return t;\r\n\r\n }\r\n\r\n // Returns a unit vector tangent at t\r\n // In case any sub curve does not implement its tangent derivation,\r\n // 2 points a small delta apart will be used to find its gradient\r\n // which seems to give a reasonable approximation\r\n\r\n // getTangent(t, optionalTarget) {\r\n\r\n // const delta = 0.0001;\r\n // let t1 = t - delta;\r\n // let t2 = t + delta;\r\n\r\n // // Capping in case of danger\r\n\r\n // if (t1 < 0) t1 = 0;\r\n // if (t2 > 1) t2 = 1;\r\n\r\n // const pt1 = this.getPoint(t1);\r\n // const pt2 = this.getPoint(t2);\r\n\r\n // const tangent = optionalTarget || ((pt1.isVector2) ? new Vector2() : new Vector3());\r\n\r\n // tangent.copy(pt2).sub(pt1).normalize();\r\n\r\n // return tangent;\r\n\r\n // }\r\n\r\n // getTangentAt(u, optionalTarget) {\r\n\r\n // const t = this.getUtoTmapping(u);\r\n // return this.getTangent(t, optionalTarget);\r\n\r\n // }\r\n\r\n // computeFrenetFrames(segments, closed) {\r\n\r\n // // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\r\n\r\n // const normal = new Vector3();\r\n\r\n // const tangents = [];\r\n // const normals = [];\r\n // const binormals = [];\r\n\r\n // const vec = new Vector3();\r\n // const mat = new Matrix4();\r\n\r\n // // compute the tangent vectors for each segment on the curve\r\n\r\n // for (let i = 0; i <= segments; i++) {\r\n\r\n // const u = i / segments;\r\n\r\n // tangents[i] = this.getTangentAt(u, new Vector3());\r\n\r\n // }\r\n\r\n // // select an initial normal vector perpendicular to the first tangent vector,\r\n // // and in the direction of the minimum tangent xyz component\r\n\r\n // normals[0] = new Vector3();\r\n // binormals[0] = new Vector3();\r\n // let min = Number.MAX_VALUE;\r\n // const tx = Math.abs(tangents[0].x);\r\n // const ty = Math.abs(tangents[0].y);\r\n // const tz = Math.abs(tangents[0].z);\r\n\r\n // if (tx <= min) {\r\n\r\n // min = tx;\r\n // normal.set(1, 0, 0);\r\n\r\n // }\r\n\r\n // if (ty <= min) {\r\n\r\n // min = ty;\r\n // normal.set(0, 1, 0);\r\n\r\n // }\r\n\r\n // if (tz <= min) {\r\n\r\n // normal.set(0, 0, 1);\r\n\r\n // }\r\n\r\n // vec.crossVectors(tangents[0], normal).normalize();\r\n\r\n // normals[0].crossVectors(tangents[0], vec);\r\n // binormals[0].crossVectors(tangents[0], normals[0]);\r\n\r\n // // compute the slowly-varying normal and binormal vectors for each segment on the curve\r\n\r\n // for (let i = 1; i <= segments; i++) {\r\n\r\n // normals[i] = normals[i - 1].clone();\r\n\r\n // binormals[i] = binormals[i - 1].clone();\r\n\r\n // vec.crossVectors(tangents[i - 1], tangents[i]);\r\n\r\n // if (vec.length() > Number.EPSILON) {\r\n\r\n // vec.normalize();\r\n\r\n // const theta = Math.acos(MathUtils.clamp(tangents[i - 1].dot(tangents[i]), - 1, 1)); // clamp for floating pt errors\r\n\r\n // normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta));\r\n\r\n // }\r\n\r\n // binormals[i].crossVectors(tangents[i], normals[i]);\r\n\r\n // }\r\n\r\n // // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\r\n\r\n // if (closed === true) {\r\n\r\n // let theta = Math.acos(MathUtils.clamp(normals[0].dot(normals[segments]), - 1, 1));\r\n // theta /= segments;\r\n\r\n // if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) {\r\n\r\n // theta = - theta;\r\n\r\n // }\r\n\r\n // for (let i = 1; i <= segments; i++) {\r\n\r\n // // twist a little...\r\n // normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i));\r\n // binormals[i].crossVectors(tangents[i], normals[i]);\r\n\r\n // }\r\n\r\n // }\r\n\r\n // return {\r\n // tangents: tangents,\r\n // normals: normals,\r\n // binormals: binormals\r\n // };\r\n\r\n // }\r\n\r\n // clone() {\r\n\r\n // return new this.constructor().copy(this);\r\n\r\n // }\r\n\r\n // copy(source) {\r\n\r\n // this.arcLengthDivisions = source.arcLengthDivisions;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toJSON() {\r\n\r\n // const data = {\r\n // metadata: {\r\n // version: 4.6,\r\n // type: 'Curve',\r\n // generator: 'Curve.toJSON'\r\n // }\r\n // };\r\n\r\n // data.arcLengthDivisions = this.arcLengthDivisions;\r\n // data.type = this.type;\r\n\r\n // return data;\r\n\r\n // }\r\n\r\n // fromJSON(json) {\r\n\r\n // this.arcLengthDivisions = json.arcLengthDivisions;\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { Curve };\r\n","/**\r\n * // code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/core/Interpolations.js\r\n * Bezier Curves formulas obtained from\r\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\r\n */\r\n\r\nfunction CatmullRom(t, p0, p1, p2, p3) {\r\n\r\n const v0 = (p2 - p0) * 0.5;\r\n const v1 = (p3 - p1) * 0.5;\r\n const t2 = t * t;\r\n const t3 = t * t2;\r\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\r\n\r\n}\r\n\r\n//\r\n\r\nfunction QuadraticBezierP0(t, p) {\r\n\r\n const k = 1 - t;\r\n return k * k * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezierP1(t, p) {\r\n\r\n return 2 * (1 - t) * t * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezierP2(t, p) {\r\n\r\n return t * t * p;\r\n\r\n}\r\n\r\nfunction QuadraticBezier(t, p0, p1, p2) {\r\n\r\n return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) +\r\n QuadraticBezierP2(t, p2);\r\n\r\n}\r\n\r\n//\r\n\r\nfunction CubicBezierP0(t, p) {\r\n\r\n const k = 1 - t;\r\n return k * k * k * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP1(t, p) {\r\n\r\n const k = 1 - t;\r\n return 3 * k * k * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP2(t, p) {\r\n\r\n return 3 * (1 - t) * t * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezierP3(t, p) {\r\n\r\n return t * t * t * p;\r\n\r\n}\r\n\r\nfunction CubicBezier(t, p0, p1, p2, p3) {\r\n\r\n return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) +\r\n CubicBezierP3(t, p3);\r\n\r\n}\r\n\r\nexport { CatmullRom, QuadraticBezier, CubicBezier };\r\n","// code copy from https://github.com/mrdoob/three.js/blob/dev/src/extras/curves/QuadraticBezierCurve3.js\r\nimport { Curve } from './Curve.js';\r\nimport { QuadraticBezier } from './Interpolations.js';\r\nimport { Vector3 } from './Vector3.js';\r\n\r\nclass QuadraticBezierCurve3 extends Curve {\r\n\r\n constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) {\r\n\r\n super();\r\n\r\n this.isQuadraticBezierCurve3 = true;\r\n\r\n this.type = 'QuadraticBezierCurve3';\r\n\r\n this.v0 = v0;\r\n this.v1 = v1;\r\n this.v2 = v2;\r\n\r\n }\r\n\r\n getPoint(t, optionalTarget = new Vector3()) {\r\n\r\n const point = optionalTarget;\r\n\r\n const v0 = this.v0, v1 = this.v1, v2 = this.v2;\r\n\r\n point.set(\r\n QuadraticBezier(t, v0.x, v1.x, v2.x),\r\n QuadraticBezier(t, v0.y, v1.y, v2.y),\r\n QuadraticBezier(t, v0.z, v1.z, v2.z)\r\n );\r\n\r\n return point;\r\n\r\n }\r\n\r\n // copy(source) {\r\n\r\n // super.copy(source);\r\n\r\n // this.v0.copy(source.v0);\r\n // this.v1.copy(source.v1);\r\n // this.v2.copy(source.v2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n // toJSON() {\r\n\r\n // const data = super.toJSON();\r\n\r\n // data.v0 = this.v0.toArray();\r\n // data.v1 = this.v1.toArray();\r\n // data.v2 = this.v2.toArray();\r\n\r\n // return data;\r\n\r\n // }\r\n\r\n // fromJSON(json) {\r\n\r\n // super.fromJSON(json);\r\n\r\n // this.v0.fromArray(json.v0);\r\n // this.v1.fromArray(json.v1);\r\n // this.v2.fromArray(json.v2);\r\n\r\n // return this;\r\n\r\n // }\r\n\r\n}\r\n\r\nexport { QuadraticBezierCurve3 };\r\n","/* eslint-disable no-tabs */\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathPointList.js\r\nimport { Matrix4 } from '../math/Matrix4.js';\r\nimport { QuadraticBezierCurve3 } from '../math/QuadraticBezierCurve3.js';\r\nimport { Vector3 } from '../math/Vector3.js';\r\nimport { PathPoint } from './PathPoint.js';\r\n\r\nconst helpVec3_1 = new Vector3();\r\nconst helpVec3_2 = new Vector3();\r\nconst helpVec3_3 = new Vector3();\r\nconst helpMat4 = new Matrix4();\r\nconst helpCurve = new QuadraticBezierCurve3();\r\n\r\nfunction _getCornerBezierCurve(last, current, next, cornerRadius, firstCorner, out) {\r\n\tconst lastDir = helpVec3_1.subVectors(current, last);\r\n\tconst nextDir = helpVec3_2.subVectors(next, current);\r\n\r\n\tconst lastDirLength = lastDir.length();\r\n\tconst nextDirLength = nextDir.length();\r\n\r\n\tlastDir.normalize();\r\n\tnextDir.normalize();\r\n\r\n\t// cornerRadius can not bigger then lineDistance / 2, auto fix this\r\n\tconst v0Dist = Math.min((firstCorner ? lastDirLength / 2 : lastDirLength) * 0.999999, cornerRadius);\r\n\tout.v0.copy(current).sub(lastDir.multiplyScalar(v0Dist));\r\n\r\n\tout.v1.copy(current);\r\n\r\n\tconst v2Dist = Math.min(nextDirLength / 2 * 0.999999, cornerRadius);\r\n\tout.v2.copy(current).add(nextDir.multiplyScalar(v2Dist));\r\n\r\n\treturn out;\r\n}\r\n\r\n/**\r\n * PathPointList\r\n * input points to generate a PathPoint list\r\n */\r\nclass PathPointList {\r\n\r\n\tconstructor() {\r\n\t\tthis.array = []; // path point array\r\n\t\tthis.count = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Set points\r\n\t * @param {THREE.Vector3[]} points key points array\r\n\t * @param {number} cornerRadius? the corner radius. set 0 to disable round corner. default is 0.1\r\n\t * @param {number} cornerSplit? the corner split. default is 10.\r\n\t * @param {number} up? force up. default is auto up (calculate by tangent).\r\n\t * @param {boolean} close? close path. default is false.\r\n\t */\r\n\tset(points, cornerRadius = 0.1, cornerSplit = 10, up = null, close = false) {\r\n\t\tpoints = points.slice(0);\r\n\r\n\t\tif (points.length < 2) {\r\n\t\t\tconsole.warn('PathPointList: points length less than 2.');\r\n\t\t\tthis.count = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Auto close\r\n\t\tif (close && !points[0].equals(points[points.length - 1])) {\r\n\t\t\tpoints.push(new Vector3().copy(points[0]));\r\n\t\t}\r\n\r\n\t\t// Generate path point list\r\n\t\tfor (let i = 0, l = points.length; i < l; i++) {\r\n\t\t\tif (i === 0) {\r\n\t\t\t\tthis._start(points[i], points[i + 1], up);\r\n\t\t\t} else if (i === l - 1) {\r\n\t\t\t\tif (close) {\r\n\t\t\t\t\t// Connect end point and start point\r\n\t\t\t\t\tthis._corner(points[i], points[1], cornerRadius, cornerSplit, up);\r\n\r\n\t\t\t\t\t// Fix start point\r\n\t\t\t\t\tconst dist = this.array[0].dist; // should not copy dist\r\n\t\t\t\t\tthis.array[0].copy(this.array[this.count - 1]);\r\n\t\t\t\t\tthis.array[0].dist = dist;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._end(points[i]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis._corner(points[i], points[i + 1], cornerRadius, cornerSplit, up);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get distance of this path\r\n\t * @return {number}\r\n\t */\r\n\tdistance() {\r\n\t\tif (this.count > 0) {\r\n\t\t\treturn this.array[this.count - 1].dist;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t_getByIndex(index) {\r\n\t\tif (!this.array[index]) {\r\n\t\t\tthis.array[index] = new PathPoint();\r\n\t\t}\r\n\t\treturn this.array[index];\r\n\t}\r\n\r\n\t_start(current, next, up) {\r\n\t\tthis.count = 0;\r\n\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tpoint.pos.copy(current);\r\n\t\tpoint.dir.subVectors(next, current);\r\n\r\n\t\t// init start up dir\r\n\t\tif (up) {\r\n\t\t\tpoint.up.copy(up);\r\n\t\t} else {\r\n\t\t\t// select an initial normal vector perpendicular to the first tangent vector\r\n\t\t\tlet min = Number.MAX_VALUE;\r\n\t\t\tconst tx = Math.abs(point.dir.x);\r\n\t\t\tconst ty = Math.abs(point.dir.y);\r\n\t\t\tconst tz = Math.abs(point.dir.z);\r\n\t\t\tif (tx < min) {\r\n\t\t\t\tmin = tx;\r\n\t\t\t\tpoint.up.set(1, 0, 0);\r\n\t\t\t}\r\n\t\t\tif (ty < min) {\r\n\t\t\t\tmin = ty;\r\n\t\t\t\tpoint.up.set(0, 1, 0);\r\n\t\t\t}\r\n\t\t\tif (tz < min) {\r\n\t\t\t\tpoint.up.set(0, 0, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\t\tpoint.up.crossVectors(point.right, point.dir).normalize();\r\n\t\tpoint.dist = 0;\r\n\t\tpoint.widthScale = 1;\r\n\t\tpoint.sharp = false;\r\n\r\n\t\tpoint.dir.normalize();\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n\t_end(current) {\r\n\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tpoint.pos.copy(current);\r\n\t\tpoint.dir.subVectors(current, lastPoint.pos);\r\n\t\tconst dist = point.dir.length();\r\n\t\tpoint.dir.normalize();\r\n\r\n\t\tpoint.up.copy(lastPoint.up); // copy last up\r\n\r\n\t\tconst vec = helpVec3_1.crossVectors(lastPoint.dir, point.dir);\r\n\t\tif (vec.length() > Number.EPSILON) {\r\n\t\t\tvec.normalize();\r\n\t\t\tconst theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors\r\n\t\t\tpoint.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));\r\n\t\t}\r\n\r\n\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\r\n\t\tpoint.dist = lastPoint.dist + dist;\r\n\t\tpoint.widthScale = 1;\r\n\t\tpoint.sharp = false;\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n\t_corner(current, next, cornerRadius, cornerSplit, up) {\r\n\t\tif (cornerRadius > 0 && cornerSplit > 0) {\r\n\t\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\t\tconst curve = _getCornerBezierCurve(lastPoint.pos, current, next, cornerRadius, (this.count - 1) === 0, helpCurve);\r\n\t\t\tconst samplerPoints = curve.getPoints(cornerSplit); // TODO optimize\r\n\r\n\t\t\tfor (let f = 0; f < cornerSplit; f++) {\r\n\t\t\t\tthis._sharpCorner(samplerPoints[f], samplerPoints[f + 1], up, f === 0 ? 1 : 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (!samplerPoints[cornerSplit].equals(next)) {\r\n\t\t\t\tthis._sharpCorner(samplerPoints[cornerSplit], next, up, 2);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis._sharpCorner(current, next, up, 0, true);\r\n\t\t}\r\n\t}\r\n\r\n\t// dirType: 0 - use middle dir / 1 - use last dir / 2- use next dir\r\n\t_sharpCorner(current, next, up, dirType = 0, sharp = false) {\r\n\t\tconst lastPoint = this.array[this.count - 1];\r\n\t\tconst point = this._getByIndex(this.count);\r\n\r\n\t\tconst lastDir = helpVec3_1.subVectors(current, lastPoint.pos);\r\n\t\tconst nextDir = helpVec3_2.subVectors(next, current);\r\n\r\n\t\tconst lastDirLength = lastDir.length();\r\n\r\n\t\tlastDir.normalize();\r\n\t\tnextDir.normalize();\r\n\r\n\t\tpoint.pos.copy(current);\r\n\r\n\t\tif (dirType === 1) {\r\n\t\t\tpoint.dir.copy(lastDir);\r\n\t\t} else if (dirType === 2) {\r\n\t\t\tpoint.dir.copy(nextDir);\r\n\t\t} else {\r\n\t\t\tpoint.dir.addVectors(lastDir, nextDir);\r\n\t\t\tpoint.dir.normalize();\r\n\t\t}\r\n\r\n\t\tif (up) {\r\n\t\t\tif (point.dir.dot(up) === 1) {\r\n\t\t\t\tpoint.right.crossVectors(nextDir, up).normalize();\r\n\t\t\t} else {\r\n\t\t\t\tpoint.right.crossVectors(point.dir, up).normalize();\r\n\t\t\t}\r\n\r\n\t\t\tpoint.up.crossVectors(point.right, point.dir).normalize();\r\n\t\t} else {\r\n\t\t\tpoint.up.copy(lastPoint.up);\r\n\r\n\t\t\tconst vec = helpVec3_3.crossVectors(lastPoint.dir, point.dir);\r\n\t\t\tif (vec.length() > Number.EPSILON) {\r\n\t\t\t\tvec.normalize();\r\n\t\t\t\tconst theta = Math.acos(Math.min(Math.max(lastPoint.dir.dot(point.dir), -1), 1)); // clamp for floating pt errors\r\n\t\t\t\tpoint.up.applyMatrix4(helpMat4.makeRotationAxis(vec, theta));\r\n\t\t\t}\r\n\r\n\t\t\tpoint.right.crossVectors(point.dir, point.up).normalize();\r\n\t\t}\r\n\r\n\t\tpoint.dist = lastPoint.dist + lastDirLength;\r\n\r\n\t\tconst _cos = lastDir.dot(nextDir);\r\n\t\tpoint.widthScale = Math.min(1 / Math.sqrt((1 + _cos) / 2), 1.415) || 1;\r\n\t\tpoint.sharp = (Math.abs(_cos - 1) > 0.05) && sharp;\r\n\r\n\t\tthis.count++;\r\n\t}\r\n\r\n}\r\n\r\nexport { PathPointList };\r\n","import { Vector3 } from './math/Vector3';\r\nimport { PathPoint } from './path/PathPoint';\r\nimport { PathPointList } from './path/PathPointList';\r\nimport { merge } from './util';\r\nconst UP = new Vector3(0, 0, 1);\r\n\r\nexport function expandPaths(lines, options) {\r\n options = Object.assign({}, { lineWidth: 1, cornerRadius: 0, cornerSplit: 10 }, options);\r\n const results = lines.map(line => {\r\n const points = line.map(p => {\r\n const [x, y, z] = p;\r\n return new Vector3(x, y, z || 0);\r\n });\r\n const pathPointList = new PathPointList();\r\n pathPointList.set(points, options.cornerRadius, options.cornerSplit, UP);\r\n const result = generatePathVertexData(pathPointList, options);\r\n result.line = line;\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = new Float32Array(result.normal);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\n// Vertex Data Generate Functions\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathGeometry.js\r\nfunction generatePathVertexData(pathPointList, options) {\r\n const width = options.lineWidth || 0.1;\r\n const progress = 1;\r\n const side = 'both';\r\n\r\n const halfWidth = width / 2;\r\n const sideWidth = (side !== 'both' ? width / 2 : width);\r\n const totalDistance = pathPointList.distance();\r\n const progressDistance = progress * totalDistance;\r\n if (totalDistance === 0) {\r\n return null;\r\n }\r\n\r\n const sharpUvOffset = halfWidth / sideWidth;\r\n // const sharpUvOffset2 = halfWidth / totalDistance;\r\n\r\n let count = 0;\r\n\r\n // modify data\r\n const position = [];\r\n const normal = [];\r\n const uv = [];\r\n const indices = [];\r\n let verticesCount = 0;\r\n\r\n const right = new Vector3();\r\n const left = new Vector3();\r\n\r\n // for sharp corners\r\n const leftOffset = new Vector3();\r\n const rightOffset = new Vector3();\r\n const tempPoint1 = new Vector3();\r\n const tempPoint2 = new Vector3();\r\n\r\n function addVertices(pathPoint) {\r\n const first = position.length === 0;\r\n const sharpCorner = pathPoint.sharp && !first;\r\n\r\n const uvDist = pathPoint.dist / sideWidth;\r\n // const uvDist2 = pathPoint.dist / totalDistance;\r\n\r\n const dir = pathPoint.dir;\r\n const up = pathPoint.up;\r\n const _right = pathPoint.right;\r\n\r\n if (side !== 'left') {\r\n right.copy(_right).multiplyScalar(halfWidth * pathPoint.widthScale);\r\n } else {\r\n right.set(0, 0, 0);\r\n }\r\n\r\n if (side !== 'right') {\r\n left.copy(_right).multiplyScalar(-halfWidth * pathPoint.widthScale);\r\n } else {\r\n left.set(0, 0, 0);\r\n }\r\n\r\n right.add(pathPoint.pos);\r\n left.add(pathPoint.pos);\r\n\r\n if (sharpCorner) {\r\n leftOffset.fromArray(position, position.length - 6).sub(left);\r\n rightOffset.fromArray(position, position.length - 3).sub(right);\r\n\r\n const leftDist = leftOffset.length();\r\n const rightDist = rightOffset.length();\r\n\r\n const sideOffset = leftDist - rightDist;\r\n let longerOffset, longEdge;\r\n\r\n if (sideOffset > 0) {\r\n longerOffset = leftOffset;\r\n longEdge = left;\r\n } else {\r\n longerOffset = rightOffset;\r\n longEdge = right;\r\n }\r\n\r\n tempPoint1.copy(longerOffset).setLength(Math.abs(sideOffset)).add(longEdge);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let _cos = tempPoint2.copy(longEdge).sub(tempPoint1).normalize().dot(dir);\r\n // eslint-disable-next-line prefer-const\r\n let _len = tempPoint2.copy(longEdge).sub(tempPoint1).length();\r\n // eslint-disable-next-line prefer-const\r\n let _dist = _cos * _len * 2;\r\n\r\n tempPoint2.copy(dir).setLength(_dist).add(tempPoint1);\r\n\r\n if (sideOffset > 0) {\r\n position.push(\r\n tempPoint1.x, tempPoint1.y, tempPoint1.z, // 6\r\n right.x, right.y, right.z, // 5\r\n left.x, left.y, left.z, // 4\r\n right.x, right.y, right.z, // 3\r\n tempPoint2.x, tempPoint2.y, tempPoint2.z, // 2\r\n right.x, right.y, right.z // 1\r\n );\r\n\r\n verticesCount += 6;\r\n\r\n indices.push(\r\n verticesCount - 6, verticesCount - 8, verticesCount - 7,\r\n verticesCount - 6, verticesCount - 7, verticesCount - 5,\r\n\r\n verticesCount - 4, verticesCount - 6, verticesCount - 5,\r\n verticesCount - 2, verticesCount - 4, verticesCount - 1\r\n );\r\n\r\n count += 12;\r\n } else {\r\n position.push(\r\n left.x, left.y, left.z, // 6\r\n tempPoint1.x, tempPoint1.y, tempPoint1.z, // 5\r\n left.x, left.y, left.z, // 4\r\n right.x, right.y, right.z, // 3\r\n left.x, left.y, left.z, // 2\r\n tempPoint2.x, tempPoint2.y, tempPoint2.z // 1\r\n );\r\n\r\n verticesCount += 6;\r\n\r\n indices.push(\r\n verticesCount - 6, verticesCount - 8, verticesCount - 7,\r\n verticesCount - 6, verticesCount - 7, verticesCount - 5,\r\n\r\n verticesCount - 6, verticesCount - 5, verticesCount - 3,\r\n verticesCount - 2, verticesCount - 3, verticesCount - 1\r\n );\r\n\r\n count += 12;\r\n }\r\n\r\n normal.push(\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z\r\n );\r\n\r\n uv.push(\r\n uvDist - sharpUvOffset, 0,\r\n uvDist - sharpUvOffset, 1,\r\n uvDist, 0,\r\n uvDist, 1,\r\n uvDist + sharpUvOffset, 0,\r\n uvDist + sharpUvOffset, 1\r\n );\r\n\r\n // if (generateUv2) {\r\n // uv2.push(\r\n // uvDist2 - sharpUvOffset2, 0,\r\n // uvDist2 - sharpUvOffset2, 1,\r\n // uvDist2, 0,\r\n // uvDist2, 1,\r\n // uvDist2 + sharpUvOffset2, 0,\r\n // uvDist2 + sharpUvOffset2, 1\r\n // );\r\n // }\r\n } else {\r\n position.push(\r\n left.x, left.y, left.z,\r\n right.x, right.y, right.z\r\n );\r\n\r\n normal.push(\r\n up.x, up.y, up.z,\r\n up.x, up.y, up.z\r\n );\r\n\r\n uv.push(\r\n uvDist, 0,\r\n uvDist, 1\r\n );\r\n\r\n // if (generateUv2) {\r\n // uv2.push(\r\n // uvDist2, 0,\r\n // uvDist2, 1\r\n // );\r\n // }\r\n\r\n verticesCount += 2;\r\n\r\n if (!first) {\r\n indices.push(\r\n verticesCount - 2, verticesCount - 4, verticesCount - 3,\r\n verticesCount - 2, verticesCount - 3, verticesCount - 1\r\n );\r\n\r\n count += 6;\r\n }\r\n }\r\n }\r\n\r\n let lastPoint;\r\n\r\n if (progressDistance > 0) {\r\n for (let i = 0; i < pathPointList.count; i++) {\r\n const pathPoint = pathPointList.array[i];\r\n\r\n if (pathPoint.dist > progressDistance) {\r\n const prevPoint = pathPointList.array[i - 1];\r\n lastPoint = new PathPoint();\r\n\r\n // linear lerp for progress\r\n const alpha = (progressDistance - prevPoint.dist) / (pathPoint.dist - prevPoint.dist);\r\n lastPoint.lerpPathPoints(prevPoint, pathPoint, alpha);\r\n\r\n addVertices(lastPoint);\r\n break;\r\n } else {\r\n addVertices(pathPoint);\r\n }\r\n }\r\n } else {\r\n lastPoint = pathPointList.array[0];\r\n }\r\n\r\n return {\r\n points: position,\r\n normal,\r\n uvs: uv,\r\n index: indices,\r\n count\r\n };\r\n}\r\n","import { Vector3 } from './math/Vector3';\r\nimport { PathPoint } from './path/PathPoint';\r\nimport { PathPointList } from './path/PathPointList';\r\nimport { merge } from './util';\r\nconst UP = new Vector3(0, 0, 1);\r\n\r\nexport function expandTubes(lines, options) {\r\n options = Object.assign({}, { radius: 1, cornerSplit: 0, radialSegments: 8, startRad: -Math.PI / 4 }, options);\r\n const results = lines.map(line => {\r\n const points = line.map(p => {\r\n const [x, y, z] = p;\r\n return new Vector3(x, y, z || 0);\r\n });\r\n const pathPointList = new PathPointList();\r\n pathPointList.set(points, options.cornerRadius, options.cornerSplit, UP);\r\n const result = generateTubeVertexData(pathPointList, options);\r\n result.line = line;\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = new Float32Array(result.normal);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\n// Vertex Data Generate Functions\r\n// code copy from https://github.com/shawn0326/three.path/blob/master/src/PathGeometry.js\r\nfunction generateTubeVertexData(pathPointList, options) {\r\n const radius = Math.max(options.radius || 1, 0.00000001);\r\n const progress = options.progress !== undefined ? options.progress : 1;\r\n const radialSegments = Math.max(3, options.radialSegments || 8);\r\n const startRad = options.startRad || 0;\r\n\r\n const circum = radius * 2 * Math.PI;\r\n const totalDistance = pathPointList.distance();\r\n const progressDistance = progress * totalDistance;\r\n if (progressDistance === 0) {\r\n return null;\r\n }\r\n\r\n let count = 0;\r\n\r\n // modify data\r\n const points = [];\r\n const normal = [];\r\n const uvs = [];\r\n // const uv2 = [];\r\n const index = [];\r\n let verticesCount = 0;\r\n\r\n const normalDir = new Vector3();\r\n\r\n let pIndex = -1;\r\n let nIndex = -1;\r\n let uIndex = -1;\r\n let iIndex = -1;\r\n function addVertices(pathPoint, radius, radialSegments) {\r\n const first = points.length === 0;\r\n const uvDist = pathPoint.dist / circum;\r\n // const uvDist2 = pathPoint.dist / totalDistance;\r\n\r\n for (let i = 0; i <= radialSegments; i++) {\r\n let r = i;\r\n if (r === radialSegments) {\r\n r = 0;\r\n }\r\n normalDir.copy(pathPoint.up).applyAxisAngle(pathPoint.dir, startRad + Math.PI * 2 * r / radialSegments).normalize();\r\n\r\n const scale = radius * pathPoint.widthScale;\r\n points[++pIndex] = pathPoint.pos.x + normalDir.x * scale;\r\n points[++pIndex] = pathPoint.pos.y + normalDir.y * scale;\r\n points[++pIndex] = pathPoint.pos.z + normalDir.z * scale;\r\n\r\n normal[++nIndex] = normalDir.x;\r\n normal[++nIndex] = normalDir.y;\r\n normal[++nIndex] = normalDir.z;\r\n\r\n uvs[++uIndex] = uvDist;\r\n uvs[++uIndex] = i / radialSegments;\r\n\r\n // uvs.push(uvDist, r / radialSegments);\r\n\r\n // if (generateUv2) {\r\n // uv2.push(uvDist2, r / radialSegments);\r\n // }\r\n\r\n verticesCount++;\r\n }\r\n\r\n if (!first) {\r\n const begin1 = verticesCount - (radialSegments + 1) * 2;\r\n const begin2 = verticesCount - (radialSegments + 1);\r\n\r\n for (let i = 0; i < radialSegments; i++) {\r\n index[++iIndex] = begin2 + i;\r\n index[++iIndex] = begin1 + i;\r\n index[++iIndex] = begin1 + i + 1;\r\n index[++iIndex] = begin2 + i;\r\n index[++iIndex] = begin1 + i + 1;\r\n index[++iIndex] = begin2 + i + 1;\r\n // index.push(\r\n // begin2 + i,\r\n // begin1 + i,\r\n // begin1 + i + 1,\r\n // begin2 + i,\r\n // begin1 + i + 1,\r\n // begin2 + i + 1\r\n // );\r\n\r\n count += 6;\r\n }\r\n }\r\n }\r\n\r\n if (progressDistance > 0) {\r\n for (let i = 0; i < pathPointList.count; i++) {\r\n const pathPoint = pathPointList.array[i];\r\n\r\n if (pathPoint.dist > progressDistance) {\r\n const prevPoint = pathPointList.array[i - 1];\r\n const lastPoint = new PathPoint();\r\n\r\n // linear lerp for progress\r\n const alpha = (progressDistance - prevPoint.dist) / (pathPoint.dist - prevPoint.dist);\r\n lastPoint.lerpPathPoints(prevPoint, pathPoint, alpha);\r\n\r\n addVertices(lastPoint, radius, radialSegments);\r\n break;\r\n } else {\r\n addVertices(pathPoint, radius, radialSegments);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n points,\r\n normal,\r\n uvs,\r\n // uv2,\r\n index,\r\n count\r\n };\r\n}\r\n"],"names":["earcutModule","exports","earcut","earcut_1","data","holeIndices","dim","hasHoles","length","outerLen","outerNode","linkedList","triangles","next","prev","minX","minY","maxX","maxY","x","y","invSize","eliminateHoles","i","Math","max","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","p","again","steiner","area","ear","pass","indexCurve","stop","isEarHashed","isEar","push","cureLocalIntersections","splitEarcut","a","b","c","ax","bx","cx","ay","by","cy","x0","y0","x1","y1","pointInTriangle","minZ","zOrder","maxZ","prevZ","n","nextZ","z","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","len","list","getLeftmost","sort","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","abs","sectorContainsSector","sortLinked","q","e","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","r","p1","p2","q1","q2","o1","sign","o2","o3","o4","onSegment","min","num","inside","a2","Node","b2","an","bp","deviation","polygonArea","trianglesArea","sum","j","flatten","result","vertices","holes","dimensions","holeIndex","d","isClockwise","ring","cur","v3Sub","out","v1","v2","v3Normalize","v","sqrt","v3Cross","az","bz","generateNormal","indices","position","v3Set","p3","v21","v32","normals","Float32Array","f","i1","i2","i3","l","merge","results","normal","uv","plen","ilen","Uint32Array","pOffset","pCount","iIdx","uvOffset","set","len1","pIndex","radToDeg","rad","PI","degToRad","angle","generateSideWallUV","uvs","indexA","indexB","indexC","indexD","idx1","idx2","idx3","idx4","a_x","a_y","a_z","b_x","b_y","b_z","c_x","c_y","c_z","d_x","d_y","d_z","extrudePolygons","polygons","options","Object","assign","depth","map","polygon","validateRing","reverse","isClosedRing","splice","flatVertices","generateTopAndBottom","generateSides","points","index","count","idx","a1","b1","c1","x2","y2","calPolygonPointsCount","uOffset","idx0","checkOptions","lineWidth","sideDepth","extrudePolylines","lines","bottomStickGround","line","expandLine","extrudeSlopes","side","tempResult","leftPoints","rightPoints","depths","lz","rz","z1","z2","d1","len2","c2","d2","rings","depthsEnable","addOneSideIndex","vs","TEMPV1","TEMPV2","radius","currentp","dy","dx","rAngle","atan","p0","vAngle","getAngle","rRad","cos","sin","p4","translateLine","line1","line2","op1","lineIntersection","op2","point1","point2","leftOnLine","offsetPoints","dot","det","atan2","distance","rad1","offsetX","offsetY","tp1","tp2","rad2","tp3","tp4","dx1","dy1","dx2","dy2","k1","k2","cylinder","point","height","radialSegments","round","aRad","circlePointsLen","centerx","centery","uIdx","offset","u","pointsLen","indicesLen","sidePoints","u1","u2","Quaternion","w","isQuaternion","_x","_y","_z","_w","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","t","z0","w0","w1","s","dir","sqrSin","Number","EPSILON","tDir","multiplyQuaternionsFlat","_onChangeCallback","clone","constructor","copy","quaternion","setFromEuler","euler","update","order","_order","c3","s1","s2","s3","console","warn","setFromAxisAngle","axis","halfAngle","setFromRotationMatrix","te","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","normalize","rotateTowards","step","angleTo","slerp","identity","invert","conjugate","lengthSq","multiply","multiplyQuaternions","premultiply","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","slerpQuaternions","qa","random","theta1","theta2","r1","r2","fromArray","array","toArray","fromBufferAttribute","attribute","getX","getY","getZ","getW","toJSON","_onChange","callback","value","Symbol","iterator","_quaternion","Vector3","undefined","add","addScalar","addVectors","addScaledVector","sub","subScalar","subVectors","multiplyScalar","scalar","multiplyVectors","applyAxisAngle","applyQuaternion","applyMatrix4","qy","qz","qw","ix","iy","iz","iw","divide","divideScalar","clamp","clampScalar","minVal","maxVal","clampLength","setLength","lerp","alpha","lerpVectors","cross","crossVectors","distanceTo","distanceToSquared","PathPoint","pos","right","up","dist","widthScale","sharp","lerpPathPoints","source","Matrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","multiplyMatrices","makeRotationAxis","tx","ty","matrix","me","Curve","type","arcLengthDivisions","getPoint","getPointAt","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","needsUpdate","cache","current","arcLengths","il","targetArcLength","low","high","comparison","floor","lengthBefore","lengthAfter","segmentLength","segmentFraction","QuadraticBezierP0","k","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","QuadraticBezierCurve3","v0","isQuadraticBezierCurve3","helpVec3_1","helpVec3_2","helpVec3_3","helpMat4","helpCurve","_getCornerBezierCurve","cornerRadius","firstCorner","lastDir","nextDir","lastDirLength","nextDirLength","v0Dist","v2Dist","PathPointList","cornerSplit","close","slice","_start","_corner","_end","_getByIndex","MAX_VALUE","tz","lastPoint","vec","theta","acos","curve","samplerPoints","_sharpCorner","dirType","_cos","UP","expandPaths","pathPointList","generatePathVertexData","width","progress","halfWidth","sideWidth","totalDistance","progressDistance","sharpUvOffset","verticesCount","left","leftOffset","rightOffset","tempPoint1","tempPoint2","addVertices","pathPoint","first","sharpCorner","uvDist","_right","leftDist","rightDist","sideOffset","longerOffset","longEdge","_len","_dist","prevPoint","expandTubes","startRad","generateTubeVertexData","circum","normalDir","nIndex","uIndex","iIndex","scale","begin1","begin2"],"mappings":"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"}