@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
4,691 lines (4,690 loc) • 37.2 kB
JavaScript
"use strict";
import { BufferAttribute } from "three";
import { BufferGeometry } from "three";
import { Color } from "three";
const vlist = new Float32Array(12 * 3);
const nlist = new Float32Array(12 * 3);
const clist = new Float32Array(12 * 3);
function lerp(a, b, t) {
return a + (b - a) * t;
}
class MarchingCubes extends BufferGeometry {
constructor(resolution, enableUvs, enableColors) {
super();
this.resolution = resolution;
this.isMarchingCubes = true;
this.isolation = 80;
this.size = -1;
this.size2 = -1;
this.size3 = -1;
this.halfsize = -1;
this.delta = -1;
this.yd = -1;
this.zd = -1;
this.count = -1;
this.maxCount = -1;
this.enableUvs = enableUvs !== void 0 ? enableUvs : false;
this.enableColors = enableColors !== void 0 ? enableColors : false;
this.size = this.resolution;
this.size2 = this.size * this.size;
this.size3 = this.size2 * this.size;
this.halfsize = this.size / 2;
this.delta = 2 / this.size;
this.yd = this.size;
this.zd = this.size2;
this.field = new Float32Array(this.size3);
this.normal_cache = new Float32Array(this.size3 * 3);
this.palette = new Float32Array(this.size3 * 3);
this.maxCount = this.size3;
this.count = 0;
this.positionArray = new Float32Array(this.maxCount * 3);
this.setAttribute("position", new BufferAttribute(this.positionArray, 3));
this.normalArray = new Float32Array(this.maxCount * 3);
this.setAttribute("normal", new BufferAttribute(this.normalArray, 3));
if (this.enableUvs) {
this.uvArray = new Float32Array(this.maxCount * 2);
this.setAttribute("uv", new BufferAttribute(this.uvArray, 2));
}
if (this.enableColors) {
this.colorArray = new Float32Array(this.maxCount * 3);
this.setAttribute("color", new BufferAttribute(this.colorArray, 3));
}
const polygonize = (fx, fy, fz, q, isol) => {
const q1 = q + 1, qy = q + this.yd, qz = q + this.zd, q1y = q1 + this.yd, q1z = q1 + this.zd, qyz = q + this.yd + this.zd, q1yz = q1 + this.yd + this.zd;
let cubeindex = 0;
const field0 = this.field[q], field1 = this.field[q1], field2 = this.field[qy], field3 = this.field[q1y], field4 = this.field[qz], field5 = this.field[q1z], field6 = this.field[qyz], field7 = this.field[q1yz];
if (field0 < isol)
cubeindex |= 1;
if (field1 < isol)
cubeindex |= 2;
if (field2 < isol)
cubeindex |= 8;
if (field3 < isol)
cubeindex |= 4;
if (field4 < isol)
cubeindex |= 16;
if (field5 < isol)
cubeindex |= 32;
if (field6 < isol)
cubeindex |= 128;
if (field7 < isol)
cubeindex |= 64;
const bits = edgeTable[cubeindex];
if (bits === 0)
return 0;
const d = this.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d;
if (bits & 1) {
compNorm(q);
compNorm(q1);
VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1);
}
if (bits & 2) {
compNorm(q1);
compNorm(q1y);
VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y);
}
if (bits & 4) {
compNorm(qy);
compNorm(q1y);
VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y);
}
if (bits & 8) {
compNorm(q);
compNorm(qy);
VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy);
}
if (bits & 16) {
compNorm(qz);
compNorm(q1z);
VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z);
}
if (bits & 32) {
compNorm(q1z);
compNorm(q1yz);
VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz);
}
if (bits & 64) {
compNorm(qyz);
compNorm(q1yz);
VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz);
}
if (bits & 128) {
compNorm(qz);
compNorm(qyz);
VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz);
}
if (bits & 256) {
compNorm(q);
compNorm(qz);
VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz);
}
if (bits & 512) {
compNorm(q1);
compNorm(q1z);
VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z);
}
if (bits & 1024) {
compNorm(q1y);
compNorm(q1yz);
VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz);
}
if (bits & 2048) {
compNorm(qy);
compNorm(qyz);
VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz);
}
cubeindex <<= 4;
let o1, o2, o3, numtris = 0, i = 0;
while (triTable[cubeindex + i] != -1) {
o1 = cubeindex + i;
o2 = o1 + 1;
o3 = o1 + 2;
posnormtriv(
vlist,
nlist,
clist,
3 * triTable[o1],
3 * triTable[o2],
3 * triTable[o3]
/*, renderCallback*/
);
i += 3;
numtris++;
}
return numtris;
};
this._createPolygons = () => {
const smin2 = this.size - 2;
for (let z = 1; z < smin2; z++) {
const z_offset = this.size2 * z;
const fz = (z - this.halfsize) / this.halfsize;
for (let y = 1; y < smin2; y++) {
const y_offset = z_offset + this.size * y;
const fy = (y - this.halfsize) / this.halfsize;
for (let x = 1; x < smin2; x++) {
const fx = (x - this.halfsize) / this.halfsize;
const q = y_offset + x;
polygonize(
fx,
fy,
fz,
q,
this.isolation
/*, renderCallback*/
);
}
}
}
};
const VIntX = (q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) => {
const mu = (isol - valp1) / (valp2 - valp1), nc = this.normal_cache;
vlist[offset + 0] = x + mu * this.delta;
vlist[offset + 1] = y;
vlist[offset + 2] = z;
nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu);
nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu);
nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu);
clist[offset + 0] = lerp(this.palette[c_offset1 * 3 + 0], this.palette[c_offset2 * 3 + 0], mu);
clist[offset + 1] = lerp(this.palette[c_offset1 * 3 + 1], this.palette[c_offset2 * 3 + 1], mu);
clist[offset + 2] = lerp(this.palette[c_offset1 * 3 + 2], this.palette[c_offset2 * 3 + 2], mu);
};
const VIntY = (q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) => {
const mu = (isol - valp1) / (valp2 - valp1), nc = this.normal_cache;
vlist[offset + 0] = x;
vlist[offset + 1] = y + mu * this.delta;
vlist[offset + 2] = z;
const q2 = q + this.yd * 3;
nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);
nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);
nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);
clist[offset + 0] = lerp(this.palette[c_offset1 * 3 + 0], this.palette[c_offset2 * 3 + 0], mu);
clist[offset + 1] = lerp(this.palette[c_offset1 * 3 + 1], this.palette[c_offset2 * 3 + 1], mu);
clist[offset + 2] = lerp(this.palette[c_offset1 * 3 + 2], this.palette[c_offset2 * 3 + 2], mu);
};
const VIntZ = (q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) => {
const mu = (isol - valp1) / (valp2 - valp1), nc = this.normal_cache;
vlist[offset + 0] = x;
vlist[offset + 1] = y;
vlist[offset + 2] = z + mu * this.delta;
const q2 = q + this.zd * 3;
nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);
nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);
nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);
clist[offset + 0] = lerp(this.palette[c_offset1 * 3 + 0], this.palette[c_offset2 * 3 + 0], mu);
clist[offset + 1] = lerp(this.palette[c_offset1 * 3 + 1], this.palette[c_offset2 * 3 + 1], mu);
clist[offset + 2] = lerp(this.palette[c_offset1 * 3 + 2], this.palette[c_offset2 * 3 + 2], mu);
};
const compNorm = (q) => {
const q3 = q * 3;
if (this.normal_cache[q3] === 0) {
this.normal_cache[q3 + 0] = this.field[q - 1] - this.field[q + 1];
this.normal_cache[q3 + 1] = this.field[q - this.yd] - this.field[q + this.yd];
this.normal_cache[q3 + 2] = this.field[q - this.zd] - this.field[q + this.zd];
}
};
const posnormtriv = (pos, norm, colors, o1, o2, o3) => {
const c = this.count * 3;
if (!this.positionArray) {
return;
}
if (!this.normalArray) {
return;
}
this.positionArray[c + 0] = pos[o1];
this.positionArray[c + 1] = pos[o1 + 1];
this.positionArray[c + 2] = pos[o1 + 2];
this.positionArray[c + 3] = pos[o2];
this.positionArray[c + 4] = pos[o2 + 1];
this.positionArray[c + 5] = pos[o2 + 2];
this.positionArray[c + 6] = pos[o3];
this.positionArray[c + 7] = pos[o3 + 1];
this.positionArray[c + 8] = pos[o3 + 2];
this.normalArray[c + 0] = norm[o1 + 0];
this.normalArray[c + 1] = norm[o1 + 1];
this.normalArray[c + 2] = norm[o1 + 2];
this.normalArray[c + 3] = norm[o2 + 0];
this.normalArray[c + 4] = norm[o2 + 1];
this.normalArray[c + 5] = norm[o2 + 2];
this.normalArray[c + 6] = norm[o3 + 0];
this.normalArray[c + 7] = norm[o3 + 1];
this.normalArray[c + 8] = norm[o3 + 2];
if (this.enableUvs && this.uvArray) {
const d = this.count * 2;
this.uvArray[d + 0] = pos[o1 + 0];
this.uvArray[d + 1] = pos[o1 + 2];
this.uvArray[d + 2] = pos[o2 + 0];
this.uvArray[d + 3] = pos[o2 + 2];
this.uvArray[d + 4] = pos[o3 + 0];
this.uvArray[d + 5] = pos[o3 + 2];
}
if (this.enableColors && this.colorArray) {
this.colorArray[c + 0] = colors[o1 + 0];
this.colorArray[c + 1] = colors[o1 + 1];
this.colorArray[c + 2] = colors[o1 + 2];
this.colorArray[c + 3] = colors[o2 + 0];
this.colorArray[c + 4] = colors[o2 + 1];
this.colorArray[c + 5] = colors[o2 + 2];
this.colorArray[c + 6] = colors[o3 + 0];
this.colorArray[c + 7] = colors[o3 + 1];
this.colorArray[c + 8] = colors[o3 + 2];
}
this.count += 3;
};
}
createPolygons() {
this._createPolygons();
}
addBall(ballx, bally, ballz, strength, subtract, colors) {
const sign = Math.sign(strength);
strength = Math.abs(strength);
const userDefineColor = !(colors === void 0 || colors === null);
let ballColor = new Color(ballx, bally, ballz);
if (userDefineColor) {
try {
if (colors)
ballColor = colors;
} catch (err) {
ballColor = new Color(ballx, bally, ballz);
}
}
const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size;
let min_z = Math.floor(zs - radius);
if (min_z < 1)
min_z = 1;
let max_z = Math.floor(zs + radius);
if (max_z > this.size - 1)
max_z = this.size - 1;
let min_y = Math.floor(ys - radius);
if (min_y < 1)
min_y = 1;
let max_y = Math.floor(ys + radius);
if (max_y > this.size - 1)
max_y = this.size - 1;
let min_x = Math.floor(xs - radius);
if (min_x < 1)
min_x = 1;
let max_x = Math.floor(xs + radius);
if (max_x > this.size - 1)
max_x = this.size - 1;
let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;
for (z = min_z; z < max_z; z++) {
z_offset = this.size2 * z;
fz = z / this.size - ballz;
fz2 = fz * fz;
for (y = min_y; y < max_y; y++) {
y_offset = z_offset + this.size * y;
fy = y / this.size - bally;
fy2 = fy * fy;
for (x = min_x; x < max_x; x++) {
fx = x / this.size - ballx;
val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract;
if (val > 0) {
this.field[y_offset + x] += val * sign;
const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius;
const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10);
this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib;
this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib;
this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib;
}
}
}
}
}
}
const edgeTable = new Int32Array([
0,
265,
515,
778,
1030,
1295,
1541,
1804,
2060,
2309,
2575,
2822,
3082,
3331,
3593,
3840,
400,
153,
915,
666,
1430,
1183,
1941,
1692,
2460,
2197,
2975,
2710,
3482,
3219,
3993,
3728,
560,
825,
51,
314,
1590,
1855,
1077,
1340,
2620,
2869,
2111,
2358,
3642,
3891,
3129,
3376,
928,
681,
419,
170,
1958,
1711,
1445,
1196,
2988,
2725,
2479,
2214,
4010,
3747,
3497,
3232,
1120,
1385,
1635,
1898,
102,
367,
613,
876,
3180,
3429,
3695,
3942,
2154,
2403,
2665,
2912,
1520,
1273,
2035,
1786,
502,
255,
1013,
764,
3580,
3317,
4095,
3830,
2554,
2291,
3065,
2800,
1616,
1881,
1107,
1370,
598,
863,
85,
348,
3676,
3925,
3167,
3414,
2650,
2899,
2137,
2384,
1984,
1737,
1475,
1226,
966,
719,
453,
204,
4044,
3781,
3535,
3270,
3018,
2755,
2505,
2240,
2240,
2505,
2755,
3018,
3270,
3535,
3781,
4044,
204,
453,
719,
966,
1226,
1475,
1737,
1984,
2384,
2137,
2899,
2650,
3414,
3167,
3925,
3676,
348,
85,
863,
598,
1370,
1107,
1881,
1616,
2800,
3065,
2291,
2554,
3830,
4095,
3317,
3580,
764,
1013,
255,
502,
1786,
2035,
1273,
1520,
2912,
2665,
2403,
2154,
3942,
3695,
3429,
3180,
876,
613,
367,
102,
1898,
1635,
1385,
1120,
3232,
3497,
3747,
4010,
2214,
2479,
2725,
2988,
1196,
1445,
1711,
1958,
170,
419,
681,
928,
3376,
3129,
3891,
3642,
2358,
2111,
2869,
2620,
1340,
1077,
1855,
1590,
314,
51,
825,
560,
3728,
3993,
3219,
3482,
2710,
2975,
2197,
2460,
1692,
1941,
1183,
1430,
666,
915,
153,
400,
3840,
3593,
3331,
3082,
2822,
2575,
2309,
2060,
1804,
1541,
1295,
1030,
778,
515,
265,
0
]);
const triTable = new Int32Array([
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
8,
3,
9,
8,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
1,
2,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
2,
10,
0,
2,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
8,
3,
2,
10,
8,
10,
9,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
11,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
11,
2,
8,
11,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
9,
0,
2,
3,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
11,
2,
1,
9,
11,
9,
8,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
10,
1,
11,
10,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
10,
1,
0,
8,
10,
8,
11,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
9,
0,
3,
11,
9,
11,
10,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
8,
10,
10,
8,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
7,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
3,
0,
7,
3,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
9,
8,
4,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
1,
9,
4,
7,
1,
7,
3,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
8,
4,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
4,
7,
3,
0,
4,
1,
2,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
2,
10,
9,
0,
2,
8,
4,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
10,
9,
2,
9,
7,
2,
7,
3,
7,
9,
4,
-1,
-1,
-1,
-1,
8,
4,
7,
3,
11,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
4,
7,
11,
2,
4,
2,
0,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
0,
1,
8,
4,
7,
2,
3,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
7,
11,
9,
4,
11,
9,
11,
2,
9,
2,
1,
-1,
-1,
-1,
-1,
3,
10,
1,
3,
11,
10,
7,
8,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
11,
10,
1,
4,
11,
1,
0,
4,
7,
11,
4,
-1,
-1,
-1,
-1,
4,
7,
8,
9,
0,
11,
9,
11,
10,
11,
0,
3,
-1,
-1,
-1,
-1,
4,
7,
11,
4,
11,
9,
9,
11,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
5,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
5,
4,
0,
8,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
5,
4,
1,
5,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
5,
4,
8,
3,
5,
3,
1,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
9,
5,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
0,
8,
1,
2,
10,
4,
9,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
2,
10,
5,
4,
2,
4,
0,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
10,
5,
3,
2,
5,
3,
5,
4,
3,
4,
8,
-1,
-1,
-1,
-1,
9,
5,
4,
2,
3,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
11,
2,
0,
8,
11,
4,
9,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
5,
4,
0,
1,
5,
2,
3,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
1,
5,
2,
5,
8,
2,
8,
11,
4,
8,
5,
-1,
-1,
-1,
-1,
10,
3,
11,
10,
1,
3,
9,
5,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
9,
5,
0,
8,
1,
8,
10,
1,
8,
11,
10,
-1,
-1,
-1,
-1,
5,
4,
0,
5,
0,
11,
5,
11,
10,
11,
0,
3,
-1,
-1,
-1,
-1,
5,
4,
8,
5,
8,
10,
10,
8,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
7,
8,
5,
7,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
3,
0,
9,
5,
3,
5,
7,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
7,
8,
0,
1,
7,
1,
5,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
5,
3,
3,
5,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
7,
8,
9,
5,
7,
10,
1,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
1,
2,
9,
5,
0,
5,
3,
0,
5,
7,
3,
-1,
-1,
-1,
-1,
8,
0,
2,
8,
2,
5,
8,
5,
7,
10,
5,
2,
-1,
-1,
-1,
-1,
2,
10,
5,
2,
5,
3,
3,
5,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
9,
5,
7,
8,
9,
3,
11,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
5,
7,
9,
7,
2,
9,
2,
0,
2,
7,
11,
-1,
-1,
-1,
-1,
2,
3,
11,
0,
1,
8,
1,
7,
8,
1,
5,
7,
-1,
-1,
-1,
-1,
11,
2,
1,
11,
1,
7,
7,
1,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
5,
8,
8,
5,
7,
10,
1,
3,
10,
3,
11,
-1,
-1,
-1,
-1,
5,
7,
0,
5,
0,
9,
7,
11,
0,
1,
0,
10,
11,
10,
0,
-1,
11,
10,
0,
11,
0,
3,
10,
5,
0,
8,
0,
7,
5,
7,
0,
-1,
11,
10,
5,
7,
11,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
6,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
5,
10,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
0,
1,
5,
10,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
8,
3,
1,
9,
8,
5,
10,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
6,
5,
2,
6,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
6,
5,
1,
2,
6,
3,
0,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
6,
5,
9,
0,
6,
0,
2,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
9,
8,
5,
8,
2,
5,
2,
6,
3,
2,
8,
-1,
-1,
-1,
-1,
2,
3,
11,
10,
6,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
0,
8,
11,
2,
0,
10,
6,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
9,
2,
3,
11,
5,
10,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
10,
6,
1,
9,
2,
9,
11,
2,
9,
8,
11,
-1,
-1,
-1,
-1,
6,
3,
11,
6,
5,
3,
5,
1,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
11,
0,
11,
5,
0,
5,
1,
5,
11,
6,
-1,
-1,
-1,
-1,
3,
11,
6,
0,
3,
6,
0,
6,
5,
0,
5,
9,
-1,
-1,
-1,
-1,
6,
5,
9,
6,
9,
11,
11,
9,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
10,
6,
4,
7,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
3,
0,
4,
7,
3,
6,
5,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
9,
0,
5,
10,
6,
8,
4,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
6,
5,
1,
9,
7,
1,
7,
3,
7,
9,
4,
-1,
-1,
-1,
-1,
6,
1,
2,
6,
5,
1,
4,
7,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
5,
5,
2,
6,
3,
0,
4,
3,
4,
7,
-1,
-1,
-1,
-1,
8,
4,
7,
9,
0,
5,
0,
6,
5,
0,
2,
6,
-1,
-1,
-1,
-1,
7,
3,
9,
7,
9,
4,
3,
2,
9,
5,
9,
6,
2,
6,
9,
-1,
3,
11,
2,
7,
8,
4,
10,
6,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
10,
6,
4,
7,
2,
4,
2,
0,
2,
7,
11,
-1,
-1,
-1,
-1,
0,
1,
9,
4,
7,
8,
2,
3,
11,
5,
10,
6,
-1,
-1,
-1,
-1,
9,
2,
1,
9,
11,
2,
9,
4,
11,
7,
11,
4,
5,
10,
6,
-1,
8,
4,
7,
3,
11,
5,
3,
5,
1,
5,
11,
6,
-1,
-1,
-1,
-1,
5,
1,
11,
5,
11,
6,
1,
0,
11,
7,
11,
4,
0,
4,
11,
-1,
0,
5,
9,
0,
6,
5,
0,
3,
6,
11,
6,
3,
8,
4,
7,
-1,
6,
5,
9,
6,
9,
11,
4,
7,
9,
7,
11,
9,
-1,
-1,
-1,
-1,
10,
4,
9,
6,
4,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
10,
6,
4,
9,
10,
0,
8,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
0,
1,
10,
6,
0,
6,
4,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
3,
1,
8,
1,
6,
8,
6,
4,
6,
1,
10,
-1,
-1,
-1,
-1,
1,
4,
9,
1,
2,
4,
2,
6,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
0,
8,
1,
2,
9,
2,
4,
9,
2,
6,
4,
-1,
-1,
-1,
-1,
0,
2,
4,
4,
2,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
3,
2,
8,
2,
4,
4,
2,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
4,
9,
10,
6,
4,
11,
2,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
2,
2,
8,
11,
4,
9,
10,
4,
10,
6,
-1,
-1,
-1,
-1,
3,
11,
2,
0,
1,
6,
0,
6,
4,
6,
1,
10,
-1,
-1,
-1,
-1,
6,
4,
1,
6,
1,
10,
4,
8,
1,
2,
1,
11,
8,
11,
1,
-1,
9,
6,
4,
9,
3,
6,
9,
1,
3,
11,
6,
3,
-1,
-1,
-1,
-1,
8,
11,
1,
8,
1,
0,
11,
6,
1,
9,
1,
4,
6,
4,
1,
-1,
3,
11,
6,
3,
6,
0,
0,
6,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
6,
4,
8,
11,
6,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
10,
6,
7,
8,
10,
8,
9,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
7,
3,
0,
10,
7,
0,
9,
10,
6,
7,
10,
-1,
-1,
-1,
-1,
10,
6,
7,
1,
10,
7,
1,
7,
8,
1,
8,
0,
-1,
-1,
-1,
-1,
10,
6,
7,
10,
7,
1,
1,
7,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
6,
1,
6,
8,
1,
8,
9,
8,
6,
7,
-1,
-1,
-1,
-1,
2,
6,
9,
2,
9,
1,
6,
7,
9,
0,
9,
3,
7,
3,
9,
-1,
7,
8,
0,
7,
0,
6,
6,
0,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
3,
2,
6,
7,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
3,
11,
10,
6,
8,
10,
8,
9,
8,
6,
7,
-1,
-1,
-1,
-1,
2,
0,
7,
2,
7,
11,
0,
9,
7,
6,
7,
10,
9,
10,
7,
-1,
1,
8,
0,
1,
7,
8,
1,
10,
7,
6,
7,
10,
2,
3,
11,
-1,
11,
2,
1,
11,
1,
7,
10,
6,
1,
6,
7,
1,
-1,
-1,
-1,
-1,
8,
9,
6,
8,
6,
7,
9,
1,
6,
11,
6,
3,
1,
3,
6,
-1,
0,
9,
1,
11,
6,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
8,
0,
7,
0,
6,
3,
11,
0,
11,
6,
0,
-1,
-1,
-1,
-1,
7,
11,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
6,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
0,
8,
11,
7,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
9,
11,
7,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
1,
9,
8,
3,
1,
11,
7,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
1,
2,
6,
11,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
3,
0,
8,
6,
11,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
9,
0,
2,
10,
9,
6,
11,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
6,
11,
7,
2,
10,
3,
10,
8,
3,
10,
9,
8,
-1,
-1,
-1,
-1,
7,
2,
3,
6,
2,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
7,
0,
8,
7,
6,
0,
6,
2,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
7,
6,
2,
3,
7,
0,
1,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
6,
2,
1,
8,
6,
1,
9,
8,
8,
7,
6,
-1,
-1,
-1,
-1,
10,
7,
6,
10,
1,
7,
1,
3,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
7,
6,
1,
7,
10,
1,
8,
7,
1,
0,
8,
-1,
-1,
-1,
-1,
0,
3,
7,
0,
7,
10,
0,
10,
9,
6,
10,
7,
-1,
-1,
-1,
-1,
7,
6,
10,
7,
10,
8,
8,
10,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
6,
8,
4,
11,
8,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
6,
11,
3,
0,
6,
0,
4,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
6,
11,
8,
4,
6,
9,
0,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
4,
6,
9,
6,
3,
9,
3,
1,
11,
3,
6,
-1,
-1,
-1,
-1,
6,
8,
4,
6,
11,
8,
2,
10,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
3,
0,
11,
0,
6,
11,
0,
4,
6,
-1,
-1,
-1,
-1,
4,
11,
8,
4,
6,
11,
0,
2,
9,
2,
10,
9,
-1,
-1,
-1,
-1,
10,
9,
3,
10,
3,
2,
9,
4,
3,
11,
3,
6,
4,
6,
3,
-1,
8,
2,
3,
8,
4,
2,
4,
6,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
4,
2,
4,
6,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
9,
0,
2,
3,
4,
2,
4,
6,
4,
3,
8,
-1,
-1,
-1,
-1,
1,
9,
4,
1,
4,
2,
2,
4,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
1,
3,
8,
6,
1,
8,
4,
6,
6,
10,
1,
-1,
-1,
-1,
-1,
10,
1,
0,
10,
0,
6,
6,
0,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
6,
3,
4,
3,
8,
6,
10,
3,
0,
3,
9,
10,
9,
3,
-1,
10,
9,
4,
6,
10,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
9,
5,
7,
6,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
4,
9,
5,
11,
7,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
0,
1,
5,
4,
0,
7,
6,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
7,
6,
8,
3,
4,
3,
5,
4,
3,
1,
5,
-1,
-1,
-1,
-1,
9,
5,
4,
10,
1,
2,
7,
6,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
6,
11,
7,
1,
2,
10,
0,
8,
3,
4,
9,
5,
-1,
-1,
-1,
-1,
7,
6,
11,
5,
4,
10,
4,
2,
10,
4,
0,
2,
-1,
-1,
-1,
-1,
3,
4,
8,
3,
5,
4,
3,
2,
5,
10,
5,
2,
11,
7,
6,
-1,
7,
2,
3,
7,
6,
2,
5,
4,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
5,
4,
0,
8,
6,
0,
6,
2,
6,
8,
7,
-1,
-1,
-1,
-1,
3,
6,
2,
3,
7,
6,
1,
5,
0,
5,
4,
0,
-1,
-1,
-1,
-1,
6,
2,
8,
6,
8,
7,
2,
1,
8,
4,
8,
5,
1,
5,
8,
-1,
9,
5,
4,
10,
1,
6,
1,
7,
6,
1,
3,
7,
-1,
-1,
-1,
-1,
1,
6,
10,
1,
7,
6,
1,
0,
7,
8,
7,
0,
9,
5,
4,
-1,
4,
0,
10,
4,
10,
5,
0,
3,
10,
6,
10,
7,
3,
7,
10,
-1,
7,
6,
10,
7,
10,
8,
5,
4,
10,
4,
8,
10,
-1,
-1,
-1,
-1,
6,
9,
5,
6,
11,
9,
11,
8,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
6,
11,
0,
6,
3,
0,
5,
6,
0,
9,
5,
-1,
-1,
-1,
-1,
0,
11,
8,
0,
5,
11,
0,
1,
5,
5,
6,
11,
-1,
-1,
-1,
-1,
6,
11,
3,
6,
3,
5,
5,
3,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
10,
9,
5,
11,
9,
11,
8,
11,
5,
6,
-1,
-1,
-1,
-1,
0,
11,
3,
0,
6,
11,
0,
9,
6,
5,
6,
9,
1,
2,
10,
-1,
11,
8,
5,
11,
5,
6,
8,
0,
5,
10,
5,
2,
0,
2,
5,
-1,
6,
11,
3,
6,
3,
5,
2,
10,
3,
10,
5,
3,
-1,
-1,
-1,
-1,
5,
8,
9,
5,
2,
8,
5,
6,
2,
3,
8,
2,
-1,
-1,
-1,
-1,
9,
5,
6,
9,
6,
0,
0,
6,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
5,
8,
1,
8,
0,
5,
6,
8,
3,
8,
2,
6,
2,
8,
-1,
1,
5,
6,
2,
1,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
3,
6,
1,
6,
10,
3,
8,
6,
5,
6,
9,
8,
9,
6,
-1,
10,
1,
0,
10,
0,
6,
9,
5,
0,
5,
6,
0,
-1,
-1,
-1,
-1,
0,
3,
8,
5,
6,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
5,
6,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
5,
10,
7,
5,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
5,
10,
11,
7,
5,
8,
3,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
11,
7,
5,
10,
11,
1,
9,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
10,
7,
5,
10,
11,
7,
9,
8,
1,
8,
3,
1,
-1,
-1,
-1,
-1,
11,
1,
2,
11,
7,
1,
7,
5,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
1,
2,
7,
1,
7,
5,
7,
2,
11,
-1,
-1,
-1,
-1,
9,
7,
5,
9,
2,
7,
9,
0,
2,
2,
11,
7,
-1,
-1,
-1,
-1,
7,
5,
2,
7,
2,
11,
5,
9,
2,
3,
2,
8,
9,
8,
2,
-1,
2,
5,
10,
2,
3,
5,
3,
7,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
2,
0,
8,
5,
2,
8,
7,
5,
10,
2,
5,
-1,
-1,
-1,
-1,
9,
0,
1,
5,
10,
3,
5,
3,
7,
3,
10,
2,
-1,
-1,
-1,
-1,
9,
8,
2,
9,
2,
1,
8,
7,
2,
10,
2,
5,
7,
5,
2,
-1,
1,
3,
5,
3,
7,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
7,
0,
7,
1,
1,
7,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
0,
3,
9,
3,
5,
5,
3,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
8,
7,
5,
9,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
8,
4,
5,
10,
8,
10,
11,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
5,
0,
4,
5,
11,
0,
5,
10,
11,
11,
3,
0,
-1,
-1,
-1,
-1,
0,
1,
9,
8,
4,
10,
8,
10,
11,
10,
4,
5,
-1,
-1,
-1,
-1,
10,
11,
4,
10,
4,
5,
11,
3,
4,
9,
4,
1,
3,
1,
4,
-1,
2,
5,
1,
2,
8,
5,
2,
11,
8,
4,
5,
8,
-1,
-1,
-1,
-1,
0,
4,
11,
0,
11,
3,
4,
5,
11,
2,
11,
1,
5,
1,
11,
-1,
0,
2,
5,
0,
5,
9,
2,
11,
5,
4,
5,
8,
11,
8,
5,
-1,
9,
4,
5,
2,
11,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
5,
10,
3,
5,
2,
3,
4,
5,
3,
8,
4,
-1,
-1,
-1,
-1,
5,
10,
2,
5,
2,
4,
4,
2,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
10,
2,
3,
5,
10,
3,
8,
5,
4,
5,
8,
0,
1,
9,
-1,
5,
10,
2,
5,
2,
4,
1,
9,
2,
9,
4,
2,
-1,
-1,
-1,
-1,
8,
4,
5,
8,
5,
3,
3,
5,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
4,
5,
1,
0,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
8,
4,
5,
8,
5,
3,
9,
0,
5,
0,
3,
5,
-1,
-1,
-1,
-1,
9,
4,
5,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
11,
7,
4,
9,
11,
9,
10,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
8,
3,
4,
9,
7,
9,
11,
7,
9,
10,
11,
-1,
-1,
-1,
-1,
1,
10,
11,
1,
11,
4,
1,
4,
0,
7,
4,
11,
-1,
-1,
-1,
-1,
3,
1,
4,
3,
4,
8,
1,
10,
4,
7,
4,
11,
10,
11,
4,
-1,
4,
11,
7,
9,
11,
4,
9,
2,
11,
9,
1,
2,
-1,
-1,
-1,
-1,
9,
7,
4,
9,
11,
7,
9,
1,
11,
2,
11,
1,
0,
8,
3,
-1,
11,
7,
4,
11,
4,
2,
2,
4,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
11,
7,
4,
11,
4,
2,
8,
3,
4,
3,
2,
4,
-1,
-1,
-1,
-1,
2,
9,
10,
2,
7,
9,
2,
3,
7,
7,
4,
9,
-1,
-1,
-1,
-1,
9,
10,
7,
9,
7,
4,
10,
2,
7,
8,
7,
0,
2,
0,
7,
-1,
3,
7,
10,
3,
10,
2,
7,
4,
10,
1,
10,
0,
4,
0,
10,
-1,
1,
10,
2,
8,
7,
4,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
9,
1,
4,
1,
7,
7,
1,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
9,
1,
4,
1,
7,
0,
8,
1,
8,
7,
1,
-1,
-1,
-1,
-1,
4,
0,
3,
7,
4,
3,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
4,
8,
7,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
10,
8,
10,
11,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
0,
9,
3,
9,
11,
11,
9,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
10,
0,
10,
8,
8,
10,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
1,
10,
11,
3,
10,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
2,
11,
1,
11,
9,
9,
11,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
0,
9,
3,
9,
11,
1,
2,
9,
2,
11,
9,
-1,
-1,
-1,
-1,
0,
2,
11,
8,
0,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
3,
2,
11,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
3,
8,
2,
8,
10,
10,
8,
9,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
9,
10,
2,
0,
9,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
2,
3,
8,
2,
8,
10,
0,
1,
8,
1,
10,
8,
-1,
-1,
-1,
-1,
1,
10,
2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1,
3,
8,
9,
1,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
9,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
3,
8,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1
]);
export { MarchingCubes, edgeTable, triTable };