babylonjs-loaders 8.12.1 → 8.13.1
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/babylon.glTF1FileLoader.js +2 -4472
- package/babylon.glTF2FileLoader.js +2 -13348
- package/babylon.glTF2FileLoader.min.js +1 -1
- package/babylon.glTF2FileLoader.min.js.map +1 -1
- package/babylon.glTFFileLoader.js +2 -15940
- package/babylon.glTFFileLoader.min.js +1 -1
- package/babylon.glTFFileLoader.min.js.map +1 -1
- package/babylon.objFileLoader.js +2 -2150
- package/babylon.stlFileLoader.js +2 -452
- package/babylonjs.loaders.d.ts +15 -5
- package/babylonjs.loaders.js +2 -18535
- package/babylonjs.loaders.min.js +1 -1
- package/babylonjs.loaders.min.js.map +1 -1
- package/babylonjs.loaders.module.d.ts +30 -10
- package/package.json +5 -5
- package/webpack.config.js +1 -0
package/babylon.stlFileLoader.js
CHANGED
|
@@ -1,452 +1,2 @@
|
|
|
1
|
-
(function
|
|
2
|
-
|
|
3
|
-
module.exports = factory(require("babylonjs"));
|
|
4
|
-
else if(typeof define === 'function' && define.amd)
|
|
5
|
-
define("babylonjs-loaders", ["babylonjs"], factory);
|
|
6
|
-
else if(typeof exports === 'object')
|
|
7
|
-
exports["babylonjs-loaders"] = factory(require("babylonjs"));
|
|
8
|
-
else
|
|
9
|
-
root["LOADERS"] = factory(root["BABYLON"]);
|
|
10
|
-
})((typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : this), (__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_tools__) => {
|
|
11
|
-
return /******/ (() => { // webpackBootstrap
|
|
12
|
-
/******/ "use strict";
|
|
13
|
-
/******/ var __webpack_modules__ = ({
|
|
14
|
-
|
|
15
|
-
/***/ "../../../dev/loaders/src/STL/index.ts":
|
|
16
|
-
/*!*********************************************!*\
|
|
17
|
-
!*** ../../../dev/loaders/src/STL/index.ts ***!
|
|
18
|
-
\*********************************************/
|
|
19
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
20
|
-
|
|
21
|
-
__webpack_require__.r(__webpack_exports__);
|
|
22
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
|
-
/* harmony export */ STLFileLoader: () => (/* reexport safe */ _stlFileLoader__WEBPACK_IMPORTED_MODULE_0__.STLFileLoader)
|
|
24
|
-
/* harmony export */ });
|
|
25
|
-
/* harmony import */ var _stlFileLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stlFileLoader */ "../../../dev/loaders/src/STL/stlFileLoader.ts");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/***/ }),
|
|
30
|
-
|
|
31
|
-
/***/ "../../../dev/loaders/src/STL/stlFileLoader.metadata.ts":
|
|
32
|
-
/*!**************************************************************!*\
|
|
33
|
-
!*** ../../../dev/loaders/src/STL/stlFileLoader.metadata.ts ***!
|
|
34
|
-
\**************************************************************/
|
|
35
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
36
|
-
|
|
37
|
-
__webpack_require__.r(__webpack_exports__);
|
|
38
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
39
|
-
/* harmony export */ STLFileLoaderMetadata: () => (/* binding */ STLFileLoaderMetadata)
|
|
40
|
-
/* harmony export */ });
|
|
41
|
-
var STLFileLoaderMetadata = {
|
|
42
|
-
name: "stl",
|
|
43
|
-
extensions: {
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
45
|
-
".stl": { isBinary: true },
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
/***/ }),
|
|
51
|
-
|
|
52
|
-
/***/ "../../../dev/loaders/src/STL/stlFileLoader.ts":
|
|
53
|
-
/*!*****************************************************!*\
|
|
54
|
-
!*** ../../../dev/loaders/src/STL/stlFileLoader.ts ***!
|
|
55
|
-
\*****************************************************/
|
|
56
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
57
|
-
|
|
58
|
-
__webpack_require__.r(__webpack_exports__);
|
|
59
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
60
|
-
/* harmony export */ STLFileLoader: () => (/* binding */ STLFileLoader)
|
|
61
|
-
/* harmony export */ });
|
|
62
|
-
/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babylonjs/Materials/standardMaterial */ "babylonjs/Misc/tools");
|
|
63
|
-
/* harmony import */ var babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__);
|
|
64
|
-
/* harmony import */ var _stlFileLoader_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stlFileLoader.metadata */ "../../../dev/loaders/src/STL/stlFileLoader.metadata.ts");
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* STL file type loader.
|
|
74
|
-
* This is a babylon scene loader plugin.
|
|
75
|
-
*/
|
|
76
|
-
var STLFileLoader = /** @class */ (function () {
|
|
77
|
-
function STLFileLoader() {
|
|
78
|
-
/** @internal */
|
|
79
|
-
this.solidPattern = /solid (\S*)([\S\s]*?)endsolid[ ]*(\S*)/g;
|
|
80
|
-
/** @internal */
|
|
81
|
-
this.facetsPattern = /facet([\s\S]*?)endfacet/g;
|
|
82
|
-
/** @internal */
|
|
83
|
-
this.normalPattern = /normal[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g;
|
|
84
|
-
/** @internal */
|
|
85
|
-
this.vertexPattern = /vertex[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g;
|
|
86
|
-
/**
|
|
87
|
-
* Defines the name of the plugin.
|
|
88
|
-
*/
|
|
89
|
-
this.name = _stlFileLoader_metadata__WEBPACK_IMPORTED_MODULE_1__.STLFileLoaderMetadata.name;
|
|
90
|
-
/**
|
|
91
|
-
* Defines the extensions the stl loader is able to load.
|
|
92
|
-
* force data to come in as an ArrayBuffer
|
|
93
|
-
* we'll convert to string if it looks like it's an ASCII .stl
|
|
94
|
-
*/
|
|
95
|
-
this.extensions = _stlFileLoader_metadata__WEBPACK_IMPORTED_MODULE_1__.STLFileLoaderMetadata.extensions;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Import meshes into a scene.
|
|
99
|
-
* @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported
|
|
100
|
-
* @param scene The scene to import into
|
|
101
|
-
* @param data The data to import
|
|
102
|
-
* @param rootUrl The root url for scene and resources
|
|
103
|
-
* @param meshes The meshes array to import into
|
|
104
|
-
* @returns True if successful or false otherwise
|
|
105
|
-
*/
|
|
106
|
-
STLFileLoader.prototype.importMesh = function (meshesNames, scene, data, rootUrl, meshes) {
|
|
107
|
-
var matches;
|
|
108
|
-
if (typeof data !== "string") {
|
|
109
|
-
if (this._isBinary(data)) {
|
|
110
|
-
// binary .stl
|
|
111
|
-
var babylonMesh = new babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.Mesh("stlmesh", scene);
|
|
112
|
-
this._parseBinary(babylonMesh, data);
|
|
113
|
-
if (meshes) {
|
|
114
|
-
meshes.push(babylonMesh);
|
|
115
|
-
}
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
// ASCII .stl
|
|
119
|
-
// convert to string
|
|
120
|
-
data = new TextDecoder().decode(new Uint8Array(data));
|
|
121
|
-
}
|
|
122
|
-
//if arrived here, data is a string, containing the STLA data.
|
|
123
|
-
while ((matches = this.solidPattern.exec(data))) {
|
|
124
|
-
var meshName = matches[1];
|
|
125
|
-
var meshNameFromEnd = matches[3];
|
|
126
|
-
if (meshNameFromEnd && meshName != meshNameFromEnd) {
|
|
127
|
-
babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.Tools.Error("Error in STL, solid name != endsolid name");
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
// check meshesNames
|
|
131
|
-
if (meshesNames && meshName) {
|
|
132
|
-
if (meshesNames instanceof Array) {
|
|
133
|
-
if (!meshesNames.indexOf(meshName)) {
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
if (meshName !== meshesNames) {
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// stl mesh name can be empty as well
|
|
144
|
-
meshName = meshName || "stlmesh";
|
|
145
|
-
var babylonMesh = new babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.Mesh(meshName, scene);
|
|
146
|
-
this._parseASCII(babylonMesh, matches[2]);
|
|
147
|
-
if (meshes) {
|
|
148
|
-
meshes.push(babylonMesh);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return true;
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* Load into a scene.
|
|
155
|
-
* @param scene The scene to load into
|
|
156
|
-
* @param data The data to import
|
|
157
|
-
* @param rootUrl The root url for scene and resources
|
|
158
|
-
* @returns true if successful or false otherwise
|
|
159
|
-
*/
|
|
160
|
-
STLFileLoader.prototype.load = function (scene, data, rootUrl) {
|
|
161
|
-
var result = this.importMesh(null, scene, data, rootUrl, null);
|
|
162
|
-
return result;
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* Load into an asset container.
|
|
166
|
-
* @param scene The scene to load into
|
|
167
|
-
* @param data The data to import
|
|
168
|
-
* @param rootUrl The root url for scene and resources
|
|
169
|
-
* @returns The loaded asset container
|
|
170
|
-
*/
|
|
171
|
-
STLFileLoader.prototype.loadAssetContainer = function (scene, data, rootUrl) {
|
|
172
|
-
var container = new babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.AssetContainer(scene);
|
|
173
|
-
scene._blockEntityCollection = true;
|
|
174
|
-
this.importMesh(null, scene, data, rootUrl, container.meshes);
|
|
175
|
-
scene._blockEntityCollection = false;
|
|
176
|
-
return container;
|
|
177
|
-
};
|
|
178
|
-
STLFileLoader.prototype._isBinary = function (data) {
|
|
179
|
-
// check if file size is correct for binary stl
|
|
180
|
-
var reader = new DataView(data);
|
|
181
|
-
// A Binary STL header is 80 bytes, if the data size is not great than
|
|
182
|
-
// that then it's not a binary STL.
|
|
183
|
-
if (reader.byteLength <= 80) {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
var faceSize = (32 / 8) * 3 + (32 / 8) * 3 * 3 + 16 / 8;
|
|
187
|
-
var nFaces = reader.getUint32(80, true);
|
|
188
|
-
if (80 + 32 / 8 + nFaces * faceSize === reader.byteLength) {
|
|
189
|
-
return true;
|
|
190
|
-
}
|
|
191
|
-
// US-ASCII begin with 's', 'o', 'l', 'i', 'd'
|
|
192
|
-
var ascii = [115, 111, 108, 105, 100];
|
|
193
|
-
for (var off = 0; off < 5; off++) {
|
|
194
|
-
if (reader.getUint8(off) !== ascii[off]) {
|
|
195
|
-
return true;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return false;
|
|
199
|
-
};
|
|
200
|
-
STLFileLoader.prototype._parseBinary = function (mesh, data) {
|
|
201
|
-
var reader = new DataView(data);
|
|
202
|
-
var faces = reader.getUint32(80, true);
|
|
203
|
-
var dataOffset = 84;
|
|
204
|
-
var faceLength = 12 * 4 + 2;
|
|
205
|
-
var offset = 0;
|
|
206
|
-
var positions = new Float32Array(faces * 3 * 3);
|
|
207
|
-
var normals = new Float32Array(faces * 3 * 3);
|
|
208
|
-
var indices = new Uint32Array(faces * 3);
|
|
209
|
-
var indicesCount = 0;
|
|
210
|
-
for (var face = 0; face < faces; face++) {
|
|
211
|
-
var start = dataOffset + face * faceLength;
|
|
212
|
-
var normalX = reader.getFloat32(start, true);
|
|
213
|
-
var normalY = reader.getFloat32(start + 4, true);
|
|
214
|
-
var normalZ = reader.getFloat32(start + 8, true);
|
|
215
|
-
for (var i = 1; i <= 3; i++) {
|
|
216
|
-
var vertexstart = start + i * 12;
|
|
217
|
-
// ordering is intentional to match ascii import
|
|
218
|
-
positions[offset] = reader.getFloat32(vertexstart, true);
|
|
219
|
-
normals[offset] = normalX;
|
|
220
|
-
if (!STLFileLoader.DO_NOT_ALTER_FILE_COORDINATES) {
|
|
221
|
-
positions[offset + 2] = reader.getFloat32(vertexstart + 4, true);
|
|
222
|
-
positions[offset + 1] = reader.getFloat32(vertexstart + 8, true);
|
|
223
|
-
normals[offset + 2] = normalY;
|
|
224
|
-
normals[offset + 1] = normalZ;
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
positions[offset + 1] = reader.getFloat32(vertexstart + 4, true);
|
|
228
|
-
positions[offset + 2] = reader.getFloat32(vertexstart + 8, true);
|
|
229
|
-
normals[offset + 1] = normalY;
|
|
230
|
-
normals[offset + 2] = normalZ;
|
|
231
|
-
}
|
|
232
|
-
offset += 3;
|
|
233
|
-
}
|
|
234
|
-
if (STLFileLoader.DO_NOT_ALTER_FILE_COORDINATES) {
|
|
235
|
-
indices[indicesCount] = indicesCount;
|
|
236
|
-
indices[indicesCount + 1] = indicesCount + 2;
|
|
237
|
-
indices[indicesCount + 2] = indicesCount + 1;
|
|
238
|
-
indicesCount += 3;
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
indices[indicesCount] = indicesCount++;
|
|
242
|
-
indices[indicesCount] = indicesCount++;
|
|
243
|
-
indices[indicesCount] = indicesCount++;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
mesh.setVerticesData(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind, positions);
|
|
247
|
-
mesh.setVerticesData(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.NormalKind, normals);
|
|
248
|
-
mesh.setIndices(indices);
|
|
249
|
-
mesh.computeWorldMatrix(true);
|
|
250
|
-
};
|
|
251
|
-
STLFileLoader.prototype._parseASCII = function (mesh, solidData) {
|
|
252
|
-
var positions = [];
|
|
253
|
-
var normals = [];
|
|
254
|
-
var indices = [];
|
|
255
|
-
var indicesCount = 0;
|
|
256
|
-
//load facets, ignoring loop as the standard doesn't define it can contain more than vertices
|
|
257
|
-
var matches;
|
|
258
|
-
while ((matches = this.facetsPattern.exec(solidData))) {
|
|
259
|
-
var facet = matches[1];
|
|
260
|
-
//one normal per face
|
|
261
|
-
var normalMatches = this.normalPattern.exec(facet);
|
|
262
|
-
this.normalPattern.lastIndex = 0;
|
|
263
|
-
if (!normalMatches) {
|
|
264
|
-
continue;
|
|
265
|
-
}
|
|
266
|
-
var normal = [Number(normalMatches[1]), Number(normalMatches[5]), Number(normalMatches[3])];
|
|
267
|
-
var vertexMatch = void 0;
|
|
268
|
-
while ((vertexMatch = this.vertexPattern.exec(facet))) {
|
|
269
|
-
if (!STLFileLoader.DO_NOT_ALTER_FILE_COORDINATES) {
|
|
270
|
-
positions.push(Number(vertexMatch[1]), Number(vertexMatch[5]), Number(vertexMatch[3]));
|
|
271
|
-
normals.push(normal[0], normal[1], normal[2]);
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
positions.push(Number(vertexMatch[1]), Number(vertexMatch[3]), Number(vertexMatch[5]));
|
|
275
|
-
// Flipping the second and third component because inverted
|
|
276
|
-
// when normal was declared.
|
|
277
|
-
normals.push(normal[0], normal[2], normal[1]);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
if (STLFileLoader.DO_NOT_ALTER_FILE_COORDINATES) {
|
|
281
|
-
indices.push(indicesCount, indicesCount + 2, indicesCount + 1);
|
|
282
|
-
indicesCount += 3;
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
indices.push(indicesCount++, indicesCount++, indicesCount++);
|
|
286
|
-
}
|
|
287
|
-
this.vertexPattern.lastIndex = 0;
|
|
288
|
-
}
|
|
289
|
-
this.facetsPattern.lastIndex = 0;
|
|
290
|
-
mesh.setVerticesData(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind, positions);
|
|
291
|
-
mesh.setVerticesData(babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.NormalKind, normals);
|
|
292
|
-
mesh.setIndices(indices);
|
|
293
|
-
mesh.computeWorldMatrix(true);
|
|
294
|
-
};
|
|
295
|
-
/**
|
|
296
|
-
* Defines if Y and Z axes are swapped or not when loading an STL file.
|
|
297
|
-
* The default is false to maintain backward compatibility. When set to
|
|
298
|
-
* true, coordinates from the STL file are used without change.
|
|
299
|
-
*/
|
|
300
|
-
STLFileLoader.DO_NOT_ALTER_FILE_COORDINATES = false;
|
|
301
|
-
return STLFileLoader;
|
|
302
|
-
}());
|
|
303
|
-
|
|
304
|
-
(0,babylonjs_Misc_tools__WEBPACK_IMPORTED_MODULE_0__.RegisterSceneLoaderPlugin)(new STLFileLoader());
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
/***/ }),
|
|
308
|
-
|
|
309
|
-
/***/ "../../../lts/loaders/src/legacy/legacy-stlFileLoader.ts":
|
|
310
|
-
/*!***************************************************************!*\
|
|
311
|
-
!*** ../../../lts/loaders/src/legacy/legacy-stlFileLoader.ts ***!
|
|
312
|
-
\***************************************************************/
|
|
313
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
314
|
-
|
|
315
|
-
__webpack_require__.r(__webpack_exports__);
|
|
316
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
317
|
-
/* harmony export */ STLFileLoader: () => (/* reexport safe */ loaders_STL_index__WEBPACK_IMPORTED_MODULE_0__.STLFileLoader)
|
|
318
|
-
/* harmony export */ });
|
|
319
|
-
/* harmony import */ var loaders_STL_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! loaders/STL/index */ "../../../dev/loaders/src/STL/index.ts");
|
|
320
|
-
/* eslint-disable import/no-internal-modules */
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* This is the entry point for the UMD module.
|
|
324
|
-
* The entry point for a future ESM package should be index.ts
|
|
325
|
-
*/
|
|
326
|
-
var GlobalObject = typeof __webpack_require__.g !== "undefined" ? __webpack_require__.g : typeof window !== "undefined" ? window : undefined;
|
|
327
|
-
if (typeof GlobalObject !== "undefined") {
|
|
328
|
-
for (var key in loaders_STL_index__WEBPACK_IMPORTED_MODULE_0__) {
|
|
329
|
-
if (!GlobalObject.BABYLON[key]) {
|
|
330
|
-
GlobalObject.BABYLON[key] = loaders_STL_index__WEBPACK_IMPORTED_MODULE_0__[key];
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
/***/ }),
|
|
338
|
-
|
|
339
|
-
/***/ "babylonjs/Misc/tools":
|
|
340
|
-
/*!****************************************************************************************************!*\
|
|
341
|
-
!*** external {"root":"BABYLON","commonjs":"babylonjs","commonjs2":"babylonjs","amd":"babylonjs"} ***!
|
|
342
|
-
\****************************************************************************************************/
|
|
343
|
-
/***/ ((module) => {
|
|
344
|
-
|
|
345
|
-
module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_tools__;
|
|
346
|
-
|
|
347
|
-
/***/ })
|
|
348
|
-
|
|
349
|
-
/******/ });
|
|
350
|
-
/************************************************************************/
|
|
351
|
-
/******/ // The module cache
|
|
352
|
-
/******/ var __webpack_module_cache__ = {};
|
|
353
|
-
/******/
|
|
354
|
-
/******/ // The require function
|
|
355
|
-
/******/ function __webpack_require__(moduleId) {
|
|
356
|
-
/******/ // Check if module is in cache
|
|
357
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
358
|
-
/******/ if (cachedModule !== undefined) {
|
|
359
|
-
/******/ return cachedModule.exports;
|
|
360
|
-
/******/ }
|
|
361
|
-
/******/ // Create a new module (and put it into the cache)
|
|
362
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
363
|
-
/******/ // no module.id needed
|
|
364
|
-
/******/ // no module.loaded needed
|
|
365
|
-
/******/ exports: {}
|
|
366
|
-
/******/ };
|
|
367
|
-
/******/
|
|
368
|
-
/******/ // Execute the module function
|
|
369
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
370
|
-
/******/
|
|
371
|
-
/******/ // Return the exports of the module
|
|
372
|
-
/******/ return module.exports;
|
|
373
|
-
/******/ }
|
|
374
|
-
/******/
|
|
375
|
-
/************************************************************************/
|
|
376
|
-
/******/ /* webpack/runtime/compat get default export */
|
|
377
|
-
/******/ (() => {
|
|
378
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
379
|
-
/******/ __webpack_require__.n = (module) => {
|
|
380
|
-
/******/ var getter = module && module.__esModule ?
|
|
381
|
-
/******/ () => (module['default']) :
|
|
382
|
-
/******/ () => (module);
|
|
383
|
-
/******/ __webpack_require__.d(getter, { a: getter });
|
|
384
|
-
/******/ return getter;
|
|
385
|
-
/******/ };
|
|
386
|
-
/******/ })();
|
|
387
|
-
/******/
|
|
388
|
-
/******/ /* webpack/runtime/define property getters */
|
|
389
|
-
/******/ (() => {
|
|
390
|
-
/******/ // define getter functions for harmony exports
|
|
391
|
-
/******/ __webpack_require__.d = (exports, definition) => {
|
|
392
|
-
/******/ for(var key in definition) {
|
|
393
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
394
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
395
|
-
/******/ }
|
|
396
|
-
/******/ }
|
|
397
|
-
/******/ };
|
|
398
|
-
/******/ })();
|
|
399
|
-
/******/
|
|
400
|
-
/******/ /* webpack/runtime/global */
|
|
401
|
-
/******/ (() => {
|
|
402
|
-
/******/ __webpack_require__.g = (function() {
|
|
403
|
-
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
404
|
-
/******/ try {
|
|
405
|
-
/******/ return this || new Function('return this')();
|
|
406
|
-
/******/ } catch (e) {
|
|
407
|
-
/******/ if (typeof window === 'object') return window;
|
|
408
|
-
/******/ }
|
|
409
|
-
/******/ })();
|
|
410
|
-
/******/ })();
|
|
411
|
-
/******/
|
|
412
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
413
|
-
/******/ (() => {
|
|
414
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
415
|
-
/******/ })();
|
|
416
|
-
/******/
|
|
417
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
418
|
-
/******/ (() => {
|
|
419
|
-
/******/ // define __esModule on exports
|
|
420
|
-
/******/ __webpack_require__.r = (exports) => {
|
|
421
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
422
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
423
|
-
/******/ }
|
|
424
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
425
|
-
/******/ };
|
|
426
|
-
/******/ })();
|
|
427
|
-
/******/
|
|
428
|
-
/************************************************************************/
|
|
429
|
-
var __webpack_exports__ = {};
|
|
430
|
-
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
|
|
431
|
-
(() => {
|
|
432
|
-
/*!******************************!*\
|
|
433
|
-
!*** ./src/stlFileLoader.ts ***!
|
|
434
|
-
\******************************/
|
|
435
|
-
__webpack_require__.r(__webpack_exports__);
|
|
436
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
437
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
438
|
-
/* harmony export */ loaders: () => (/* reexport module object */ _lts_loaders_legacy_legacy_stlFileLoader__WEBPACK_IMPORTED_MODULE_0__)
|
|
439
|
-
/* harmony export */ });
|
|
440
|
-
/* harmony import */ var _lts_loaders_legacy_legacy_stlFileLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lts/loaders/legacy/legacy-stlFileLoader */ "../../../lts/loaders/src/legacy/legacy-stlFileLoader.ts");
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_lts_loaders_legacy_legacy_stlFileLoader__WEBPACK_IMPORTED_MODULE_0__);
|
|
444
|
-
|
|
445
|
-
})();
|
|
446
|
-
|
|
447
|
-
__webpack_exports__ = __webpack_exports__["default"];
|
|
448
|
-
/******/ return __webpack_exports__;
|
|
449
|
-
/******/ })()
|
|
450
|
-
;
|
|
451
|
-
});
|
|
452
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi5zdGxGaWxlTG9hZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBOzs7Ozs7Ozs7Ozs7Ozs7QUNHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUkE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFZQTs7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUE2T0E7QUFwT0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFPQTs7OztBQUlBO0FBQ0E7QUFzT0E7QUFBQTtBQWxRQTtBQW9RQTs7Ozs7Ozs7Ozs7Ozs7OztBQy9SQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7OztBQ2hCQTs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBOzs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE9BREVSUy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vTE9BREVSUy8uLi8uLi8uLi9kZXYvbG9hZGVycy9zcmMvU1RML2luZGV4LnRzIiwid2VicGFjazovL0xPQURFUlMvLi4vLi4vLi4vZGV2L2xvYWRlcnMvc3JjL1NUTC9zdGxGaWxlTG9hZGVyLm1ldGFkYXRhLnRzIiwid2VicGFjazovL0xPQURFUlMvLi4vLi4vLi4vZGV2L2xvYWRlcnMvc3JjL1NUTC9zdGxGaWxlTG9hZGVyLnRzIiwid2VicGFjazovL0xPQURFUlMvLi4vLi4vLi4vbHRzL2xvYWRlcnMvc3JjL2xlZ2FjeS9sZWdhY3ktc3RsRmlsZUxvYWRlci50cyIsIndlYnBhY2s6Ly9MT0FERVJTL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJCQUJZTE9OXCIsXCJjb21tb25qc1wiOlwiYmFieWxvbmpzXCIsXCJjb21tb25qczJcIjpcImJhYnlsb25qc1wiLFwiYW1kXCI6XCJiYWJ5bG9uanNcIn0iLCJ3ZWJwYWNrOi8vTE9BREVSUy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9MT0FERVJTL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0xPQURFUlMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0xPQURFUlMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9MT0FERVJTL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vTE9BREVSUy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0xPQURFUlMvLi9zcmMvc3RsRmlsZUxvYWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJiYWJ5bG9uanNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJiYWJ5bG9uanMtbG9hZGVyc1wiLCBbXCJiYWJ5bG9uanNcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiYmFieWxvbmpzLWxvYWRlcnNcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJiYWJ5bG9uanNcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkxPQURFUlNcIl0gPSBmYWN0b3J5KHJvb3RbXCJCQUJZTE9OXCJdKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdGhpcyksIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2JhYnlsb25qc19NaXNjX3Rvb2xzX18pID0+IHtcbnJldHVybiAiLCJleHBvcnQgKiBmcm9tIFwiLi9zdGxGaWxlTG9hZGVyXCI7XHJcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8taW50ZXJuYWwtbW9kdWxlc1xyXG5pbXBvcnQgdHlwZSB7IElTY2VuZUxvYWRlclBsdWdpbkV4dGVuc2lvbnMsIElTY2VuZUxvYWRlclBsdWdpbk1ldGFkYXRhIH0gZnJvbSBcImNvcmUvaW5kZXhcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBTVExGaWxlTG9hZGVyTWV0YWRhdGEgPSB7XHJcbiAgICBuYW1lOiBcInN0bFwiLFxyXG5cclxuICAgIGV4dGVuc2lvbnM6IHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICAgICAgXCIuc3RsXCI6IHsgaXNCaW5hcnk6IHRydWUgfSxcclxuICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIElTY2VuZUxvYWRlclBsdWdpbkV4dGVuc2lvbnMsXHJcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIElTY2VuZUxvYWRlclBsdWdpbk1ldGFkYXRhO1xyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cclxuaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSB9IGZyb20gXCJjb3JlL3R5cGVzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcImNvcmUvTWlzYy90b29sc1wiO1xyXG5pbXBvcnQgeyBWZXJ0ZXhCdWZmZXIgfSBmcm9tIFwiY29yZS9CdWZmZXJzL2J1ZmZlclwiO1xyXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0TWVzaCB9IGZyb20gXCJjb3JlL01lc2hlcy9hYnN0cmFjdE1lc2hcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCJjb3JlL01lc2hlcy9tZXNoXCI7XHJcbmltcG9ydCB0eXBlIHsgSVNjZW5lTG9hZGVyUGx1Z2luIH0gZnJvbSBcImNvcmUvTG9hZGluZy9zY2VuZUxvYWRlclwiO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNjZW5lTG9hZGVyUGx1Z2luIH0gZnJvbSBcImNvcmUvTG9hZGluZy9zY2VuZUxvYWRlclwiO1xyXG5pbXBvcnQgeyBBc3NldENvbnRhaW5lciB9IGZyb20gXCJjb3JlL2Fzc2V0Q29udGFpbmVyXCI7XHJcbmltcG9ydCB0eXBlIHsgU2NlbmUgfSBmcm9tIFwiY29yZS9zY2VuZVwiO1xyXG5pbXBvcnQgeyBTVExGaWxlTG9hZGVyTWV0YWRhdGEgfSBmcm9tIFwiLi9zdGxGaWxlTG9hZGVyLm1ldGFkYXRhXCI7XHJcbmltcG9ydCBcImNvcmUvTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWxcIjtcclxuXHJcbmRlY2xhcmUgbW9kdWxlIFwiY29yZS9Mb2FkaW5nL3NjZW5lTG9hZGVyXCIge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgU2NlbmVMb2FkZXJQbHVnaW5PcHRpb25zIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZpbmVzIG9wdGlvbnMgZm9yIHRoZSBzdGwgbG9hZGVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFtTVExGaWxlTG9hZGVyTWV0YWRhdGEubmFtZV06IHt9O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogU1RMIGZpbGUgdHlwZSBsb2FkZXIuXHJcbiAqIFRoaXMgaXMgYSBiYWJ5bG9uIHNjZW5lIGxvYWRlciBwbHVnaW4uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU1RMRmlsZUxvYWRlciBpbXBsZW1lbnRzIElTY2VuZUxvYWRlclBsdWdpbiB7XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwdWJsaWMgc29saWRQYXR0ZXJuID0gL3NvbGlkIChcXFMqKShbXFxTXFxzXSo/KWVuZHNvbGlkWyBdKihcXFMqKS9nO1xyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHB1YmxpYyBmYWNldHNQYXR0ZXJuID0gL2ZhY2V0KFtcXHNcXFNdKj8pZW5kZmFjZXQvZztcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHB1YmxpYyBub3JtYWxQYXR0ZXJuID0gL25vcm1hbFtcXHNdKyhbLStdP1swLTldK1xcLj9bMC05XSooW2VFXVstK10/WzAtOV0rKT8pK1tcXHNdKyhbLStdP1swLTldKlxcLj9bMC05XSsoW2VFXVstK10/WzAtOV0rKT8pK1tcXHNdKyhbLStdP1swLTldKlxcLj9bMC05XSsoW2VFXVstK10/WzAtOV0rKT8pKy9nO1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgcHVibGljIHZlcnRleFBhdHRlcm4gPSAvdmVydGV4W1xcc10rKFstK10/WzAtOV0rXFwuP1swLTldKihbZUVdWy0rXT9bMC05XSspPykrW1xcc10rKFstK10/WzAtOV0qXFwuP1swLTldKyhbZUVdWy0rXT9bMC05XSspPykrW1xcc10rKFstK10/WzAtOV0qXFwuP1swLTldKyhbZUVdWy0rXT9bMC05XSspPykrL2c7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gU1RMRmlsZUxvYWRlck1ldGFkYXRhLm5hbWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBleHRlbnNpb25zIHRoZSBzdGwgbG9hZGVyIGlzIGFibGUgdG8gbG9hZC5cclxuICAgICAqIGZvcmNlIGRhdGEgdG8gY29tZSBpbiBhcyBhbiBBcnJheUJ1ZmZlclxyXG4gICAgICogd2UnbGwgY29udmVydCB0byBzdHJpbmcgaWYgaXQgbG9va3MgbGlrZSBpdCdzIGFuIEFTQ0lJIC5zdGxcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGV4dGVuc2lvbnMgPSBTVExGaWxlTG9hZGVyTWV0YWRhdGEuZXh0ZW5zaW9ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgaWYgWSBhbmQgWiBheGVzIGFyZSBzd2FwcGVkIG9yIG5vdCB3aGVuIGxvYWRpbmcgYW4gU1RMIGZpbGUuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBmYWxzZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBXaGVuIHNldCB0b1xyXG4gICAgICogdHJ1ZSwgY29vcmRpbmF0ZXMgZnJvbSB0aGUgU1RMIGZpbGUgYXJlIHVzZWQgd2l0aG91dCBjaGFuZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgRE9fTk9UX0FMVEVSX0ZJTEVfQ09PUkRJTkFURVMgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9ydCBtZXNoZXMgaW50byBhIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIG1lc2hlc05hbWVzIEFuIGFycmF5IG9mIG1lc2ggbmFtZXMsIGEgc2luZ2xlIG1lc2ggbmFtZSwgb3IgZW1wdHkgc3RyaW5nIGZvciBhbGwgbWVzaGVzIHRoYXQgZmlsdGVyIHdoYXQgbWVzaGVzIGFyZSBpbXBvcnRlZFxyXG4gICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0byBpbXBvcnQgaW50b1xyXG4gICAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gaW1wb3J0XHJcbiAgICAgKiBAcGFyYW0gcm9vdFVybCBUaGUgcm9vdCB1cmwgZm9yIHNjZW5lIGFuZCByZXNvdXJjZXNcclxuICAgICAqIEBwYXJhbSBtZXNoZXMgVGhlIG1lc2hlcyBhcnJheSB0byBpbXBvcnQgaW50b1xyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBzdWNjZXNzZnVsIG9yIGZhbHNlIG90aGVyd2lzZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW1wb3J0TWVzaChtZXNoZXNOYW1lczogYW55LCBzY2VuZTogU2NlbmUsIGRhdGE6IGFueSwgcm9vdFVybDogc3RyaW5nLCBtZXNoZXM6IE51bGxhYmxlPEFic3RyYWN0TWVzaFtdPik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBtYXRjaGVzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQmluYXJ5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBiaW5hcnkgLnN0bFxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFieWxvbk1lc2ggPSBuZXcgTWVzaChcInN0bG1lc2hcIiwgc2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VCaW5hcnkoYmFieWxvbk1lc2gsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2hlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2hlcy5wdXNoKGJhYnlsb25NZXNoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBU0NJSSAuc3RsXHJcblxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIHN0cmluZ1xyXG4gICAgICAgICAgICBkYXRhID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vaWYgYXJyaXZlZCBoZXJlLCBkYXRhIGlzIGEgc3RyaW5nLCBjb250YWluaW5nIHRoZSBTVExBIGRhdGEuXHJcblxyXG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHRoaXMuc29saWRQYXR0ZXJuLmV4ZWMoZGF0YSkpKSB7XHJcbiAgICAgICAgICAgIGxldCBtZXNoTmFtZSA9IG1hdGNoZXNbMV07XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc2hOYW1lRnJvbUVuZCA9IG1hdGNoZXNbM107XHJcbiAgICAgICAgICAgIGlmIChtZXNoTmFtZUZyb21FbmQgJiYgbWVzaE5hbWUgIT0gbWVzaE5hbWVGcm9tRW5kKSB7XHJcbiAgICAgICAgICAgICAgICBUb29scy5FcnJvcihcIkVycm9yIGluIFNUTCwgc29saWQgbmFtZSAhPSBlbmRzb2xpZCBuYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjaGVjayBtZXNoZXNOYW1lc1xyXG4gICAgICAgICAgICBpZiAobWVzaGVzTmFtZXMgJiYgbWVzaE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNoZXNOYW1lcyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoZXNOYW1lcy5pbmRleE9mKG1lc2hOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNoTmFtZSAhPT0gbWVzaGVzTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzdGwgbWVzaCBuYW1lIGNhbiBiZSBlbXB0eSBhcyB3ZWxsXHJcbiAgICAgICAgICAgIG1lc2hOYW1lID0gbWVzaE5hbWUgfHwgXCJzdGxtZXNoXCI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiYWJ5bG9uTWVzaCA9IG5ldyBNZXNoKG1lc2hOYW1lLCBzY2VuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlQVNDSUkoYmFieWxvbk1lc2gsIG1hdGNoZXNbMl0pO1xyXG4gICAgICAgICAgICBpZiAobWVzaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoZXMucHVzaChiYWJ5bG9uTWVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBpbnRvIGEgc2NlbmUuXHJcbiAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxvYWQgaW50b1xyXG4gICAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gaW1wb3J0XHJcbiAgICAgKiBAcGFyYW0gcm9vdFVybCBUaGUgcm9vdCB1cmwgZm9yIHNjZW5lIGFuZCByZXNvdXJjZXNcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCBvciBmYWxzZSBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvYWQoc2NlbmU6IFNjZW5lLCBkYXRhOiBhbnksIHJvb3RVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaW1wb3J0TWVzaChudWxsLCBzY2VuZSwgZGF0YSwgcm9vdFVybCwgbnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWQgaW50byBhbiBhc3NldCBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxvYWQgaW50b1xyXG4gICAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gaW1wb3J0XHJcbiAgICAgKiBAcGFyYW0gcm9vdFVybCBUaGUgcm9vdCB1cmwgZm9yIHNjZW5lIGFuZCByZXNvdXJjZXNcclxuICAgICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgYXNzZXQgY29udGFpbmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2FkQXNzZXRDb250YWluZXIoc2NlbmU6IFNjZW5lLCBkYXRhOiBzdHJpbmcsIHJvb3RVcmw6IHN0cmluZyk6IEFzc2V0Q29udGFpbmVyIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBuZXcgQXNzZXRDb250YWluZXIoc2NlbmUpO1xyXG4gICAgICAgIHNjZW5lLl9ibG9ja0VudGl0eUNvbGxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0TWVzaChudWxsLCBzY2VuZSwgZGF0YSwgcm9vdFVybCwgY29udGFpbmVyLm1lc2hlcyk7XHJcbiAgICAgICAgc2NlbmUuX2Jsb2NrRW50aXR5Q29sbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNCaW5hcnkoZGF0YTogYW55KSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgZmlsZSBzaXplIGlzIGNvcnJlY3QgZm9yIGJpbmFyeSBzdGxcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRGF0YVZpZXcoZGF0YSk7XHJcblxyXG4gICAgICAgIC8vIEEgQmluYXJ5IFNUTCBoZWFkZXIgaXMgODAgYnl0ZXMsIGlmIHRoZSBkYXRhIHNpemUgaXMgbm90IGdyZWF0IHRoYW5cclxuICAgICAgICAvLyB0aGF0IHRoZW4gaXQncyBub3QgYSBiaW5hcnkgU1RMLlxyXG4gICAgICAgIGlmIChyZWFkZXIuYnl0ZUxlbmd0aCA8PSA4MCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmYWNlU2l6ZSA9ICgzMiAvIDgpICogMyArICgzMiAvIDgpICogMyAqIDMgKyAxNiAvIDg7XHJcbiAgICAgICAgY29uc3QgbkZhY2VzID0gcmVhZGVyLmdldFVpbnQzMig4MCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICg4MCArIDMyIC8gOCArIG5GYWNlcyAqIGZhY2VTaXplID09PSByZWFkZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVTLUFTQ0lJIGJlZ2luIHdpdGggJ3MnLCAnbycsICdsJywgJ2knLCAnZCdcclxuICAgICAgICBjb25zdCBhc2NpaSA9IFsxMTUsIDExMSwgMTA4LCAxMDUsIDEwMF07XHJcbiAgICAgICAgZm9yIChsZXQgb2ZmID0gMDsgb2ZmIDwgNTsgb2ZmKyspIHtcclxuICAgICAgICAgICAgaWYgKHJlYWRlci5nZXRVaW50OChvZmYpICE9PSBhc2NpaVtvZmZdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BhcnNlQmluYXJ5KG1lc2g6IE1lc2gsIGRhdGE6IEFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IERhdGFWaWV3KGRhdGEpO1xyXG4gICAgICAgIGNvbnN0IGZhY2VzID0gcmVhZGVyLmdldFVpbnQzMig4MCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFPZmZzZXQgPSA4NDtcclxuICAgICAgICBjb25zdCBmYWNlTGVuZ3RoID0gMTIgKiA0ICsgMjtcclxuXHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoZmFjZXMgKiAzICogMyk7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFscyA9IG5ldyBGbG9hdDMyQXJyYXkoZmFjZXMgKiAzICogMyk7XHJcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShmYWNlcyAqIDMpO1xyXG4gICAgICAgIGxldCBpbmRpY2VzQ291bnQgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmYWNlID0gMDsgZmFjZSA8IGZhY2VzOyBmYWNlKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBkYXRhT2Zmc2V0ICsgZmFjZSAqIGZhY2VMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbFggPSByZWFkZXIuZ2V0RmxvYXQzMihzdGFydCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbFkgPSByZWFkZXIuZ2V0RmxvYXQzMihzdGFydCArIDQsIHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxaID0gcmVhZGVyLmdldEZsb2F0MzIoc3RhcnQgKyA4LCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4c3RhcnQgPSBzdGFydCArIGkgKiAxMjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvcmRlcmluZyBpcyBpbnRlbnRpb25hbCB0byBtYXRjaCBhc2NpaSBpbXBvcnRcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tvZmZzZXRdID0gcmVhZGVyLmdldEZsb2F0MzIodmVydGV4c3RhcnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXRdID0gbm9ybWFsWDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIVNUTEZpbGVMb2FkZXIuRE9fTk9UX0FMVEVSX0ZJTEVfQ09PUkRJTkFURVMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgMl0gPSByZWFkZXIuZ2V0RmxvYXQzMih2ZXJ0ZXhzdGFydCArIDQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tvZmZzZXQgKyAxXSA9IHJlYWRlci5nZXRGbG9hdDMyKHZlcnRleHN0YXJ0ICsgOCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBub3JtYWxZO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMV0gPSBub3JtYWxaO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgMV0gPSByZWFkZXIuZ2V0RmxvYXQzMih2ZXJ0ZXhzdGFydCArIDQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tvZmZzZXQgKyAyXSA9IHJlYWRlci5nZXRGbG9hdDMyKHZlcnRleHN0YXJ0ICsgOCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMV0gPSBub3JtYWxZO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBub3JtYWxaO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG9mZnNldCArPSAzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoU1RMRmlsZUxvYWRlci5ET19OT1RfQUxURVJfRklMRV9DT09SRElOQVRFUykge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tpbmRpY2VzQ291bnRdID0gaW5kaWNlc0NvdW50O1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tpbmRpY2VzQ291bnQgKyAxXSA9IGluZGljZXNDb3VudCArIDI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW2luZGljZXNDb3VudCArIDJdID0gaW5kaWNlc0NvdW50ICsgMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNDb3VudCArPSAzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tpbmRpY2VzQ291bnRdID0gaW5kaWNlc0NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW2luZGljZXNDb3VudF0gPSBpbmRpY2VzQ291bnQrKztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbaW5kaWNlc0NvdW50XSA9IGluZGljZXNDb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShWZXJ0ZXhCdWZmZXIuUG9zaXRpb25LaW5kLCBwb3NpdGlvbnMpO1xyXG4gICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKFZlcnRleEJ1ZmZlci5Ob3JtYWxLaW5kLCBub3JtYWxzKTtcclxuICAgICAgICBtZXNoLnNldEluZGljZXMoaW5kaWNlcyk7XHJcbiAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFyc2VBU0NJSShtZXNoOiBNZXNoLCBzb2xpZERhdGE6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbHMgPSBbXTtcclxuICAgICAgICBjb25zdCBpbmRpY2VzID0gW107XHJcbiAgICAgICAgbGV0IGluZGljZXNDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIC8vbG9hZCBmYWNldHMsIGlnbm9yaW5nIGxvb3AgYXMgdGhlIHN0YW5kYXJkIGRvZXNuJ3QgZGVmaW5lIGl0IGNhbiBjb250YWluIG1vcmUgdGhhbiB2ZXJ0aWNlc1xyXG4gICAgICAgIGxldCBtYXRjaGVzO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHRoaXMuZmFjZXRzUGF0dGVybi5leGVjKHNvbGlkRGF0YSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhY2V0ID0gbWF0Y2hlc1sxXTtcclxuICAgICAgICAgICAgLy9vbmUgbm9ybWFsIHBlciBmYWNlXHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbE1hdGNoZXMgPSB0aGlzLm5vcm1hbFBhdHRlcm4uZXhlYyhmYWNldCk7XHJcbiAgICAgICAgICAgIHRoaXMubm9ybWFsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpZiAoIW5vcm1hbE1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbCA9IFtOdW1iZXIobm9ybWFsTWF0Y2hlc1sxXSksIE51bWJlcihub3JtYWxNYXRjaGVzWzVdKSwgTnVtYmVyKG5vcm1hbE1hdGNoZXNbM10pXTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2ZXJ0ZXhNYXRjaDtcclxuICAgICAgICAgICAgd2hpbGUgKCh2ZXJ0ZXhNYXRjaCA9IHRoaXMudmVydGV4UGF0dGVybi5leGVjKGZhY2V0KSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghU1RMRmlsZUxvYWRlci5ET19OT1RfQUxURVJfRklMRV9DT09SRElOQVRFUykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKE51bWJlcih2ZXJ0ZXhNYXRjaFsxXSksIE51bWJlcih2ZXJ0ZXhNYXRjaFs1XSksIE51bWJlcih2ZXJ0ZXhNYXRjaFszXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWxbMF0sIG5vcm1hbFsxXSwgbm9ybWFsWzJdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goTnVtYmVyKHZlcnRleE1hdGNoWzFdKSwgTnVtYmVyKHZlcnRleE1hdGNoWzNdKSwgTnVtYmVyKHZlcnRleE1hdGNoWzVdKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZsaXBwaW5nIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGNvbXBvbmVudCBiZWNhdXNlIGludmVydGVkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBub3JtYWwgd2FzIGRlY2xhcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWxbMF0sIG5vcm1hbFsyXSwgbm9ybWFsWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoU1RMRmlsZUxvYWRlci5ET19OT1RfQUxURVJfRklMRV9DT09SRElOQVRFUykge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGljZXNDb3VudCwgaW5kaWNlc0NvdW50ICsgMiwgaW5kaWNlc0NvdW50ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQ291bnQgKz0gMztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRpY2VzQ291bnQrKywgaW5kaWNlc0NvdW50KyssIGluZGljZXNDb3VudCsrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZlcnRleFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmFjZXRzUGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKFZlcnRleEJ1ZmZlci5Qb3NpdGlvbktpbmQsIHBvc2l0aW9ucyk7XHJcbiAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoVmVydGV4QnVmZmVyLk5vcm1hbEtpbmQsIG5vcm1hbHMpO1xyXG4gICAgICAgIG1lc2guc2V0SW5kaWNlcyhpbmRpY2VzKTtcclxuICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTtcclxuICAgIH1cclxufVxyXG5cclxuUmVnaXN0ZXJTY2VuZUxvYWRlclBsdWdpbihuZXcgU1RMRmlsZUxvYWRlcigpKTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXMgKi9cclxuaW1wb3J0ICogYXMgTG9hZGVycyBmcm9tIFwibG9hZGVycy9TVEwvaW5kZXhcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFVNRCBtb2R1bGUuXHJcbiAqIFRoZSBlbnRyeSBwb2ludCBmb3IgYSBmdXR1cmUgRVNNIHBhY2thZ2Ugc2hvdWxkIGJlIGluZGV4LnRzXHJcbiAqL1xyXG5jb25zdCBHbG9iYWxPYmplY3QgPSB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcclxuaWYgKHR5cGVvZiBHbG9iYWxPYmplY3QgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIExvYWRlcnMpIHtcclxuICAgICAgICBpZiAoISg8YW55Pkdsb2JhbE9iamVjdCkuQkFCWUxPTltrZXldKSB7XHJcbiAgICAgICAgICAgICg8YW55Pkdsb2JhbE9iamVjdCkuQkFCWUxPTltrZXldID0gKDxhbnk+TG9hZGVycylba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCAqIGZyb20gXCJsb2FkZXJzL1NUTC9pbmRleFwiO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfYmFieWxvbmpzX01pc2NfdG9vbHNfXzsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgKiBhcyBsb2FkZXJzIGZyb20gXCJAbHRzL2xvYWRlcnMvbGVnYWN5L2xlZ2FjeS1zdGxGaWxlTG9hZGVyXCI7XHJcbmV4cG9ydCB7IGxvYWRlcnMgfTtcclxuZXhwb3J0IGRlZmF1bHQgbG9hZGVycztcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("babylonjs")):"function"==typeof define&&define.amd?define("babylonjs-loaders",["babylonjs"],t):"object"==typeof exports?exports["babylonjs-loaders"]=t(require("babylonjs")):e.LOADERS=t(e.BABYLON)}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(e=>(()=>{"use strict";var t={597:t=>{t.exports=e}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};n.d(o,{default:()=>p});var i={};n.r(i),n.d(i,{STLFileLoader:()=>f});var s={};n.r(s),n.d(s,{STLFileLoader:()=>f});var a=n(597),l={".stl":{isBinary:!0}},f=function(){function e(){this.solidPattern=/solid (\S*)([\S\s]*?)endsolid[ ]*(\S*)/g,this.facetsPattern=/facet([\s\S]*?)endfacet/g,this.normalPattern=/normal[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g,this.vertexPattern=/vertex[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g,this.name="stl",this.extensions=l}return e.prototype.importMesh=function(e,t,r,n,o){var i;if("string"!=typeof r){if(this._isBinary(r)){var s=new a.Mesh("stlmesh",t);return this._parseBinary(s,r),o&&o.push(s),!0}r=(new TextDecoder).decode(new Uint8Array(r))}for(;i=this.solidPattern.exec(r);){var l=i[1],f=i[3];if(f&&l!=f)return a.Tools.Error("Error in STL, solid name != endsolid name"),!1;if(e&&l)if(e instanceof Array){if(!e.indexOf(l))continue}else if(l!==e)continue;l=l||"stlmesh",s=new a.Mesh(l,t),this._parseASCII(s,i[2]),o&&o.push(s)}return!0},e.prototype.load=function(e,t,r){return this.importMesh(null,e,t,r,null)},e.prototype.loadAssetContainer=function(e,t,r){var n=new a.AssetContainer(e);return e._blockEntityCollection=!0,this.importMesh(null,e,t,r,n.meshes),e._blockEntityCollection=!1,n},e.prototype._isBinary=function(e){var t=new DataView(e);if(t.byteLength<=80)return!1;if(84+50*t.getUint32(80,!0)===t.byteLength)return!0;for(var r=[115,111,108,105,100],n=0;n<5;n++)if(t.getUint8(n)!==r[n])return!0;return!1},e.prototype._parseBinary=function(t,r){for(var n=new DataView(r),o=n.getUint32(80,!0),i=0,s=new Float32Array(3*o*3),l=new Float32Array(3*o*3),f=new Uint32Array(3*o),u=0,d=0;d<o;d++){for(var p=84+50*d,c=n.getFloat32(p,!0),y=n.getFloat32(p+4,!0),h=n.getFloat32(p+8,!0),b=1;b<=3;b++){var m=p+12*b;s[i]=n.getFloat32(m,!0),l[i]=c,e.DO_NOT_ALTER_FILE_COORDINATES?(s[i+1]=n.getFloat32(m+4,!0),s[i+2]=n.getFloat32(m+8,!0),l[i+1]=y,l[i+2]=h):(s[i+2]=n.getFloat32(m+4,!0),s[i+1]=n.getFloat32(m+8,!0),l[i+2]=y,l[i+1]=h),i+=3}e.DO_NOT_ALTER_FILE_COORDINATES?(f[u]=u,f[u+1]=u+2,f[u+2]=u+1,u+=3):(f[u]=u++,f[u]=u++,f[u]=u++)}t.setVerticesData(a.VertexBuffer.PositionKind,s),t.setVerticesData(a.VertexBuffer.NormalKind,l),t.setIndices(f),t.computeWorldMatrix(!0)},e.prototype._parseASCII=function(t,r){for(var n,o=[],i=[],s=[],l=0;n=this.facetsPattern.exec(r);){var f=n[1],u=this.normalPattern.exec(f);if(this.normalPattern.lastIndex=0,u){for(var d=[Number(u[1]),Number(u[5]),Number(u[3])],p=void 0;p=this.vertexPattern.exec(f);)e.DO_NOT_ALTER_FILE_COORDINATES?(o.push(Number(p[1]),Number(p[3]),Number(p[5])),i.push(d[0],d[2],d[1])):(o.push(Number(p[1]),Number(p[5]),Number(p[3])),i.push(d[0],d[1],d[2]));e.DO_NOT_ALTER_FILE_COORDINATES?(s.push(l,l+2,l+1),l+=3):s.push(l++,l++,l++),this.vertexPattern.lastIndex=0}}this.facetsPattern.lastIndex=0,t.setVerticesData(a.VertexBuffer.PositionKind,o),t.setVerticesData(a.VertexBuffer.NormalKind,i),t.setIndices(s),t.computeWorldMatrix(!0)},e.DO_NOT_ALTER_FILE_COORDINATES=!1,e}();(0,a.RegisterSceneLoaderPlugin)(new f);var u=void 0!==n.g?n.g:"undefined"!=typeof window?window:void 0;if(void 0!==u)for(var d in i)u.BABYLON[d]||(u.BABYLON[d]=i[d]);const p=s;return o.default})()));
|
|
2
|
+
//# sourceMappingURL=babylon.stlFileLoader.min.js.map
|
package/babylonjs.loaders.d.ts
CHANGED
|
@@ -3804,6 +3804,7 @@ declare module BABYLON.GLTF2.Loader.Extensions {
|
|
|
3804
3804
|
- Is Not a Number (`math/isnan`) FlowGraphBlockNames.IsNaN
|
|
3805
3805
|
- Is Infinity (`math/isinf`) FlowGraphBlockNames.IsInfinity
|
|
3806
3806
|
- Select (`math/select`) FlowGraphBlockNames.Conditional
|
|
3807
|
+
- Switch (`math/switch`) FlowGraphBlockNames.DataSwitch
|
|
3807
3808
|
- Random (`math/random`) FlowGraphBlockNames.Random
|
|
3808
3809
|
5. **Angle and Trigonometry Nodes**
|
|
3809
3810
|
- Degrees-To-Radians (`math/rad`) FlowGraphBlockNames.DegToRad
|
|
@@ -3843,14 +3844,23 @@ declare module BABYLON.GLTF2.Loader.Extensions {
|
|
|
3843
3844
|
- Determinant (`math/determinant`) FlowGraphBlockNames.Determinant
|
|
3844
3845
|
- Inverse (`math/inverse`) FlowGraphBlockNames.InvertMatrix
|
|
3845
3846
|
- Multiplication (`math/matmul`) FlowGraphBlockNames.MatrixMultiplication
|
|
3846
|
-
|
|
3847
|
+
- Compose (`math/matCompose`) FlowGraphBlockNames.MatrixCompose
|
|
3848
|
+
- Decompose (`math/matDecompose`) FlowGraphBlockNames.MatrixDecompose
|
|
3849
|
+
10. **Quaternion Nodes**
|
|
3850
|
+
- Conjugate (`math/quatConjugate`) FlowGraphBlockNames.Conjugate
|
|
3851
|
+
- Multiplication (`math/quatMul`) FlowGraphBlockNames.Multiply
|
|
3852
|
+
- Angle Between Quaternions (`math/quatAngleBetween`) FlowGraphBlockNames.AngleBetween
|
|
3853
|
+
- Quaternion From Axis Angle (`math/quatFromAxisAngle`) FlowGraphBlockNames.QuaternionFromAxisAngle
|
|
3854
|
+
- Quaternion To Axis Angle (`math/quatToAxisAngle`) FlowGraphBlockNames.QuaternionToAxisAngle
|
|
3855
|
+
- Quaternion From Two Directional Vectors (`math/quatFromDirections`) FlowGraphBlockNames.QuaternionFromDirections
|
|
3856
|
+
11. **Swizzle Nodes**
|
|
3847
3857
|
- Combine (`math/combine2`, `math/combine3`, `math/combine4`, `math/combine2x2`, `math/combine3x3`, `math/combine4x4`)
|
|
3848
3858
|
FlowGraphBlockNames.CombineVector2, FlowGraphBlockNames.CombineVector3, FlowGraphBlockNames.CombineVector4
|
|
3849
3859
|
FlowGraphBlockNames.CombineMatrix2D, FlowGraphBlockNames.CombineMatrix3D, FlowGraphBlockNames.CombineMatrix
|
|
3850
3860
|
- Extract (`math/extract2`, `math/extract3`, `math/extract4`, `math/extract2x2`, `math/extract3x3`, `math/extract4x4`)
|
|
3851
3861
|
FlowGraphBlockNames.ExtractVector2, FlowGraphBlockNames.ExtractVector3, FlowGraphBlockNames.ExtractVector4
|
|
3852
3862
|
FlowGraphBlockNames.ExtractMatrix2D, FlowGraphBlockNames.ExtractMatrix3D, FlowGraphBlockNames.ExtractMatrix
|
|
3853
|
-
|
|
3863
|
+
12. **Integer Arithmetic Nodes**
|
|
3854
3864
|
- Absolute Value (`math/abs`) FlowGraphBlockNames.Abs
|
|
3855
3865
|
- Sign (`math/sign`) FlowGraphBlockNames.Sign
|
|
3856
3866
|
- Negation (`math/neg`) FlowGraphBlockNames.Negation
|
|
@@ -3862,13 +3872,13 @@ declare module BABYLON.GLTF2.Loader.Extensions {
|
|
|
3862
3872
|
- Minimum (`math/min`) FlowGraphBlockNames.Min
|
|
3863
3873
|
- Maximum (`math/max`) FlowGraphBlockNames.Max
|
|
3864
3874
|
- Clamp (`math/clamp`) FlowGraphBlockNames.Clamp
|
|
3865
|
-
|
|
3875
|
+
13. **Integer Comparison Nodes**
|
|
3866
3876
|
- Equality (`math/eq`) FlowGraphBlockNames.Equality
|
|
3867
3877
|
- Less Than (`math/lt`) FlowGraphBlockNames.LessThan
|
|
3868
3878
|
- Less Than Or Equal To (`math/le`) FlowGraphBlockNames.LessThanOrEqual
|
|
3869
3879
|
- Greater Than (`math/gt`) FlowGraphBlockNames.GreaterThan
|
|
3870
3880
|
- Greater Than Or Equal To (`math/ge`) FlowGraphBlockNames.GreaterThanOrEqual
|
|
3871
|
-
|
|
3881
|
+
14. **Integer Bitwise Nodes**
|
|
3872
3882
|
- Bitwise NOT (`math/not`) FlowGraphBlockNames.BitwiseNot
|
|
3873
3883
|
- Bitwise AND (`math/and`) FlowGraphBlockNames.BitwiseAnd
|
|
3874
3884
|
- Bitwise OR (`math/or`) FlowGraphBlockNames.BitwiseOr
|
|
@@ -3878,7 +3888,7 @@ declare module BABYLON.GLTF2.Loader.Extensions {
|
|
|
3878
3888
|
- Count Leading Zeros (`math/clz`) FlowGraphBlockNames.LeadingZeros
|
|
3879
3889
|
- Count Trailing Zeros (`math/ctz`) FlowGraphBlockNames.TrailingZeros
|
|
3880
3890
|
- Count One Bits (`math/popcnt`) FlowGraphBlockNames.OneBitsCounter
|
|
3881
|
-
|
|
3891
|
+
15. **Boolean Arithmetic Nodes**
|
|
3882
3892
|
- Equality (`math/eq`) FlowGraphBlockNames.Equality
|
|
3883
3893
|
- Boolean NOT (`math/not`) FlowGraphBlockNames.BitwiseNot
|
|
3884
3894
|
- Boolean AND (`math/and`) FlowGraphBlockNames.BitwiseAnd
|