@loaders.gl/ply 3.3.0-alpha.1 → 3.3.0-alpha.10
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.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +4 -17
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-ply-schema.js +0 -6
- package/dist/es5/lib/get-ply-schema.js.map +1 -1
- package/dist/es5/lib/normalize-ply.js +1 -8
- package/dist/es5/lib/normalize-ply.js.map +1 -1
- package/dist/es5/lib/parse-ply-in-batches.js +98 -169
- package/dist/es5/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/es5/lib/parse-ply.js +1 -53
- package/dist/es5/lib/parse-ply.js.map +1 -1
- package/dist/es5/lib/ply-types.js.map +1 -1
- package/dist/es5/ply-loader.js +3 -1
- package/dist/es5/ply-loader.js.map +1 -1
- package/dist/es5/workers/ply-worker.js +0 -2
- package/dist/es5/workers/ply-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/get-ply-schema.js +0 -4
- package/dist/esm/lib/get-ply-schema.js.map +1 -1
- package/dist/esm/lib/normalize-ply.js +2 -5
- package/dist/esm/lib/normalize-ply.js.map +1 -1
- package/dist/esm/lib/parse-ply-in-batches.js +6 -38
- package/dist/esm/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/esm/lib/parse-ply.js +8 -52
- package/dist/esm/lib/parse-ply.js.map +1 -1
- package/dist/esm/lib/ply-types.js.map +1 -1
- package/dist/esm/ply-loader.js +4 -1
- package/dist/esm/ply-loader.js.map +1 -1
- package/dist/esm/workers/ply-worker.js.map +1 -1
- package/dist/lib/ply-types.d.ts +6 -6
- package/dist/lib/ply-types.d.ts.map +1 -1
- package/dist/ply-worker.js +1 -1
- package/package.json +4 -4
package/dist/es5/bundle.js
CHANGED
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
package/dist/es5/index.js
CHANGED
|
@@ -1,34 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
7
|
+
exports.PLYLoader = void 0;
|
|
8
8
|
Object.defineProperty(exports, "PLYWorkerLoader", {
|
|
9
9
|
enumerable: true,
|
|
10
10
|
get: function get() {
|
|
11
11
|
return _plyLoader.PLYLoader;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
|
-
exports._typecheckPLYLoader =
|
|
15
|
-
|
|
14
|
+
exports._typecheckPLYLoader = void 0;
|
|
16
15
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
17
|
-
|
|
18
16
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
|
-
|
|
20
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
18
|
var _plyLoader = require("./ply-loader");
|
|
23
|
-
|
|
24
19
|
var _parsePly = _interopRequireDefault(require("./lib/parse-ply"));
|
|
25
|
-
|
|
26
20
|
var _parsePlyInBatches = _interopRequireDefault(require("./lib/parse-ply-in-batches"));
|
|
27
|
-
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
31
|
-
|
|
21
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
23
|
var PLYLoader = _objectSpread(_objectSpread({}, _plyLoader.PLYLoader), {}, {
|
|
33
24
|
parse: function () {
|
|
34
25
|
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
@@ -37,7 +28,6 @@ var PLYLoader = _objectSpread(_objectSpread({}, _plyLoader.PLYLoader), {}, {
|
|
|
37
28
|
switch (_context.prev = _context.next) {
|
|
38
29
|
case 0:
|
|
39
30
|
return _context.abrupt("return", (0, _parsePly.default)(arrayBuffer, options));
|
|
40
|
-
|
|
41
31
|
case 1:
|
|
42
32
|
case "end":
|
|
43
33
|
return _context.stop();
|
|
@@ -45,18 +35,15 @@ var PLYLoader = _objectSpread(_objectSpread({}, _plyLoader.PLYLoader), {}, {
|
|
|
45
35
|
}
|
|
46
36
|
}, _callee);
|
|
47
37
|
}));
|
|
48
|
-
|
|
49
38
|
function parse(_x, _x2) {
|
|
50
39
|
return _parse.apply(this, arguments);
|
|
51
40
|
}
|
|
52
|
-
|
|
53
41
|
return parse;
|
|
54
42
|
}(),
|
|
55
43
|
parseTextSync: _parsePly.default,
|
|
56
44
|
parseSync: _parsePly.default,
|
|
57
45
|
parseInBatches: _parsePlyInBatches.default
|
|
58
46
|
});
|
|
59
|
-
|
|
60
47
|
exports.PLYLoader = PLYLoader;
|
|
61
48
|
var _typecheckPLYLoader = PLYLoader;
|
|
62
49
|
exports._typecheckPLYLoader = _typecheckPLYLoader;
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["PLYLoader","PLYWorkerLoader","parse","arrayBuffer","options","parsePLY","parseTextSync","parseSync","parseInBatches","parsePLYInBatches","_typecheckPLYLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {PLYLoader as PLYWorkerLoader} from './ply-loader';\nimport parsePLY from './lib/parse-ply';\nimport parsePLYInBatches from './lib/parse-ply-in-batches';\n\n// PLYLoader\n\nexport {PLYWorkerLoader};\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader = {\n ...PLYWorkerLoader,\n // Note: parsePLY supports both text and binary\n parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options), // TODO - this may not detect text correctly?\n parseTextSync: parsePLY,\n parseSync: parsePLY,\n parseInBatches: parsePLYInBatches\n};\n\nexport const _typecheckPLYLoader: LoaderWithParser = PLYLoader;\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;AACA;AACA;AAA2D;AAAA;AASpD,IAAMA,SAAS,mCACjBC,oBAAe;EAElBC,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEC,OAAO;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAK,IAAAC,iBAAQ,EAACF,WAAW,EAAEC,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACrEE,aAAa,EAAED,iBAAQ;EACvBE,SAAS,EAAEF,iBAAQ;EACnBG,cAAc,EAAEC;AAAiB,EAClC;AAAC;AAEK,IAAMC,mBAAqC,GAAGV,SAAS;AAAC"}
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getPLYSchema = getPLYSchema;
|
|
7
|
-
|
|
8
7
|
var _schema = require("@loaders.gl/schema");
|
|
9
|
-
|
|
10
8
|
function getPLYSchema(plyHeader, attributes) {
|
|
11
9
|
var metadataMap = makeMetadataFromPlyHeader(plyHeader);
|
|
12
10
|
var schema = (0, _schema.deduceMeshSchema)(attributes, metadataMap);
|
|
@@ -17,19 +15,15 @@ function makeMetadataFromPlyHeader(plyHeader) {
|
|
|
17
15
|
var metadataMap = new Map();
|
|
18
16
|
metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));
|
|
19
17
|
metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));
|
|
20
|
-
|
|
21
18
|
if (plyHeader.format !== undefined) {
|
|
22
19
|
metadataMap.set('ply_format', plyHeader.format);
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
if (plyHeader.version !== undefined) {
|
|
26
22
|
metadataMap.set('ply_version', plyHeader.version);
|
|
27
23
|
}
|
|
28
|
-
|
|
29
24
|
if (plyHeader.headerLength !== undefined) {
|
|
30
25
|
metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));
|
|
31
26
|
}
|
|
32
|
-
|
|
33
27
|
return metadataMap;
|
|
34
28
|
}
|
|
35
29
|
//# sourceMappingURL=get-ply-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"get-ply-schema.js","names":["getPLYSchema","plyHeader","attributes","metadataMap","makeMetadataFromPlyHeader","schema","deduceMeshSchema","Map","set","JSON","stringify","comments","elements","format","undefined","version","headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromPlyHeader(plyHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));\n metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));\n if (plyHeader.format !== undefined) {\n metadataMap.set('ply_format', plyHeader.format);\n }\n if (plyHeader.version !== undefined) {\n metadataMap.set('ply_version', plyHeader.version);\n }\n if (plyHeader.headerLength !== undefined) {\n metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));\n }\n return metadataMap;\n}\n"],"mappings":";;;;;;AAAA;AASO,SAASA,YAAY,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,IAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,IAAMI,MAAM,GAAG,IAAAC,wBAAgB,EAACJ,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;;AAOA,SAASD,yBAAyB,CAACH,SAAoB,EAAuB;EAC5E,IAAME,WAAW,GAAG,IAAII,GAAG,EAAE;EAC7BJ,WAAW,CAACK,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACT,SAAS,CAACU,QAAQ,CAAC,CAAC;EACnER,WAAW,CAACK,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACT,SAAS,CAACW,QAAQ,CAAC,CAAC;EACnE,IAAIX,SAAS,CAACY,MAAM,KAAKC,SAAS,EAAE;IAClCX,WAAW,CAACK,GAAG,CAAC,YAAY,EAAEP,SAAS,CAACY,MAAM,CAAC;EACjD;EACA,IAAIZ,SAAS,CAACc,OAAO,KAAKD,SAAS,EAAE;IACnCX,WAAW,CAACK,GAAG,CAAC,aAAa,EAAEP,SAAS,CAACc,OAAO,CAAC;EACnD;EACA,IAAId,SAAS,CAACe,YAAY,KAAKF,SAAS,EAAE;IACxCX,WAAW,CAACK,GAAG,CAAC,kBAAkB,EAAEP,SAAS,CAACe,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1E;EACA,OAAOd,WAAW;AACpB"}
|
|
@@ -4,15 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = normalizePLY;
|
|
7
|
-
|
|
8
7
|
var _schema = require("@loaders.gl/schema");
|
|
9
|
-
|
|
10
8
|
var _getPlySchema = require("./get-ply-schema");
|
|
11
|
-
|
|
12
9
|
function normalizePLY(plyHeader, plyAttributes, options) {
|
|
13
10
|
var attributes = getMeshAttributes(plyAttributes);
|
|
14
11
|
var boundingBox = (0, _schema.getMeshBoundingBox)(attributes);
|
|
15
12
|
var vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
|
|
13
|
+
|
|
16
14
|
var isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
|
|
17
15
|
var mode = isTriangles ? 4 : 0;
|
|
18
16
|
var topology = isTriangles ? 'triangle-list' : 'point-list';
|
|
@@ -33,14 +31,12 @@ function normalizePLY(plyHeader, plyAttributes, options) {
|
|
|
33
31
|
mode: mode,
|
|
34
32
|
topology: topology
|
|
35
33
|
};
|
|
36
|
-
|
|
37
34
|
if (plyAttributes.indices.length > 0) {
|
|
38
35
|
plyMesh.indices = {
|
|
39
36
|
value: new Uint32Array(plyAttributes.indices),
|
|
40
37
|
size: 1
|
|
41
38
|
};
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
return plyMesh;
|
|
45
41
|
}
|
|
46
42
|
|
|
@@ -57,14 +53,12 @@ function getMeshAttributes(attributes) {
|
|
|
57
53
|
size: 3
|
|
58
54
|
};
|
|
59
55
|
}
|
|
60
|
-
|
|
61
56
|
if (attributes.uvs.length > 0) {
|
|
62
57
|
accessors.TEXCOORD_0 = {
|
|
63
58
|
value: new Float32Array(attributes.uvs),
|
|
64
59
|
size: 2
|
|
65
60
|
};
|
|
66
61
|
}
|
|
67
|
-
|
|
68
62
|
if (attributes.colors.length > 0) {
|
|
69
63
|
accessors.COLOR_0 = {
|
|
70
64
|
value: new Uint8Array(attributes.colors),
|
|
@@ -72,7 +66,6 @@ function getMeshAttributes(attributes) {
|
|
|
72
66
|
normalized: true
|
|
73
67
|
};
|
|
74
68
|
}
|
|
75
|
-
|
|
76
69
|
return accessors;
|
|
77
70
|
}
|
|
78
71
|
//# sourceMappingURL=normalize-ply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"normalize-ply.js","names":["normalizePLY","plyHeader","plyAttributes","options","attributes","getMeshAttributes","boundingBox","getMeshBoundingBox","vertexCount","indices","length","vertices","isTriangles","mode","topology","schema","getPLYSchema","plyMesh","loader","loaderData","header","value","Uint32Array","size","accessors","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"sources":["../../../src/lib/normalize-ply.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n plyHeader: MeshHeader & PLYHeader,\n plyAttributes: PLYAttributes,\n options?: {}\n): PLYMesh {\n const attributes = getMeshAttributes(plyAttributes);\n const boundingBox = getMeshBoundingBox(attributes);\n const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n // TODO - how to detect POINT CLOUDS vs MESHES?\n // TODO - For Meshes, PLY quadrangles must be split?\n const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n const schema = getPLYSchema(plyHeader, attributes);\n\n const plyMesh: PLYMesh = {\n loader: 'ply',\n loaderData: plyHeader,\n header: {\n vertexCount,\n boundingBox\n },\n schema,\n attributes,\n indices: {value: new Uint32Array(0), size: 0},\n mode,\n topology\n };\n\n if (plyAttributes.indices.length > 0) {\n plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n }\n\n return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n\n // optional attributes data\n\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n\n if (attributes.colors.length > 0) {\n // TODO - normalized shoud be based on `uchar` flag in source data?\n accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n }\n\n return accessors;\n}\n"],"mappings":";;;;;;AACA;AAEA;AAOe,SAASA,YAAY,CAClCC,SAAiC,EACjCC,aAA4B,EAC5BC,OAAY,EACH;EACT,IAAMC,UAAU,GAAGC,iBAAiB,CAACH,aAAa,CAAC;EACnD,IAAMI,WAAW,GAAG,IAAAC,0BAAkB,EAACH,UAAU,CAAC;EAClD,IAAMI,WAAW,GAAGN,aAAa,CAACO,OAAO,CAACC,MAAM,IAAIR,aAAa,CAACS,QAAQ,CAACD,MAAM,GAAG,CAAC;;EAIrF,IAAME,WAAW,GAAGV,aAAa,CAACO,OAAO,IAAIP,aAAa,CAACO,OAAO,CAACC,MAAM,GAAG,CAAC;EAC7E,IAAMG,IAAI,GAAGD,WAAW,GAAG,CAAC,GAAG,CAAC;EAChC,IAAME,QAAQ,GAAGF,WAAW,GAAG,eAAe,GAAG,YAAY;EAE7D,IAAMG,MAAM,GAAG,IAAAC,0BAAY,EAACf,SAAS,EAAEG,UAAU,CAAC;EAElD,IAAMa,OAAgB,GAAG;IACvBC,MAAM,EAAE,KAAK;IACbC,UAAU,EAAElB,SAAS;IACrBmB,MAAM,EAAE;MACNZ,WAAW,EAAXA,WAAW;MACXF,WAAW,EAAXA;IACF,CAAC;IACDS,MAAM,EAANA,MAAM;IACNX,UAAU,EAAVA,UAAU;IACVK,OAAO,EAAE;MAACY,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;MAAEC,IAAI,EAAE;IAAC,CAAC;IAC7CV,IAAI,EAAJA,IAAI;IACJC,QAAQ,EAARA;EACF,CAAC;EAED,IAAIZ,aAAa,CAACO,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;IACpCO,OAAO,CAACR,OAAO,GAAG;MAACY,KAAK,EAAE,IAAIC,WAAW,CAACpB,aAAa,CAACO,OAAO,CAAC;MAAEc,IAAI,EAAE;IAAC,CAAC;EAC5E;EAEA,OAAON,OAAO;AAChB;;AAMA,SAASZ,iBAAiB,CAACD,UAAyB,EAAkB;EACpE,IAAMoB,SAAyB,GAAG,CAAC,CAAC;EAEpCA,SAAS,CAACC,QAAQ,GAAG;IAACJ,KAAK,EAAE,IAAIK,YAAY,CAACtB,UAAU,CAACO,QAAQ,CAAC;IAAEY,IAAI,EAAE;EAAC,CAAC;;EAI5E,IAAInB,UAAU,CAACuB,OAAO,CAACjB,MAAM,GAAG,CAAC,EAAE;IACjCc,SAAS,CAACI,MAAM,GAAG;MAACP,KAAK,EAAE,IAAIK,YAAY,CAACtB,UAAU,CAACuB,OAAO,CAAC;MAAEJ,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAInB,UAAU,CAACyB,GAAG,CAACnB,MAAM,GAAG,CAAC,EAAE;IAC7Bc,SAAS,CAACM,UAAU,GAAG;MAACT,KAAK,EAAE,IAAIK,YAAY,CAACtB,UAAU,CAACyB,GAAG,CAAC;MAAEN,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAInB,UAAU,CAAC2B,MAAM,CAACrB,MAAM,GAAG,CAAC,EAAE;IAEhCc,SAAS,CAACQ,OAAO,GAAG;MAACX,KAAK,EAAE,IAAIY,UAAU,CAAC7B,UAAU,CAAC2B,MAAM,CAAC;MAAER,IAAI,EAAE,CAAC;MAAEW,UAAU,EAAE;IAAI,CAAC;EAC3F;EAEA,OAAOV,SAAS;AAClB"}
|