diff --git a/src/asset/butterfly.png b/src/asset/butterfly.png new file mode 100644 index 000000000..6818b4157 Binary files /dev/null and b/src/asset/butterfly.png differ diff --git a/src/asset/perlin.png b/src/asset/perlin.png new file mode 100644 index 000000000..338569528 Binary files /dev/null and b/src/asset/perlin.png differ diff --git a/src/asset/tree/Tree.png b/src/asset/tree/Tree.png new file mode 100644 index 000000000..5050bd200 Binary files /dev/null and b/src/asset/tree/Tree.png differ diff --git a/src/asset/tree/tree.babylon b/src/asset/tree/tree.babylon new file mode 100644 index 000000000..91c5b7dde --- /dev/null +++ b/src/asset/tree/tree.babylon @@ -0,0 +1,5 @@ +{"autoClear":true,"clearColor":[0.0000,0.0000,0.0000],"ambientColor":[0.0000,0.0000,0.0000],"gravity":[0.0000,-9.8100,0.0000],"cameras":[{"name":"Camera","id":"Camera","position":[7.4811,5.3437,-6.5076],"target":[-0.3174,0.8953,0.3125],"fov":0.8576,"minZ":0.1000,"maxZ":100.0000,"speed":1.0000,"inertia":0.9000,"checkCollisions":false,"applyGravity":false,"ellipsoid":[0.2000,0.9000,0.2000]}],"activeCamera":"Camera","lights":[{"name":"Point","id":"Point","type":0.0000,"position":[1.0024,6.9281,-7.0992],"intensity":9.8200,"diffuse":[1.0000,1.0000,1.0000],"specular":[1.0000,1.0000,1.0000]},{"name":"Lamp","id":"Lamp","type":0.0000,"position":[4.0762,5.9039,1.0055],"intensity":1.0000,"diffuse":[1.0000,1.0000,1.0000],"specular":[1.0000,1.0000,1.0000]}],"materials":[{"name":"02___Par_d_faut","id":"02___Par_d_faut","ambient":[0.6627,0.6627,0.6627],"diffuse":[0.5302,0.5302,0.5302],"specular":[0.0000,0.0000,0.0000],"specularPower":1.0000,"emissive":[0.0000,0.0000,0.0000],"alpha":1.0000,"backFaceCulling":true,"diffuseTexture":{"name":"Tree.tga","level":1.0000,"hasAlpha":1.0000,"coordinatesMode":0,"uOffset":0.0000,"vOffset":0.0000,"uScale":1.0000,"vScale":1.0000,"uAng":0.0000,"vAng":0.0000,"wAng":0.0000,"wrapU":true,"wrapV":true,"coordinatesIndex":0},"opacityTexture":{"name":"Tree.tga","level":1.0000,"hasAlpha":1.0000,"coordinatesMode":0,"uOffset":0.0000,"vOffset":0.0000,"uScale":1.0000,"vScale":1.0000,"uAng":0.0000,"vAng":0.0000,"wAng":0.0000,"wrapU":true,"wrapV":true,"coordinatesIndex":0}}],"meshes":[{"name":"Tree","id":"Tree","materialId":"02___Par_d_faut","position":[0.0000,0.0000,0.0000],"rotation":[-1.5708,-0.0000,0.0000],"scaling":[14.5853,14.5853,14.5853],"isVisible":true,"isEnabled":true,"checkCollisions":false,"billboardMode":0,"receiveShadows":false,"positions":[0.0175,-0.0183,0.0025,0.0118,-0.0089,0.0215,0.0144,-0.0012,0.0023,0.0233,-0.0194,0.0012,0.0175,-0.0183,0.0025,0.0233,-0.0194,0.0012,0.0241,-0.0333,0.0006,0.0158,-0.0253,0.0025,0.0175,-0.0183,0.0025,0.0158,-0.0253,0.0025,0.0069,-0.0153,0.0331,0.0078,-0.0253,0.0025,-0.0006,-0.0187,0.0215,0.0069,-0.0153,0.0331,0.0069,-0.0153,0.0331,0.0158,-0.0253,0.0025,0.0158,-0.0253,0.0025,0.0241,-0.0333,0.0006,0.0241,-0.0333,0.0006,0.0087,-0.0300,0.0013,-0.0119,-0.0184,0.0019,-0.0274,-0.0041,0.0025,-0.0218,-0.0074,0.0216,-0.0271,-0.0071,0.0013,-0.0343,0.0055,0.0003,-0.0313,0.0043,0.0023,-0.0251,0.0028,0.0244,-0.0183,0.0187,0.0029,-0.0162,0.0102,0.0221,-0.0251,0.0028,0.0244,-0.0251,0.0028,0.0244,-0.0250,0.0188,0.0024,-0.0227,0.0317,0.0005,-0.0133,0.0269,0.0019,-0.0037,0.0163,0.0031,-0.0303,0.0151,0.0017,-0.0250,0.0188,0.0024,-0.0251,0.0028,0.0244,-0.0251,0.0028,0.0244,-0.0313,0.0043,0.0023,-0.0313,0.0043,0.0023,-0.0343,0.0055,0.0003,-0.0343,0.0055,0.0003,-0.0313,0.0215,-0.0000,-0.0303,0.0151,0.0017,-0.0313,0.0215,-0.0000,-0.0303,0.0151,0.0017,0.0068,0.0031,0.1482,0.0053,0.0028,0.2116,0.0000,0.0057,0.2107,0.0055,0.0053,0.1119,0.0144,-0.0012,0.0023,0.0144,-0.0012,0.0023,0.0097,0.0002,0.1119,0.0082,-0.0017,0.1990,0.0029,0.0082,0.0758,-0.0022,0.0092,0.1123,0.0055,0.0088,0.0031,0.0144,-0.0012,0.0023,0.0144,-0.0012,0.0023,0.0061,-0.0097,0.1490,0.0072,-0.0069,0.2118,0.0082,-0.0017,0.1990,0.0082,-0.0017,0.1990,0.0074,-0.0077,0.1128,0.0037,-0.0135,0.1128,0.0061,-0.0097,0.1490,0.0037,-0.0135,0.1128,0.0035,-0.0116,0.1990,0.0072,-0.0069,0.2118,0.0061,-0.0097,0.1490,0.0095,-0.0045,0.0761,0.0074,-0.0077,0.1128,0.0082,-0.0017,0.1990,0.0082,-0.0017,0.1990,0.0097,0.0002,0.1119,0.0095,-0.0045,0.0761,0.0097,0.0002,0.1119,0.0095,-0.0045,0.0761,0.0095,-0.0045,0.0761,0.0118,-0.0089,0.0215,0.0095,-0.0045,0.0761,-0.0063,-0.0145,0.1481,-0.0014,-0.0121,0.2116,-0.0046,-0.0152,0.1119,-0.0116,-0.0137,0.1120,-0.0071,-0.0109,0.2108,-0.0015,-0.0156,0.0761,0.0037,-0.0135,0.1128,0.0037,-0.0135,0.1128,0.0069,-0.0153,0.0331,0.0069,-0.0153,0.0331,-0.0163,-0.0037,0.1490,-0.0102,-0.0060,0.2120,-0.0175,-0.0059,0.1128,-0.0163,-0.0037,0.1490,-0.0175,-0.0059,0.1128,-0.0251,0.0028,0.0244,-0.0251,0.0028,0.0244,-0.0179,0.0008,0.1129,-0.0163,-0.0037,0.1490,-0.0163,-0.0037,0.1490,-0.0101,-0.0003,0.2110,-0.0102,-0.0060,0.2120,-0.0163,-0.0037,0.1490,-0.0171,-0.0095,0.0762,-0.0218,-0.0074,0.0216,-0.0060,0.0070,0.1486,-0.0057,0.0039,0.2119,-0.0101,-0.0003,0.2110,-0.0101,-0.0003,0.2110,-0.0091,0.0066,0.1125,-0.0147,0.0054,0.0766,-0.0101,-0.0003,0.2110,-0.0101,-0.0003,0.2110,-0.0179,0.0008,0.1129,-0.0179,0.0008,0.1129,-0.0251,0.0028,0.0244,-0.0251,0.0028,0.0244,0.0084,0.0018,0.2563,0.0115,-0.0010,0.2651,0.0173,-0.0011,0.3221,0.0084,0.0026,0.2741,0.0105,-0.0046,0.2562,0.0097,-0.0066,0.2651,0.0173,-0.0011,0.3221,0.0173,-0.0011,0.3221,0.0115,-0.0010,0.2651,0.0115,-0.0010,0.2651,0.0082,-0.0017,0.1990,0.0082,-0.0017,0.1990,0.0105,-0.0046,0.2562,0.0072,-0.0069,0.2118,0.0097,-0.0066,0.2651,0.0105,-0.0046,0.2562,0.0070,-0.0072,0.2921,0.0144,-0.0047,0.3285,0.0173,-0.0011,0.3221,0.0173,-0.0011,0.3221,0.0057,-0.0073,0.2740,0.0013,-0.0088,0.2746,0.0106,-0.0067,0.3292,0.0050,-0.0086,0.2562,0.0173,-0.0011,0.3221,0.0173,-0.0011,0.3221,0.0097,-0.0066,0.2651,0.0097,-0.0066,0.2651,0.0018,-0.0027,0.2927,0.0088,-0.0035,0.3294,-0.0010,-0.0047,0.2748,0.0018,-0.0027,0.2927,-0.0010,-0.0047,0.2748,-0.0013,-0.0000,0.2749,0.0018,-0.0027,0.2927,0.0018,-0.0027,0.2927,0.0088,0.0004,0.3295,0.0088,-0.0035,0.3294,0.0018,-0.0027,0.2927,-0.0035,-0.0072,0.2568,-0.0035,-0.0072,0.2568,-0.0102,-0.0060,0.2120,-0.0010,-0.0047,0.2748,-0.0035,-0.0072,0.2568,0.0082,0.0023,0.2922,0.0132,0.0008,0.3287,0.0088,0.0004,0.3295,0.0088,0.0004,0.3295,0.0028,0.0031,0.2747,-0.0023,0.0023,0.2569,0.0088,0.0004,0.3295,0.0088,0.0004,0.3295,-0.0013,-0.0000,0.2749,-0.0013,-0.0000,0.2749,-0.0101,-0.0003,0.2110,-0.0101,-0.0003,0.2110,0.0228,-0.0032,0.3866,0.0248,-0.0034,0.4063,0.0439,-0.0026,0.4266,0.0200,-0.0047,0.3870,0.0439,-0.0026,0.4266,0.0214,-0.0025,0.3667,0.0439,-0.0026,0.4266,0.0439,-0.0026,0.4266,0.0256,-0.0002,0.3861,0.0173,-0.0011,0.3221,0.0173,-0.0011,0.3221,0.0185,-0.0016,0.3872,0.0215,-0.0001,0.4068,0.0439,-0.0026,0.4266,0.0215,-0.0001,0.4068,0.0185,-0.0016,0.3872,0.0186,0.0009,0.3871,0.0215,-0.0001,0.4068,0.0439,-0.0026,0.4266,0.0215,-0.0001,0.4068,0.0186,0.0009,0.3871,0.0157,-0.0036,0.3676,0.0439,-0.0026,0.4266,0.0439,-0.0026,0.4266,0.0157,-0.0036,0.3676,0.0088,-0.0035,0.3294,0.0185,-0.0016,0.3872,0.0157,-0.0036,0.3676,0.0439,-0.0026,0.4266,0.0230,0.0008,0.3864,0.0272,0.0010,0.4058,0.0256,-0.0002,0.3861,0.0439,-0.0026,0.4266,0.0256,-0.0002,0.3861,0.0181,0.0008,0.3671,0.0439,-0.0026,0.4266,0.0439,-0.0026,0.4266,0.0186,0.0009,0.3871,0.0186,0.0009,0.3871,0.0088,0.0004,0.3295,0.0088,0.0004,0.3295,0.1384,0.0263,0.3080,0.1450,-0.0452,0.2799,0.0086,-0.0805,0.3203,0.0019,-0.0091,0.3483,0.1157,0.1017,0.3005,-0.0208,0.0663,0.3409,-0.1097,-0.0327,0.2002,-0.1090,0.0486,0.1809,0.0412,0.0616,0.2226,0.0405,-0.0196,0.2419,-0.0951,-0.1126,0.1809,0.0551,-0.0996,0.2226,0.1085,-0.0462,0.2277,0.0907,-0.0984,0.2145,-0.0094,-0.0739,0.2410,0.0084,-0.0217,0.2541,0.1168,0.0082,0.2145,0.0168,0.0327,0.2410,-0.0036,-0.0946,0.3361,-0.0560,-0.0775,0.3229,-0.0329,0.0229,0.3493,0.0195,0.0058,0.3625,0.0510,-0.1022,0.3229,0.0741,-0.0018,0.3493,-0.0325,0.0867,0.3641,0.0187,0.1077,0.3517,0.0669,0.0236,0.3910,0.0157,0.0025,0.4034,-0.0766,0.0532,0.3517,-0.0284,-0.0310,0.3910,0.0826,-0.1547,0.2786,0.0076,-0.1865,0.2568,-0.0640,-0.0468,0.2864,0.0110,-0.0150,0.3082,0.1538,-0.1127,0.2603,0.0822,0.0271,0.2899,0.0670,0.1487,0.1891,0.1666,0.1136,0.1640,0.1190,-0.0765,0.2182,0.0194,-0.0414,0.2433,-0.0374,0.1646,0.1640,-0.0850,-0.0255,0.2182,-0.0660,0.0811,0.1954,-0.0048,0.1074,0.1745,0.0607,0.0011,0.2149,-0.0006,-0.0252,0.2358,-0.1227,0.0402,0.1845,-0.0573,-0.0661,0.2248,0.1274,0.0128,0.1800,0.1285,-0.0534,0.1581,0.0087,-0.0771,0.2038,0.0075,-0.0109,0.2257,0.1090,0.0806,0.1708,-0.0108,0.0570,0.2166,0.0567,0.0494,0.3224,0.0915,0.0323,0.3126,0.0580,-0.0360,0.3126,0.0232,-0.0189,0.3224,0.0219,0.0665,0.3126,-0.0116,-0.0019,0.3126,-0.0877,-0.0489,0.1521,-0.1180,0.0099,0.1302,-0.0210,0.0841,0.1759,0.0093,0.0253,0.1978,-0.0412,-0.1017,0.1429,0.0558,-0.0275,0.1886,0.1159,-0.0247,0.1675,0.0726,-0.0754,0.1466,-0.0331,-0.0090,0.1870,0.0102,0.0417,0.2079,0.1487,0.0371,0.1565,0.0430,0.1035,0.1969,-0.0969,0.0124,0.1998,-0.1040,0.0670,0.1866,-0.0034,0.0893,0.2130,0.0037,0.0346,0.2262,-0.0803,-0.0402,0.1866,0.0203,-0.0179,0.2130,-0.0992,0.0632,0.2503,-0.0460,0.1249,0.2285,0.0800,0.0312,0.2581,0.0268,-0.0305,0.2799,-0.1445,-0.0061,0.2320,-0.0185,-0.0997,0.2616,0.1671,-0.0703,0.2542,0.1025,-0.1460,0.2231,-0.0553,-0.0468,0.2834,0.0093,0.0289,0.3145,0.2161,0.0220,0.2379,0.0583,0.1212,0.2982,-0.0916,-0.0659,0.3077,-0.1292,-0.0048,0.2796,-0.0225,0.0873,0.3200,0.0151,0.0262,0.3481,-0.0379,-0.1235,0.3003,0.0688,-0.0314,0.3406,0.0883,-0.0412,0.3362,0.0517,-0.0827,0.3238,-0.0288,-0.0286,0.3630,0.0078,0.0130,0.3755,0.1130,0.0083,0.3238,0.0325,0.0625,0.3630,0.0168,0.1095,0.1210,0.0829,0.1059,0.0991,0.0980,-0.0153,0.1448,0.0319,-0.0118,0.1667,-0.0522,0.0959,0.1119,-0.0371,-0.0253,0.1576,-0.0028,-0.1526,0.1201,-0.0683,-0.1401,0.0992,-0.0629,-0.0154,0.1396,0.0026,-0.0279,0.1605,0.0672,-0.1505,0.1091,0.0725,-0.0258,0.1495,0.0743,0.0864,0.1688,0.1251,0.0650,0.1556,0.0935,-0.0331,0.1820,0.0428,-0.0117,0.1952,0.0206,0.0986,0.1556,-0.0110,0.0005,0.1820,0.1807,0.0529,0.2196,0.2071,-0.0242,0.1978,0.0627,-0.0857,0.2274,0.0362,-0.0086,0.2492,0.1438,0.1270,0.2013,-0.0007,0.0654,0.2309,-0.1302,-0.0998,0.2232,-0.1630,-0.0058,0.1920,0.0023,0.0804,0.2523,0.0350,-0.0136,0.2835,-0.0753,-0.1887,0.2068,0.0899,-0.1025,0.2671,0.0041,0.1214,0.2767,0.0758,0.1230,0.2486,0.1015,-0.0157,0.2889,0.0297,-0.0172,0.3170,-0.0727,0.1041,0.2692,-0.0471,-0.0345,0.3096,-0.0654,-0.0464,0.3328,-0.0827,0.0061,0.3204,0.0046,0.0483,0.3596,0.0220,-0.0043,0.3721,-0.0351,-0.0927,0.3204,0.0523,-0.0506,0.3596,0.0474,-0.1239,0.3503,-0.0241,-0.1291,0.3222,-0.0568,0.0080,0.3625,0.0148,0.0132,0.3906,0.1233,-0.1028,0.3428,0.0907,0.0344,0.3832,-0.0245,-0.0925,0.2424,-0.0763,-0.0737,0.2292,-0.0497,0.0258,0.2556,0.0021,0.0070,0.2688,0.0298,-0.1020,0.2292,0.0564,-0.0025,0.2556,-0.0705,0.0205,0.3507,-0.0524,0.0725,0.3375,0.0475,0.0474,0.3639,0.0294,-0.0047,0.3771,-0.0792,-0.0339,0.3375,0.0207,-0.0591,0.3639,0.1452,0.0084,0.2913,0.1454,-0.0633,0.2632,0.0063,-0.0862,0.3036,0.0061,-0.0144,0.3317,0.1295,0.0856,0.2839,-0.0096,0.0627,0.3242,-0.1488,-0.0455,0.1561,-0.1537,0.0600,0.1310,0.0403,0.0874,0.1853,0.0452,-0.0181,0.2103,-0.1243,-0.1482,0.1310,0.0698,-0.1208,0.1853,0.1063,0.0793,0.2100,0.1314,0.0176,0.1892,0.0238,-0.0457,0.2295,-0.0013,0.0160,0.2504,0.0666,0.1369,0.1991,-0.0410,0.0736,0.2395,0.0341,-0.1126,0.1946,-0.0320,-0.1124,0.1727,-0.0533,0.0079,0.2184,0.0129,0.0076,0.2403,0.1024,-0.0956,0.1855,0.0812,0.0247,0.2312,0.0722,-0.0427,0.3370,0.0544,-0.0772,0.3273,-0.0132,-0.0423,0.3273,0.0046,-0.0078,0.3370,0.0900,-0.0083,0.3273,0.0223,0.0266,0.3273,-0.0232,0.1037,0.1667,0.0363,0.1327,0.1448,0.1085,0.0342,0.1905,0.0490,0.0052,0.2124,-0.0769,0.0583,0.1576,-0.0046,-0.0402,0.2033,-0.0031,-0.1004,0.1821,-0.0529,-0.0561,0.1613,0.0157,0.0482,0.2016,0.0655,0.0039,0.2225,0.0580,-0.1345,0.1712,0.1266,-0.0302,0.2116,0.0383,0.1116,0.2145,0.0931,0.1176,0.2013,0.1133,0.0166,0.2277,0.0585,0.0105,0.2409,-0.0146,0.0961,0.2013,0.0056,-0.0050,0.2277,0.0891,0.1129,0.2649,0.1498,0.0584,0.2431,0.0536,-0.0657,0.2727,-0.0071,-0.0112,0.2945,0.0208,0.1596,0.2466,-0.0754,0.0355,0.2762,-0.0497,-0.1507,0.2689,-0.1241,-0.0845,0.2377,-0.0217,0.0712,0.2980,0.0527,0.0051,0.3292,0.0416,-0.2016,0.2525,0.1439,-0.0458,0.3128,-0.0401,0.1079,0.3224,0.0218,0.1442,0.2943,0.1117,0.0357,0.3346,0.0498,-0.0006,0.3627,-0.0987,0.0554,0.3149,-0.0089,-0.0532,0.3553,-0.0190,-0.0725,0.3508,-0.0598,-0.0350,0.3384,-0.0040,0.0443,0.3777,0.0368,0.0069,0.3901,0.0300,-0.0981,0.3384,0.0858,-0.0188,0.3777,0.1330,-0.0040,0.1356,0.1281,-0.0700,0.1138,0.0066,-0.0827,0.1595,0.0116,-0.0167,0.1814,0.1209,0.0652,0.1265,-0.0006,0.0526,0.1722,-0.1285,0.0208,0.1347,-0.1148,0.0860,0.1138,0.0098,0.0782,0.1542,-0.0040,0.0130,0.1751,-0.1279,-0.0491,0.1238,-0.0033,-0.0570,0.1641,0.1088,-0.0611,0.1834,0.0864,-0.1114,0.1702,-0.0110,-0.0779,0.1966,0.0114,-0.0275,0.2098,0.1221,-0.0076,0.1702,0.0247,0.0259,0.1966,0.0732,-0.1667,0.2343,-0.0044,-0.1916,0.2125,-0.0630,-0.0460,0.2421,0.0146,-0.0211,0.2639,0.1480,-0.1313,0.2159,0.0894,0.0143,0.2455,-0.0211,0.0813,0.3474,0.0318,0.0976,0.3350,0.0721,0.0094,0.3743,0.0192,-0.0069,0.3867,-0.0680,0.0519,0.3350,-0.0277,-0.0363,0.3743,0.0966,0.0560,0.3756,0.1166,0.0044,0.3632,0.0315,-0.0421,0.4025,0.0115,0.0095,0.4149,0.0639,0.1007,0.3632,-0.0212,0.0542,0.4025,-0.1324,-0.0645,0.2933,-0.1627,0.0112,0.2714,-0.0216,0.0799,0.3010,0.0087,0.0043,0.3229,-0.0918,-0.1366,0.2749,0.0494,-0.0678,0.3045,-0.1427,-0.0246,0.2713,-0.1420,0.0567,0.2520,0.0082,0.0697,0.2937,0.0075,-0.0116,0.3130,-0.1281,-0.1045,0.2520,0.0221,-0.0915,0.2937,0.0797,-0.1871,0.1561,-0.0232,-0.2109,0.1310,-0.0850,-0.0249,0.1853,0.0179,-0.0012,0.2103,0.1763,-0.1445,0.1310,0.1145,0.0414,0.1853,-0.0917,0.1446,0.2821,-0.0003,0.1839,0.2510,0.0974,0.0252,0.3113,0.0060,-0.0141,0.3424,-0.1765,0.0835,0.2658,-0.0788,-0.0752,0.3261,-0.0732,0.1472,0.2378,0.0214,0.1781,0.2066,0.1043,0.0111,0.2669,0.0097,-0.0198,0.2981,-0.1632,0.0941,0.2214,-0.0803,-0.0729,0.2818,0.0665,-0.0980,0.3234,0.0098,-0.1176,0.2953,-0.0461,-0.0138,0.3357,0.0106,0.0058,0.3638,0.1232,-0.0645,0.3160,0.0673,0.0392,0.3563,-0.0308,0.0917,0.1880,0.0353,0.1074,0.1687,0.0758,-0.0120,0.2104,0.0097,-0.0277,0.2297,-0.0928,0.0640,0.1687,-0.0523,-0.0554,0.2104,0.0016,-0.0881,0.2155,-0.0443,-0.0841,0.2023,-0.0443,0.0021,0.2287,0.0016,-0.0020,0.2419,0.0475,-0.0841,0.2023,0.0475,0.0021,0.2287,-0.0599,-0.0067,0.3515,-0.0566,0.0392,0.3383,0.0296,0.0404,0.3647,0.0262,-0.0055,0.3779,-0.0553,-0.0526,0.3383,0.0309,-0.0513,0.3647,0.0815,0.0529,0.3519,0.1088,0.0155,0.3394,0.0500,-0.0404,0.3787,0.0227,-0.0030,0.3911,0.0455,0.0820,0.3394,-0.0133,0.0260,0.3787,-0.0916,-0.0887,0.2664,-0.1324,-0.0341,0.2446,-0.0332,0.0518,0.2742,0.0076,-0.0028,0.2960,-0.0433,-0.1382,0.2480,0.0559,-0.0522,0.2776,0.1517,-0.0156,0.1768,0.1430,-0.1035,0.1518,-0.0209,-0.1027,0.2060,-0.0122,-0.0148,0.2311,0.1438,0.0724,0.1518,-0.0201,0.0731,0.2060,0.0702,0.0789,0.1832,0.1038,0.0344,0.1623,0.0305,-0.0399,0.2027,-0.0030,0.0046,0.2236,0.0257,0.1168,0.1722,-0.0475,0.0426,0.2126,0.0533,-0.0917,0.1677,-0.0002,-0.1058,0.1459,-0.0433,-0.0132,0.1916,0.0102,0.0009,0.2135,0.1048,-0.0633,0.1586,0.0617,0.0293,0.2043,0.0690,-0.0270,0.3378,0.0620,-0.0587,0.3281,-0.0001,-0.0451,0.3281,0.0068,-0.0134,0.3378,0.0759,0.0046,0.3281,0.0137,0.0182,0.3281,-0.0396,0.0707,0.1398,0.0021,0.1070,0.1180,0.0817,0.0430,0.1637,0.0399,0.0067,0.1856,-0.0732,0.0224,0.1307,0.0064,-0.0416,0.1764,0.0206,-0.0898,0.1553,-0.0292,-0.0648,0.1344,0.0037,0.0342,0.1748,0.0535,0.0092,0.1956,0.0773,-0.1042,0.1443,0.1102,-0.0052,0.1847,0.0083,0.0903,0.1876,0.0513,0.1070,0.1744,0.0894,0.0297,0.2008,0.0464,0.0130,0.2140,-0.0311,0.0664,0.1744,0.0070,-0.0109,0.2008,0.0491,0.1023,0.2381,0.1098,0.0714,0.2163,0.0589,-0.0496,0.2459,-0.0019,-0.0187,0.2677,-0.0161,0.1253,0.2197,-0.0671,0.0043,0.2493,-0.0062,-0.1405,0.2420,-0.0806,-0.1031,0.2108,-0.0315,0.0448,0.2711,0.0429,0.0074,0.3023,0.0785,-0.1620,0.2256,0.1276,-0.0140,0.2860,-0.0542,0.0705,0.2955,-0.0120,0.1131,0.2674,0.0840,0.0448,0.3078,0.0418,0.0021,0.3359,-0.0903,0.0154,0.2881,0.0057,-0.0529,0.3284,0.0017,-0.0707,0.3239,-0.0393,-0.0493,0.3115,-0.0114,0.0269,0.3508,0.0296,0.0054,0.3632,0.0468,-0.0809,0.3115,0.0748,-0.0048,0.3508,0.0834,0.0278,0.1088,0.0937,-0.0266,0.0869,-0.0017,-0.0630,0.1326,-0.0120,-0.0086,0.1545,0.0587,0.0812,0.0996,-0.0367,0.0447,0.1454,-0.1069,-0.0190,0.1078,-0.1098,0.0367,0.0870,-0.0075,0.0572,0.1274,-0.0046,0.0015,0.1482,-0.0913,-0.0753,0.0969,0.0110,-0.0548,0.1373,0.1025,-0.0340,0.1565,0.0952,-0.0795,0.1433,0.0093,-0.0734,0.1698,0.0166,-0.0279,0.1829,0.1017,0.0121,0.1433,0.0158,0.0182,0.1698,0.0965,-0.1270,0.2074,0.0392,-0.1638,0.1856,-0.0395,-0.0588,0.2152,0.0178,-0.0220,0.2370,0.1493,-0.0823,0.1891,0.0706,0.0227,0.2187,-0.0894,0.0950,0.2109,-0.0196,0.1404,0.1798,0.0833,0.0234,0.2401,0.0135,-0.0220,0.2712,-0.1507,0.0328,0.1946,-0.0477,-0.0843,0.2549,0.1170,0.0300,0.2645,0.1325,-0.0279,0.2364,0.0251,-0.0763,0.2767,0.0095,-0.0184,0.3048,0.0876,0.0890,0.2570,-0.0199,0.0405,0.2974,-0.0332,0.0530,0.3205,0.0061,0.0776,0.3081,0.0577,0.0150,0.3474,0.0185,-0.0095,0.3598,-0.0647,0.0192,0.3081,-0.0131,-0.0434,0.3474,-0.0736,-0.0540,0.3381,-0.0921,0.0031,0.3100,0.0128,0.0569,0.3503,0.0312,-0.0002,0.3784,-0.0413,-0.1114,0.3306,0.0635,-0.0576,0.3710,-0.0625,0.0106,0.2301,-0.0575,0.0564,0.2169,0.0286,0.0547,0.2434,0.0237,0.0089,0.2565,-0.0593,-0.0353,0.2169,0.0268,-0.0371,0.2434,0.0202,0.0705,0.3385,0.0660,0.0662,0.3253,0.0655,-0.0200,0.3517,0.0196,-0.0156,0.3649,-0.0258,0.0667,0.3253,-0.0263,-0.0194,0.3517,0.0533,-0.1071,0.2791,-0.0049,-0.1215,0.2510,-0.0512,-0.0131,0.2914,0.0071,0.0013,0.3194,0.1128,-0.0789,0.2716,0.0666,0.0295,0.3120,-0.0491,0.1210,0.1439,0.0356,0.1459,0.1188,0.0965,-0.0062,0.1730,0.0119,-0.0312,0.1981,-0.1276,0.0806,0.1188,-0.0667,-0.0715,0.1730,0.1031,-0.0614,0.1978,0.0580,-0.0941,0.1769,-0.0148,-0.0193,0.2173,0.0303,0.0134,0.2382,0.1420,-0.0177,0.1869,0.0692,0.0571,0.2272,-0.0671,-0.0410,0.1824,-0.0801,0.0128,0.1605,0.0133,0.0540,0.2062,0.0263,0.0002,0.2281,-0.0397,-0.0930,0.1732,0.0537,-0.0518,0.2190,-0.0028,-0.0580,0.3248,-0.0343,-0.0504,0.3150,-0.0194,0.0115,0.3150,0.0121,0.0039,0.3248,0.0288,-0.0655,0.3150,0.0436,-0.0037,0.3150,0.0971,0.0486,0.1545,0.1326,0.0061,0.1326,0.0670,-0.0721,0.1783,0.0315,-0.0296,0.2002,0.0496,0.0832,0.1453,-0.0160,0.0049,0.1911,-0.0646,-0.0083,0.1699,-0.0385,0.0409,0.1490,0.0598,0.0061,0.1894,0.0338,-0.0432,0.2103,-0.0801,-0.0647,0.1590,0.0183,-0.0996,0.1993,0.1158,0.0003,0.2022,0.1316,-0.0430,0.1890,0.0536,-0.0795,0.2155,0.0378,-0.0362,0.2286,0.0927,0.0401,0.1890,0.0146,0.0036,0.2155,0.1270,-0.0407,0.2527,0.0948,-0.1008,0.2309,-0.0251,-0.0474,0.2605,0.0070,0.0127,0.2823,0.1513,0.0240,0.2344,0.0314,0.0774,0.2640,-0.1147,0.0195,0.2566,-0.0758,0.0931,0.2255,0.0711,0.0410,0.2858,0.0322,-0.0326,0.3169,-0.1378,-0.0647,0.2403,0.0090,-0.1168,0.3006,0.0972,0.0632,0.3102,0.1390,0.0202,0.2821,0.0688,-0.0744,0.3224,0.0270,-0.0314,0.3505,0.0429,0.1004,0.3027,-0.0274,0.0058,0.3431,-0.0451,0.0102,0.3386,-0.0228,0.0508,0.3262,0.0528,0.0213,0.3655,0.0305,-0.0193,0.3779,-0.0562,-0.0347,0.3262,0.0194,-0.0642,0.3655,0.0408,-0.0997,0.1234,-0.0138,-0.1088,0.1015,-0.0483,-0.0127,0.1473,0.0063,-0.0035,0.1691,0.0946,-0.0760,0.1143,0.0601,0.0201,0.1600,0.0089,0.1177,0.1225,0.0646,0.1195,0.1016,0.0830,0.0168,0.1420,0.0273,0.0150,0.1629,-0.0478,0.1032,0.1115,-0.0294,0.0005,0.1519,-0.0104,-0.0914,0.1712,-0.0557,-0.0832,0.1580,-0.0479,0.0026,0.1844,-0.0025,-0.0056,0.1976,0.0357,-0.0915,0.1580,0.0435,-0.0057,0.1844,-0.1033,-0.0835,0.2221,-0.1389,-0.0254,0.2002,-0.0323,0.0512,0.2298,0.0033,-0.0069,0.2517,-0.0596,-0.1372,0.2037,0.0470,-0.0606,0.2333,0.0793,0.0425,0.3352,0.1031,0.0028,0.3228,0.0395,-0.0475,0.3620,0.0158,-0.0078,0.3745,0.0461,0.0748,0.3228,-0.0174,0.0244,0.3620,0.0822,-0.0581,0.3634,0.0443,-0.0846,0.3510,-0.0104,-0.0248,0.3903,0.0275,0.0018,0.4027,0.1121,-0.0227,0.3510,0.0574,0.0372,0.3903,-0.0612,0.1038,0.2810,-0.0058,0.1435,0.2592,0.0782,0.0426,0.2888,0.0228,0.0029,0.3106,-0.1116,0.0565,0.2627,-0.0277,-0.0444,0.2923,-0.0308,0.1201,0.2591,0.0353,0.1358,0.2398,0.0758,0.0164,0.2815,0.0097,0.0007,0.3008,-0.0928,0.0924,0.2398,-0.0523,-0.0270,0.2815,-0.1185,-0.0928,0.1439,-0.1583,-0.0140,0.1188,-0.0196,0.0733,0.1730,0.0202,-0.0056,0.1981,-0.0647,-0.1628,0.1188,0.0740,-0.0755,0.1730,0.1167,0.1125,0.2699,0.1669,0.0461,0.2387,0.0574,-0.0649,0.2990,0.0073,0.0015,0.3302,0.0502,0.1692,0.2536,-0.0592,0.0582,0.3139,0.1225,0.0979,0.2256,0.1664,0.0272,0.1944,0.0473,-0.0733,0.2547,0.0034,-0.0026,0.2859,0.0615,0.1604,0.2092,-0.0576,0.0599,0.2695,0.0945,-0.1030,0.3160,0.0323,-0.1389,0.2809,-0.0568,-0.0297,0.3313,0.0054,0.0062,0.3664,0.1535,-0.0510,0.3067,0.0644,0.0583,0.3571,-0.0626,0.0978,0.1806,0.0115,0.1311,0.1565,0.0860,0.0001,0.2086,0.0119,-0.0333,0.2326,-0.1291,0.0512,0.1565,-0.0546,-0.0799,0.2086,0.0161,-0.1061,0.2092,-0.0387,-0.1117,0.1928,-0.0582,-0.0105,0.2257,-0.0034,-0.0049,0.2422,0.0690,-0.0910,0.1928,0.0496,0.0102,0.2257,-0.0746,-0.0244,0.3452,-0.0810,0.0303,0.3288,0.0199,0.0512,0.3617,0.0263,-0.0035,0.3782,-0.0587,-0.0772,0.3288,0.0422,-0.0563,0.3617,0.0781,0.0775,0.3439,0.1185,0.0397,0.3284,0.0622,-0.0392,0.3774,0.0217,-0.0014,0.3929,0.0292,0.1035,0.3284,-0.0272,0.0246,0.3774,-0.0933,-0.1279,0.2606,-0.1535,-0.0729,0.2333,-0.0564,0.0504,0.2703,0.0038,-0.0045,0.2975,-0.0254,-0.1751,0.2377,0.0718,-0.0517,0.2746,0.1760,0.0130,0.1686,0.1856,-0.0922,0.1373,-0.0071,-0.1283,0.2049,-0.0167,-0.0231,0.2362,0.1469,0.1145,0.1373,-0.0458,0.0784,0.2049,0.0590,0.1055,0.1755,0.1085,0.0609,0.1495,0.0392,-0.0429,0.1999,-0.0103,0.0017,0.2259,-0.0019,0.1401,0.1619,-0.0712,0.0363,0.2122,0.0776,-0.0987,0.1594,0.0179,-0.1273,0.1321,-0.0536,-0.0283,0.1891,0.0061,0.0004,0.2164,0.1316,-0.0536,0.1480,0.0601,0.0454,0.2050,0.0814,-0.0192,0.3344,0.0804,-0.0579,0.3222,0.0043,-0.0560,0.3222,0.0053,-0.0172,0.3344,0.0824,0.0196,0.3222,0.0063,0.0215,0.3222,-0.0682,0.0711,0.1315,-0.0274,0.1231,0.1042,0.0806,0.0659,0.1612,0.0397,0.0139,0.1885,-0.0968,0.0068,0.1201,0.0112,-0.0504,0.1771,0.0388,-0.1038,0.1476,-0.0254,-0.0857,0.1216,-0.0091,0.0381,0.1720,0.0550,0.0199,0.1980,0.1086,-0.1079,0.1339,0.1249,0.0158,0.1843,-0.0163,0.1050,0.1813,0.0303,0.1342,0.1649,0.0925,0.0521,0.1978,0.0459,0.0228,0.2143,-0.0572,0.0680,0.1649,0.0050,-0.0142,0.1978,0.0289,0.1283,0.2323,0.1072,0.1056,0.2050,0.0746,-0.0479,0.2420,-0.0037,-0.0253,0.2692,-0.0530,0.1405,0.2094,-0.0855,-0.0130,0.2463,0.0187,-0.1694,0.2328,-0.0771,-0.1423,0.1939,-0.0528,0.0425,0.2692,0.0430,0.0154,0.3081,0.1230,-0.1755,0.2124,0.1473,0.0093,0.2877,-0.0853,0.0675,0.2881,-0.0454,0.1272,0.2530,0.0828,0.0686,0.3034,0.0429,0.0090,0.3384,-0.1152,-0.0053,0.2788,0.0130,-0.0639,0.3291,0.0122,-0.0857,0.3437,-0.0408,-0.0697,0.3282,-0.0251,0.0260,0.3772,0.0279,0.0100,0.3927,0.0676,-0.0874,0.3282,0.0832,0.0083,0.3772,0.1193,0.0422,0.1004,0.1436,-0.0194,0.0731,0.0398,-0.0837,0.1301,0.0155,-0.0221,0.1575,0.0782,0.0992,0.0890,-0.0256,0.0349,0.1461,-0.1270,-0.0494,0.1002,-0.1430,0.0153,0.0741,-0.0274,0.0625,0.1245,-0.0114,-0.0022,0.1506,-0.0959,-0.1121,0.0865,0.0196,-0.0649,0.1369,0.1224,-0.0197,0.1503,0.1241,-0.0748,0.1338,0.0218,-0.0870,0.1668,0.0201,-0.0320,0.1832,0.1110,0.0342,0.1338,0.0087,0.0219,0.1668,0.1363,-0.1304,0.2016,0.0773,-0.1866,0.1744,-0.0389,-0.0810,0.2113,0.0202,-0.0248,0.2385,0.1882,-0.0659,0.1787,0.0720,0.0397,0.2156,-0.1322,0.0885,0.2018,-0.0604,0.1575,0.1629,0.0869,0.0433,0.2381,0.0151,-0.0257,0.2770,-0.1901,0.0015,0.1814,-0.0427,-0.1127,0.2566,0.1249,0.0587,0.2570,0.1562,-0.0059,0.2220,0.0410,-0.0870,0.2723,0.0096,-0.0224,0.3074,0.0771,0.1213,0.2477,-0.0382,0.0401,0.2981,-0.0566,0.0518,0.3126,-0.0161,0.0895,0.2971,0.0586,0.0277,0.3461,0.0181,-0.0100,0.3616,-0.0861,0.0049,0.2971,-0.0113,-0.0569,0.3461,-0.0800,-0.0831,0.3306,-0.1146,-0.0202,0.2956,-0.0036,0.0667,0.3459,0.0310,0.0038,0.3810,-0.0291,-0.1431,0.3213,0.0819,-0.0563,0.3717,-0.0815,-0.0046,0.2239,-0.0860,0.0503,0.2074,0.0156,0.0677,0.2404,0.0201,0.0128,0.2568,-0.0674,-0.0579,0.2074,0.0341,-0.0405,0.2404,0.0020,0.0844,0.3599,0.0569,0.0897,0.3434,0.0757,-0.0116,0.3764,0.0209,-0.0169,0.3928,-0.0510,0.0696,0.3434,-0.0322,-0.0317,0.3764,0.0811,-0.1167,0.2717,0.0159,-0.1468,0.2366,-0.0628,-0.0299,0.2870,0.0023,0.0002,0.3220,0.1446,-0.0702,0.2624,0.0659,0.0467,0.3127,-0.0906,0.1280,0.1357,0.0032,0.1765,0.1044,0.1091,0.0116,0.1720,0.0152,-0.0369,0.2033,-0.1737,0.0629,0.1044,-0.0679,-0.1020,0.1720,0.1293,-0.0518,0.1901,0.0836,-0.1004,0.1641,-0.0187,-0.0290,0.2145,0.0269,0.0196,0.2405,0.1650,0.0083,0.1765,0.0626,0.0797,0.2269,-0.0753,-0.0663,0.1740,-0.1027,-0.0060,0.1467,-0.0022,0.0634,0.2038,0.0252,0.0032,0.2311,-0.0314,-0.1212,0.1626,0.0691,-0.0517,0.2197,0.0041,-0.0717,0.3490,-0.0346,-0.0699,0.3369,-0.0311,0.0061,0.3369,0.0076,0.0043,0.3490,0.0429,-0.0735,0.3369,0.0463,0.0026,0.3369,0.0974,0.0761,0.1461,0.1486,0.0342,0.1188,0.0892,-0.0726,0.1758,0.0380,-0.0307,0.2032,0.0337,0.1059,0.1347,-0.0257,-0.0008,0.1917,-0.0797,-0.0274,0.1622,-0.0602,0.0364,0.1362,0.0632,0.0176,0.1866,0.0437,-0.0461,0.2126,-0.0851,-0.0971,0.1486,0.0383,-0.1158,0.1990,0.1302,0.0235,0.1960,0.1585,-0.0237,0.1795,0.0751,-0.0843,0.2125,0.0468,-0.0370,0.2289,0.0941,0.0651,0.1795,0.0107,0.0046,0.2125,0.1526,-0.0221,0.2469,0.1284,-0.1000,0.2197,-0.0245,-0.0643,0.2566,-0.0003,0.0135,0.2838,0.1665,0.0594,0.2240,0.0136,0.0951,0.2609,-0.1448,-0.0060,0.2475,-0.1158,0.0892,0.2086,0.0685,0.0612,0.2838,0.0395,-0.0340,0.3227,-0.1530,-0.1101,0.2271,0.0313,-0.1381,0.3023,0.0942,0.0932,0.3027,0.1530,0.0521,0.2677,0.0919,-0.0749,0.3180,0.0330,-0.0338,0.3531,0.0220,0.1246,0.2934,-0.0392,-0.0024,0.3438,-0.0610,-0.0012,0.3583,-0.0439,0.0515,0.3428,0.0514,0.0339,0.3918,0.0344,-0.0188,0.4073,-0.0638,-0.0565,0.3428,0.0315,-0.0741,0.3918,0.0647,-0.1108,0.1150,0.0027,-0.1339,0.0877,-0.0595,-0.0288,0.1448,0.0025,-0.0057,0.1721,0.1226,-0.0709,0.1036,0.0604,0.0342,0.1607,-0.0219,0.1373,0.1148,0.0432,0.1519,0.0888,0.0880,0.0355,0.1392,0.0230,0.0208,0.1652,-0.0852,0.1075,0.1012,-0.0403,-0.0090,0.1516,0.0027,-0.1126,0.1649,-0.0524,-0.1132,0.1484,-0.0625,-0.0107,0.1814,-0.0074,-0.0101,0.1979,0.0569,-0.1024,0.1484,0.0467,0.0001,0.1814,-0.1082,-0.1244,0.2162,-0.1631,-0.0642,0.1890,-0.0552,0.0498,0.2259,-0.0002,-0.0103,0.2532,-0.0448,-0.1775,0.1934,0.0631,-0.0635,0.2303,0.0779,0.0649,0.3272,0.1148,0.0236,0.3117,0.0514,-0.0499,0.3607,0.0146,-0.0086,0.3762,0.0316,0.0952,0.3117,-0.0317,0.0218,0.3607,0.1040,-0.0526,0.3555,0.0654,-0.0924,0.3400,-0.0123,-0.0344,0.3890,0.0262,0.0053,0.4045,0.1310,-0.0043,0.3400,0.0533,0.0536,0.3890,-0.1010,0.1052,0.2752,-0.0449,0.1643,0.2480,0.0765,0.0647,0.2849,0.0204,0.0056,0.3121,-0.1496,0.0382,0.2523,-0.0282,-0.0614,0.2893,-0.0690,0.1311,0.2517,0.0051,0.1645,0.2276,0.0796,0.0334,0.2797,0.0055,0.0001,0.3037,-0.1356,0.0845,0.2276,-0.0611,-0.0465,0.2797,-0.1239,-0.1388,0.1357,-0.1885,-0.0552,0.1044,-0.0453,0.0786,0.1720,0.0192,-0.0050,0.2033,-0.0449,-0.2088,0.1044,0.0983,-0.0750,0.1720,0.1060,0.1555,0.2607,0.1799,0.0888,0.2219,0.0764,-0.0662,0.2971,0.0025,0.0005,0.3360,0.0151,0.2070,0.2403,-0.0884,0.0520,0.3156,0.1161,0.1397,0.2164,0.1836,0.0666,0.1775,0.0664,-0.0784,0.2528,-0.0011,-0.0053,0.2917,0.0303,0.1993,0.1960,-0.0869,0.0543,0.2713,-0.0485,-0.0895,0.3038,-0.0900,-0.0462,0.2687,-0.0190,0.0479,0.3191,0.0225,0.0046,0.3541,0.0056,-0.1271,0.2945,0.0766,-0.0330,0.3448,0.0833,0.0780,0.1684,0.1252,0.0245,0.1443,0.0336,-0.0621,0.1963,-0.0083,-0.0086,0.2204,0.0322,0.1228,0.1443,-0.0594,0.0362,0.1963,-0.0666,-0.0265,0.1970,-0.0820,0.0169,0.1805,-0.0038,0.0529,0.2135,0.0117,0.0095,0.2300,-0.0437,-0.0665,0.1805,0.0345,-0.0305,0.2135,-0.0183,0.0634,0.3330,0.0249,0.0795,0.3166,0.0619,0.0017,0.3495,0.0188,-0.0143,0.3660,-0.0580,0.0400,0.3166,-0.0209,-0.0377,0.3495,0.0949,-0.0402,0.3317,0.0723,-0.0806,0.3162,-0.0030,-0.0506,0.3652,0.0196,-0.0102,0.3807,0.1063,0.0046,0.3162,0.0310,0.0347,0.3652,-0.1060,0.0580,0.2484,-0.0734,0.1179,0.2211,0.0461,0.0636,0.2581,0.0135,0.0037,0.2853,-0.1308,-0.0066,0.2255,-0.0113,-0.0609,0.2624,0.0620,-0.1326,0.1564,-0.0215,-0.1613,0.1251,-0.0892,-0.0121,0.1927,-0.0057,0.0166,0.2240,0.1386,-0.0887,0.1251,0.0709,0.0605,0.1927,0.1138,-0.0192,0.1633,0.0874,-0.0682,0.1372,-0.0106,-0.0326,0.1876,0.0158,0.0164,0.2137,0.1298,0.0371,0.1496,0.0317,0.0727,0.2000,-0.0483,-0.0750,0.1471,-0.0834,-0.0322,0.1198,-0.0172,0.0456,0.1769,0.0179,0.0028,0.2042,-0.0010,-0.1098,0.1357,0.0652,-0.0321,0.1928,0.0170,-0.0622,0.3222,-0.0146,-0.0691,0.3100,-0.0282,-0.0069,0.3100,0.0035,-0.0000,0.3222,0.0487,-0.0553,0.3100,0.0351,0.0069,0.3100,0.0605,0.0773,0.1192,0.1109,0.0545,0.0919,0.0860,-0.0446,0.1490,0.0356,-0.0218,0.1763,0.0027,0.0876,0.1078,-0.0223,-0.0114,0.1649,-0.0602,-0.0445,0.1354,-0.0582,0.0112,0.1093,0.0455,0.0227,0.1597,0.0435,-0.0330,0.1858,-0.0496,-0.1020,0.1217,0.0541,-0.0905,0.1721,0.0984,0.0419,0.1691,0.1314,0.0098,0.1526,0.0771,-0.0571,0.1856,0.0441,-0.0250,0.2021,0.0602,0.0677,0.1526,0.0059,0.0008,0.1856,0.1263,0.0098,0.2200,0.1235,-0.0583,0.1928,-0.0077,-0.0624,0.2297,-0.0049,0.0057,0.2570,0.1200,0.0787,0.1971,-0.0112,0.0746,0.2341,-0.1175,-0.0412,0.2206,-0.1145,0.0420,0.1817,0.0404,0.0591,0.2570,0.0375,-0.0241,0.2959,-0.1016,-0.1271,0.2002,0.0533,-0.1100,0.2755,0.0543,0.0904,0.2759,0.1106,0.0699,0.2408,0.0886,-0.0459,0.2912,0.0322,-0.0253,0.3262,-0.0108,0.1002,0.2666,-0.0329,-0.0156,0.3169,-0.0507,-0.0193,0.3314,-0.0483,0.0269,0.3159,0.0325,0.0333,0.3649,0.0301,-0.0129,0.3804,-0.0411,-0.0646,0.3159,0.0397,-0.0582,0.3649,0.0729,-0.0524,0.0882,0.0278,-0.0845,0.0609,-0.0451,-0.0129,0.1179,0.0000,0.0191,0.1452,0.1111,-0.0077,0.0768,0.0382,0.0638,0.1338,-0.0490,0.1010,0.0880,0.0004,0.1269,0.0619,0.0617,0.0424,0.1123,0.0123,0.0166,0.1383,-0.0937,0.0633,0.0743,-0.0324,-0.0211,0.1247,0.0247,-0.0956,0.1380,-0.0196,-0.1080,0.1216,-0.0499,-0.0273,0.1545,-0.0056,-0.0150,0.1710,0.0663,-0.0757,0.1216,0.0360,0.0050,0.1545,-0.0623,-0.1290,0.1894,-0.1197,-0.0922,0.1622,-0.0571,0.0232,0.1991,0.0003,-0.0136,0.2263,0.0003,-0.1583,0.1665,0.0630,-0.0429,0.2034,0.0619,0.1327,0.1895,0.1322,0.0882,0.1507,0.0688,-0.0542,0.2259,-0.0015,-0.0097,0.2648,-0.0203,0.1623,0.1692,-0.0837,0.0200,0.2444,0.0889,-0.0820,0.2448,0.0428,-0.1203,0.2097,-0.0461,-0.0429,0.2601,0.0001,-0.0045,0.2952,0.1302,-0.0307,0.2355,0.0414,0.0467,0.2859,0.0472,0.0640,0.3004,0.0859,0.0386,0.2849,0.0506,-0.0344,0.3339,0.0119,-0.0090,0.3494,0.0033,0.0786,0.2849,-0.0321,0.0056,0.3339,-0.0670,0.0561,0.3184,-0.0228,0.0967,0.2833,0.0698,0.0239,0.3337,0.0257,-0.0167,0.3688,-0.1056,0.0028,0.3091,-0.0130,-0.0700,0.3595,-0.0036,0.0729,0.2116,0.0401,0.0875,0.1952,0.0745,0.0085,0.2281,0.0308,-0.0060,0.2446,-0.0440,0.0509,0.1952,-0.0097,-0.0281,0.2281,0.0853,0.0229,0.3200,0.1005,-0.0206,0.3035,0.0220,-0.0561,0.3365,0.0068,-0.0126,0.3529,0.0627,0.0630,0.3035,-0.0158,0.0276,0.3365,-0.0622,-0.0814,0.2594,-0.0996,-0.0345,0.2244,-0.0204,0.0528,0.2747,0.0170,0.0059,0.3098,-0.0118,-0.1237,0.2501,0.0674,-0.0365,0.3005,0.1023,0.1068,0.1234,0.1603,0.0403,0.0921,0.0475,-0.0786,0.1598,-0.0105,-0.0120,0.1911,0.0328,0.1613,0.0921,-0.0800,0.0425,0.1598,0.0001,-0.1076,0.1779,-0.0484,-0.0802,0.1519,-0.0109,0.0172,0.2023,0.0377,-0.0102,0.2283,0.0560,-0.1246,0.1643,0.0936,-0.0273,0.2146,-0.0524,0.0556,0.1618,-0.0090,0.0899,0.1345,0.0675,0.0222,0.1915,0.0240,-0.0121,0.2188,-0.0883,0.0090,0.1504,-0.0118,-0.0587,0.2074,-0.0410,-0.0099,0.3368,-0.0473,0.0219,0.3246,0.0152,0.0342,0.3246,0.0214,0.0024,0.3368,-0.0347,-0.0417,0.3246,0.0277,-0.0294,0.3246,0.0976,-0.0562,0.1339,0.0738,-0.1062,0.1066,-0.0248,-0.0792,0.1636,-0.0009,-0.0293,0.1909,0.1091,0.0014,0.1225,0.0106,0.0284,0.1795,-0.0217,0.0670,0.1500,0.0340,0.0639,0.1240,0.0433,-0.0401,0.1744,-0.0123,-0.0370,0.2004,-0.0794,0.0575,0.1364,-0.0701,-0.0464,0.1867,0.0614,-0.0933,0.1837,0.0287,-0.1258,0.1673,-0.0371,-0.0701,0.2002,-0.0043,-0.0377,0.2167,0.0880,-0.0557,0.1673,0.0222,-0.0000,0.2002,0.0288,-0.1206,0.2347,-0.0392,-0.1165,0.2074,-0.0407,0.0148,0.2444,0.0273,0.0106,0.2716,0.0978,-0.1157,0.2118,0.0963,0.0156,0.2487,-0.0173,0.1241,0.2352,0.0658,0.1195,0.1964,0.0798,-0.0357,0.2716,-0.0033,-0.0311,0.3105,-0.1035,0.1100,0.2148,-0.0895,-0.0452,0.2901,0.1109,-0.0502,0.2905,0.0892,-0.1062,0.2554,-0.0261,-0.0818,0.3058,-0.0044,-0.0258,0.3409,0.1220,0.0147,0.2812,0.0067,0.0391,0.3316,0.0033,0.0570,0.3461,0.0495,0.0536,0.3306,0.0542,-0.0273,0.3796,0.0080,-0.0240,0.3951,-0.0422,0.0483,0.3306,-0.0375,-0.0326,0.3796,-0.0607,-0.0669,0.1028,-0.0918,-0.0211,0.0755,-0.0188,0.0503,0.1326,0.0123,0.0045,0.1599,-0.0168,-0.1059,0.0914,0.0562,-0.0345,0.1485,0.1235,0.0528,0.1026,0.1484,0.0029,0.0766,0.0627,-0.0567,0.1269,0.0379,-0.0068,0.1530,0.0867,0.0983,0.0889,0.0011,0.0387,0.1393,-0.0745,-0.0169,0.1527,-0.0860,0.0277,0.1362,-0.0048,0.0564,0.1692,0.0067,0.0117,0.1856,-0.0554,-0.0589,0.1362,0.0258,-0.0302,0.1692,-0.1061,0.0708,0.2040,-0.0682,0.1274,0.1768,0.0459,0.0625,0.2137,0.0080,0.0058,0.2410,-0.1367,0.0087,0.1811,-0.0226,-0.0562,0.2181,0.0846,-0.0426,0.3150,0.0584,-0.0808,0.2995,-0.0139,-0.0440,0.3485,0.0123,-0.0058,0.3640,0.1000,0.0010,0.2995,0.0278,0.0378,0.3485,-0.0056,-0.0872,0.3432,-0.0456,-0.0638,0.3277,-0.0140,0.0109,0.3768,0.0259,-0.0125,0.3922,0.0390,-0.0996,0.3277,0.0705,-0.0249,0.3768,0.0817,0.1107,0.2630,0.1409,0.0769,0.2358,0.0842,-0.0415,0.2727,0.0250,-0.0077,0.2999,0.0176,0.1368,0.2401,-0.0391,0.0184,0.2770,0.1091,0.0899,0.2395,0.1510,0.0364,0.2154,0.0594,-0.0502,0.2674,0.0176,0.0033,0.2915,0.0580,0.1346,0.2154,-0.0335,0.0480,0.2674,-0.1210,0.0807,0.1234,-0.0659,0.1498,0.0921,0.0712,0.0602,0.1598,0.0162,-0.0089,0.1911,-0.1621,0.0026,0.0921,-0.0249,-0.0870,0.1598,0.1638,-0.0474,0.2485,0.1243,-0.1207,0.2096,-0.0222,-0.0675,0.2849,0.0173,0.0058,0.3238,0.1875,0.0367,0.2281,0.0410,0.0898,0.3034,0.1529,-0.0587,0.2042,0.1070,-0.1281,0.1653,-0.0340,-0.0619,0.2406,0.0119,0.0075,0.2794,0.1843,0.0228,0.1838,0.0432,0.0891,0.2590] +,"normals":[0.6370,-0.0267,0.7704,0.9723,-0.1502,0.1790,0.9058,0.3766,0.1942,0.2109,-0.0046,0.9775,0.6370,-0.0267,0.7704,0.2109,-0.0046,0.9775,0.1086,-0.1273,0.9859,0.2738,-0.3673,0.8889,0.6370,-0.0267,0.7704,0.2738,-0.3673,0.8889,0.6250,-0.7672,0.1438,-0.1184,-0.6767,0.7266,-0.0872,-0.9825,0.1643,0.6250,-0.7672,0.1438,0.6250,-0.7672,0.1438,0.2738,-0.3673,0.8889,0.2738,-0.3673,0.8889,0.1086,-0.1273,0.9859,0.1086,-0.1273,0.9859,-0.0504,-0.2663,0.9626,-0.4827,-0.8565,0.1823,-0.7461,-0.4671,0.4744,-0.8298,-0.5503,0.0930,-0.4030,-0.3827,0.8313,-0.5656,-0.0141,0.8245,-0.7980,-0.1401,0.5862,-0.9431,0.2339,0.2364,-0.0353,0.5564,0.8301,-0.4150,0.8830,0.2190,-0.9431,0.2339,0.2364,-0.9431,0.2339,0.2364,-0.2453,0.4608,0.8529,-0.1316,0.1720,0.9763,-0.0322,0.1447,0.9890,0.2774,0.8861,0.3712,-0.6128,0.2868,0.7363,-0.2453,0.4608,0.8529,-0.9431,0.2339,0.2364,-0.9431,0.2339,0.2364,-0.7980,-0.1401,0.5862,-0.7980,-0.1401,0.5862,-0.5656,-0.0141,0.8245,-0.5656,-0.0141,0.8245,-0.3289,0.1863,0.9258,-0.6128,0.2868,0.7363,-0.3289,0.1863,0.9258,-0.6128,0.2868,0.7363,0.7281,0.6849,0.0278,0.6500,0.7597,-0.0172,0.0976,0.9948,0.0295,0.6374,0.7702,0.0219,0.9058,0.3766,0.1942,0.9058,0.3766,0.1942,0.9831,0.1812,0.0246,0.9878,0.1557,0.0007,0.5964,0.8021,0.0301,0.2032,0.9781,0.0455,0.6914,0.7218,0.0307,0.9058,0.3766,0.1942,0.9058,0.3766,0.1942,0.8658,-0.5000,0.0158,0.8957,-0.4429,-0.0371,0.9878,0.1557,0.0007,0.9878,0.1557,0.0007,0.9431,-0.3318,0.0196,0.4299,-0.9022,0.0324,0.8658,-0.5000,0.0158,0.4299,-0.9022,0.0324,0.4906,-0.8711,0.0204,0.8957,-0.4429,-0.0371,0.8658,-0.5000,0.0158,0.9350,-0.3528,0.0364,0.9431,-0.3318,0.0196,0.9878,0.1557,0.0007,0.9878,0.1557,0.0007,0.9831,0.1812,0.0246,0.9350,-0.3528,0.0364,0.9831,0.1812,0.0246,0.9350,-0.3528,0.0364,0.9350,-0.3528,0.0364,0.9723,-0.1502,0.1790,0.9350,-0.3528,0.0364,-0.1540,-0.9873,0.0381,-0.0115,-0.9978,0.0647,0.1218,-0.9922,0.0243,-0.6239,-0.7801,0.0477,-0.5665,-0.8198,0.0838,0.1531,-0.9878,0.0270,0.4299,-0.9022,0.0324,0.4299,-0.9022,0.0324,0.6250,-0.7672,0.1438,0.6250,-0.7672,0.1438,-0.9880,-0.1331,0.0775,-0.9578,-0.2647,0.1119,-0.8803,-0.4715,0.0515,-0.9880,-0.1331,0.0775,-0.8803,-0.4715,0.0515,-0.9431,0.2339,0.2364,-0.9431,0.2339,0.2364,-0.7875,0.6120,0.0724,-0.9880,-0.1331,0.0775,-0.9880,-0.1331,0.0775,-0.9088,0.4061,0.0951,-0.9578,-0.2647,0.1119,-0.9880,-0.1331,0.0775,-0.8208,-0.5701,0.0347,-0.8298,-0.5503,0.0930,-0.4282,0.9026,0.0450,-0.5123,0.8569,0.0573,-0.9088,0.4061,0.0951,-0.9088,0.4061,0.0951,-0.5589,0.8278,0.0485,-0.5186,0.8530,0.0578,-0.9088,0.4061,0.0951,-0.9088,0.4061,0.0951,-0.7875,0.6120,0.0724,-0.7875,0.6120,0.0724,-0.9431,0.2339,0.2364,-0.9431,0.2339,0.2364,0.6560,0.7536,-0.0409,0.9471,0.3082,-0.0898,0.9803,0.1718,-0.0975,0.3930,0.9195,-0.0087,0.9359,-0.3487,-0.0495,0.5974,-0.8019,-0.0014,0.9803,0.1718,-0.0975,0.9803,0.1718,-0.0975,0.9471,0.3082,-0.0898,0.9471,0.3082,-0.0898,0.9878,0.1557,0.0007,0.9878,0.1557,0.0007,0.9359,-0.3487,-0.0495,0.8957,-0.4429,-0.0371,0.5974,-0.8019,-0.0014,0.9359,-0.3487,-0.0495,0.4630,-0.8858,-0.0305,0.5835,-0.8097,-0.0609,0.9803,0.1718,-0.0975,0.9803,0.1718,-0.0975,0.3111,-0.9502,0.0199,-0.2961,-0.9509,0.0895,-0.2768,-0.9572,0.0837,0.1050,-0.9925,0.0630,0.9803,0.1718,-0.0975,0.9803,0.1718,-0.0975,0.5974,-0.8019,-0.0014,0.5974,-0.8019,-0.0014,-0.9708,-0.1544,0.1834,-0.9497,-0.2608,0.1731,-0.9739,-0.1538,0.1667,-0.9708,-0.1544,0.1834,-0.9739,-0.1538,0.1667,-0.9583,0.2439,0.1486,-0.9708,-0.1544,0.1834,-0.9708,-0.1544,0.1834,-0.7327,0.6646,0.1460,-0.9497,-0.2608,0.1731,-0.9708,-0.1544,0.1834,-0.9039,-0.4044,0.1394,-0.9039,-0.4044,0.1394,-0.9578,-0.2647,0.1119,-0.9739,-0.1538,0.1667,-0.9039,-0.4044,0.1394,0.1394,0.9896,0.0340,0.1511,0.9885,-0.0037,-0.7327,0.6646,0.1460,-0.7327,0.6646,0.1460,-0.2241,0.9722,0.0673,-0.6229,0.7770,0.0902,-0.7327,0.6646,0.1460,-0.7327,0.6646,0.1460,-0.9583,0.2439,0.1486,-0.9583,0.2439,0.1486,-0.9088,0.4061,0.0951,-0.9088,0.4061,0.0951,0.3333,-0.9413,-0.0531,0.7943,-0.0126,-0.6074,0.5167,-0.0667,0.8535,0.7441,0.1989,0.6377,0.5167,-0.0667,0.8535,0.6649,-0.7421,-0.0848,0.5167,-0.0667,0.8535,0.5167,-0.0667,0.8535,0.6225,0.7669,-0.1557,0.9803,0.1718,-0.0975,0.9803,0.1718,-0.0975,-0.7280,-0.6634,0.1729,-0.7488,0.1248,0.6509,0.5167,-0.0667,0.8535,-0.7488,0.1248,0.6509,-0.7280,-0.6634,0.1729,-0.4696,0.8782,0.0907,-0.7488,0.1248,0.6509,0.5167,-0.0667,0.8535,-0.7488,0.1248,0.6509,-0.4696,0.8782,0.0907,-0.9133,-0.3720,0.1657,0.5167,-0.0667,0.8535,0.5167,-0.0667,0.8535,-0.9133,-0.3720,0.1657,-0.9497,-0.2608,0.1731,-0.7280,-0.6634,0.1729,-0.9133,-0.3720,0.1657,0.5167,-0.0667,0.8535,-0.9390,0.2508,0.2353,0.8148,-0.3016,-0.4950,0.6225,0.7669,-0.1557,0.5167,-0.0667,0.8535,0.6225,0.7669,-0.1557,0.0750,0.9969,-0.0229,0.5167,-0.0667,0.8535,0.5167,-0.0667,0.8535,-0.4696,0.8782,0.0907,-0.4696,0.8782,0.0907,-0.7327,0.6646,0.1460,-0.7327,0.6646,0.1460,0.3005,-0.0744,0.9508,0.3435,-0.3158,0.8844,0.3435,-0.3158,0.8844,0.3016,-0.0795,0.9501,0.2396,0.1667,0.9564,0.2396,0.1667,0.9564,-0.2656,-0.0230,0.9638,-0.2787,0.2240,0.9339,-0.2787,0.2240,0.9339,-0.2656,-0.0230,0.9638,-0.2360,-0.2686,0.9339,-0.2360,-0.2686,0.9339,0.2412,-0.0591,0.9687,0.1749,-0.2970,0.9387,0.1749,-0.2970,0.9387,0.2412,-0.0591,0.9687,0.2925,0.1823,0.9387,0.2925,0.1823,0.9387,-0.0557,-0.2420,0.9687,-0.2944,-0.1791,0.9387,-0.2944,-0.1791,0.9387,-0.0557,-0.2420,0.9687,0.1864,-0.2899,0.9387,0.1864,-0.2899,0.9387,-0.1866,0.3258,0.9268,0.0368,0.4399,0.8973,0.0368,0.4399,0.8973,-0.1866,0.3258,0.9268,-0.3981,0.1908,0.8973,-0.3981,0.1908,0.8973,0.0647,-0.1750,0.9824,-0.1563,-0.2807,0.9470,-0.1563,-0.2807,0.9470,0.0642,-0.1752,0.9824,0.2814,-0.0587,0.9578,0.2814,-0.0587,0.9578,0.0647,0.2586,0.9638,0.3026,0.1906,0.9339,0.3026,0.1906,0.9339,0.0647,0.2586,0.9638,-0.1771,0.3106,0.9339,-0.1771,0.3106,0.9339,-0.0927,0.3033,0.9484,0.1260,0.4192,0.8991,0.1260,0.4192,0.8991,-0.0901,0.3048,0.9481,-0.3030,0.1697,0.9377,-0.3030,0.1697,0.9377,0.3624,-0.0358,0.9313,0.3902,-0.2832,0.8761,0.3902,-0.2832,0.8761,0.3631,-0.0403,0.9308,0.3123,0.2094,0.9266,0.3122,0.2094,0.9266,0.0000,0.0000,1.0000,0.2188,-0.1073,0.9698,0.2188,-0.1073,0.9698,0.0000,0.0000,1.0000,-0.2188,0.1073,0.9698,-0.2188,0.1073,0.9698,-0.3409,-0.1281,0.9313,-0.4752,0.0815,0.8761,-0.4752,0.0815,0.8761,-0.3435,-0.1244,0.9308,-0.1874,-0.3259,0.9266,-0.1874,-0.3259,0.9266,0.2173,-0.2310,0.9484,0.0723,-0.4317,0.8991,0.0723,-0.4317,0.8991,0.2156,-0.2336,0.9481,0.3469,-0.0182,0.9377,0.3469,-0.0182,0.9377,-0.2425,-0.0536,0.9687,-0.2882,0.1890,0.9387,-0.2882,0.1890,0.9387,-0.2425,-0.0536,0.9687,-0.1817,-0.2929,0.9387,-0.1817,-0.2929,0.9387,-0.1354,0.1283,0.9824,0.0161,0.3209,0.9470,0.0161,0.3209,0.9470,-0.1351,0.1287,0.9824,-0.2783,-0.0717,0.9578,-0.2783,-0.0717,0.9578,0.2173,-0.2310,0.9484,0.0723,-0.4317,0.8991,0.0723,-0.4317,0.8991,0.2156,-0.2336,0.9481,0.3469,-0.0182,0.9377,0.3469,-0.0182,0.9377,-0.3024,-0.0661,0.9508,-0.4477,0.1314,0.8844,-0.4477,0.1314,0.8844,-0.3057,-0.0621,0.9501,-0.1412,-0.2555,0.9564,-0.1412,-0.2555,0.9564,0.3114,-0.2097,0.9268,0.1615,-0.4108,0.8973,0.1615,-0.4108,0.8973,0.3114,-0.2097,0.9268,0.4414,0.0049,0.8973,0.4414,0.0049,0.8973,0.0614,0.3590,0.9313,0.3101,0.3692,0.8761,0.3101,0.3692,0.8761,0.0660,0.3594,0.9308,-0.1868,0.3263,0.9266,-0.1868,0.3263,0.9266,-0.0930,-0.3032,0.9484,-0.3392,-0.2767,0.8991,-0.3392,-0.2767,0.8991,-0.0961,-0.3030,0.9481,0.1560,-0.3104,0.9377,0.1560,-0.3104,0.9377,0.0761,0.2364,0.9687,0.3086,0.1535,0.9387,0.3086,0.1535,0.9387,0.0761,0.2364,0.9687,-0.1611,0.3047,0.9387,-0.1612,0.3047,0.9387,0.1791,0.0522,0.9824,0.2689,-0.1758,0.9470,0.2689,-0.1758,0.9470,0.1793,0.0517,0.9824,0.0785,0.2765,0.9578,0.0785,0.2765,0.9578,-0.3091,-0.0710,0.9484,-0.4092,0.1554,0.8991,-0.4092,0.1554,0.8991,-0.3104,-0.0682,0.9481,-0.1908,-0.2903,0.9377,-0.1908,-0.2903,0.9377,0.0955,0.2945,0.9508,0.3394,0.3203,0.8844,0.3394,0.3203,0.8844,0.1007,0.2952,0.9501,-0.1493,0.2509,0.9564,-0.1493,0.2509,0.9564,-0.3381,-0.1630,0.9268,-0.4362,0.0678,0.8973,-0.4362,0.0678,0.8973,-0.3381,-0.1630,0.9268,-0.2185,-0.3836,0.8973,-0.2185,-0.3836,0.8973,-0.0805,-0.2990,0.9508,-0.3227,-0.3370,0.8844,-0.3227,-0.3370,0.8844,-0.0856,-0.2999,0.9501,0.1618,-0.2430,0.9564,0.1618,-0.2430,0.9564,-0.0640,-0.2399,0.9687,-0.3005,-0.1689,0.9387,-0.3005,-0.1689,0.9387,-0.0640,-0.2399,0.9687,0.1764,-0.2961,0.9387,0.1764,-0.2961,0.9387,-0.2408,0.0606,0.9687,-0.1731,0.2980,0.9387,-0.1731,0.2980,0.9387,-0.2408,0.0606,0.9687,-0.2936,-0.1805,0.9387,-0.2936,-0.1805,0.9387,0.2925,-0.1014,0.9508,0.3133,-0.3458,0.8844,0.3133,-0.3458,0.8844,0.2931,-0.1066,0.9501,0.2538,0.1442,0.9564,0.2538,0.1442,0.9564,-0.2640,-0.0373,0.9638,-0.2904,0.2086,0.9339,-0.2904,0.2086,0.9339,-0.2640,-0.0373,0.9638,-0.2212,-0.2809,0.9339,-0.2212,-0.2809,0.9339,0.3051,0.0866,0.9484,0.4166,-0.1345,0.8991,0.4166,-0.1345,0.8991,0.3066,0.0839,0.9481,0.1758,0.2996,0.9377,0.1758,0.2996,0.9377,-0.0431,-0.3616,0.9313,-0.2911,-0.3844,0.8761,-0.2911,-0.3844,0.8761,-0.0477,-0.3623,0.9308,0.2030,-0.3164,0.9266,0.2030,-0.3164,0.9266,0.0000,0.0000,1.0000,-0.1117,-0.2166,0.9698,-0.1117,-0.2166,0.9698,0.0000,0.0000,1.0000,0.1117,0.2166,0.9698,0.1117,0.2166,0.9698,-0.1212,0.3434,0.9313,0.0911,0.4735,0.8761,0.0911,0.4735,0.8761,-0.1174,0.3460,0.9308,-0.3221,0.1940,0.9266,-0.3221,0.1940,0.9266,-0.2353,-0.2126,0.9484,-0.4331,-0.0636,0.8991,-0.4331,-0.0636,0.8991,-0.2379,-0.2108,0.9481,-0.0252,-0.3464,0.9377,-0.0252,-0.3464,0.9377,-0.0487,0.2435,0.9687,0.1948,0.2843,0.9387,0.1948,0.2844,0.9387,-0.0487,0.2435,0.9687,-0.2891,0.1876,0.9387,-0.2891,0.1876,0.9387,0.1310,0.1328,0.9824,0.3205,-0.0226,0.9470,0.3205,-0.0226,0.9470,0.1314,0.1325,0.9824,-0.0661,0.2797,0.9578,-0.0661,0.2797,0.9578,-0.2353,-0.2126,0.9484,-0.4331,-0.0636,0.8991,-0.4331,-0.0636,0.8991,-0.2379,-0.2108,0.9481,-0.0252,-0.3464,0.9377,-0.0252,-0.3464,0.9377,-0.0600,0.3037,0.9508,0.1404,0.4450,0.8844,0.1404,0.4450,0.8844,-0.0559,0.3069,0.9501,-0.2526,0.1464,0.9564,-0.2526,0.1464,0.9564,-0.2159,-0.3071,0.9268,-0.4140,-0.1532,0.8973,-0.4140,-0.1532,0.8973,-0.2159,-0.3071,0.9268,-0.0040,-0.4414,0.8973,-0.0040,-0.4414,0.8973,0.3577,-0.0686,0.9313,0.3628,-0.3175,0.8761,0.3628,-0.3175,0.8761,0.3580,-0.0732,0.9308,0.3300,0.1802,0.9266,0.3300,0.1802,0.9266,-0.3012,0.0991,0.9484,-0.2698,0.3448,0.8991,-0.2698,0.3447,0.8991,-0.3009,0.1022,0.9481,-0.3135,-0.1497,0.9377,-0.3135,-0.1497,0.9377,0.2348,-0.0808,0.9687,0.1472,-0.3117,0.9387,0.1472,-0.3117,0.9387,0.2348,-0.0808,0.9687,0.3079,0.1550,0.9387,0.3079,0.1550,0.9387,0.0485,-0.1801,0.9824,-0.1812,-0.2653,0.9470,-0.1812,-0.2653,0.9470,0.0480,-0.1803,0.9824,0.2749,-0.0841,0.9578,0.2749,-0.0841,0.9578,-0.1562,0.3414,0.9268,0.0767,0.4347,0.8973,0.0767,0.4347,0.8973,-0.1562,0.3414,0.9268,-0.3790,0.2262,0.8973,-0.3790,0.2262,0.8973,0.3294,0.1799,0.9268,0.4391,-0.0457,0.8973,0.4391,-0.0457,0.8973,0.3294,0.1799,0.9268,0.1988,0.3941,0.8973,0.1988,0.3941,0.8973,-0.1762,-0.0612,0.9824,-0.2775,0.1620,0.9470,-0.2775,0.1620,0.9470,-0.1765,-0.0607,0.9824,-0.0644,-0.2801,0.9578,-0.0644,-0.2801,0.9578,-0.2656,-0.0230,0.9638,-0.2787,0.2240,0.9339,-0.2787,0.2240,0.9339,-0.2656,-0.0230,0.9638,-0.2360,-0.2686,0.9339,-0.2360,-0.2686,0.9339,0.0841,-0.2530,0.9638,-0.1530,-0.3232,0.9339,-0.1530,-0.3232,0.9339,0.0841,-0.2530,0.9638,0.3161,-0.1671,0.9339,0.3161,-0.1671,0.9339,-0.0927,0.3033,0.9484,0.1260,0.4192,0.8991,0.1260,0.4192,0.8991,-0.0900,0.3048,0.9481,-0.3030,0.1697,0.9377,-0.3030,0.1697,0.9377,-0.0648,0.3104,0.9484,0.1636,0.4060,0.8991,0.1636,0.4060,0.8991,-0.0620,0.3117,0.9481,-0.2864,0.1966,0.9377,-0.2864,0.1966,0.9377,0.0000,-0.3625,0.9320,-0.2572,-0.4675,0.8457,-0.2572,-0.4675,0.8457,0.0000,-0.3625,0.9320,0.2572,-0.2268,0.9394,0.2572,-0.2268,0.9394,-0.1009,0.2975,0.9494,0.1760,0.3773,0.9092,0.1760,0.3773,0.9092,-0.1009,0.2975,0.9494,-0.3692,0.1924,0.9092,-0.3692,0.1924,0.9092,0.0000,-0.2931,0.9561,-0.2879,-0.2807,0.9156,-0.2879,-0.2807,0.9156,0.0000,-0.2931,0.9561,0.2879,-0.2807,0.9156,0.2879,-0.2807,0.9156,-0.2931,-0.0041,0.9561,-0.2848,0.2839,0.9156,-0.2848,0.2839,0.9156,-0.2931,-0.0042,0.9561,-0.2766,-0.2918,0.9156,-0.2766,-0.2918,0.9156,0.3158,0.3005,0.8999,0.5009,0.0793,0.8618,0.5009,0.0793,0.8618,0.3158,0.3005,0.8999,0.1040,0.4964,0.8618,0.1040,0.4964,0.8618,-0.1832,-0.1243,0.9752,-0.3627,0.0995,0.9266,-0.3627,0.0995,0.9266,-0.1832,-0.1243,0.9752,0.0117,-0.3376,0.9412,0.0117,-0.3376,0.9412,0.3141,-0.0015,0.9494,0.2994,-0.2893,0.9092,0.2994,-0.2893,0.9092,0.3141,-0.0015,0.9494,0.3022,0.2864,0.9092,0.3022,0.2864,0.9092,0.3188,0.1903,0.9285,0.5025,-0.0259,0.8641,0.5025,-0.0259,0.8641,0.3188,0.1903,0.9285,0.1081,0.3904,0.9143,0.1081,0.3904,0.9143,0.0599,-0.4194,0.9058,-0.2077,-0.5091,0.8353,-0.2077,-0.5090,0.8353,0.0599,-0.4194,0.9058,0.3225,-0.2942,0.8997,0.3225,-0.2942,0.8997,0.0000,0.0000,1.0000,-0.0616,-0.2812,0.9577,-0.0616,-0.2812,0.9577,0.0000,0.0000,1.0000,0.0616,0.2812,0.9577,0.0616,0.2812,0.9577,-0.2392,0.3497,0.9058,-0.0388,0.5484,0.8353,-0.0388,0.5484,0.8353,-0.2392,0.3497,0.9058,-0.4194,0.1213,0.8997,-0.4194,0.1213,0.8997,-0.2018,-0.3116,0.9285,-0.4622,-0.1990,0.8641,-0.4622,-0.1990,0.8641,-0.2018,-0.3116,0.9285,0.0757,-0.3979,0.9143,0.0757,-0.3979,0.9143,-0.1296,0.2629,0.9561,0.1340,0.3791,0.9156,0.1340,0.3791,0.9156,-0.1296,0.2629,0.9561,-0.3823,0.1245,0.9156,-0.3823,0.1245,0.9156,0.1093,0.1925,0.9752,0.3692,0.0711,0.9266,0.3692,0.0711,0.9266,0.1093,0.1925,0.9752,-0.1598,0.2976,0.9412,-0.1598,0.2976,0.9412,-0.2018,-0.3116,0.9285,-0.4622,-0.1990,0.8641,-0.4622,-0.1990,0.8641,-0.2018,-0.3116,0.9285,0.0757,-0.3979,0.9143,0.0757,-0.3979,0.9143,-0.1603,0.3251,0.9320,0.0240,0.5331,0.8457,0.0240,0.5331,0.8457,-0.1603,0.3251,0.9320,-0.3310,0.0896,0.9394,-0.3310,0.0896,0.9394,-0.1503,-0.4092,0.9000,-0.4142,-0.2926,0.8618,-0.4142,-0.2926,0.8618,-0.1503,-0.4092,0.9000,0.1262,-0.4912,0.8618,0.1262,-0.4912,0.8618,0.4226,0.0301,0.9058,0.4931,-0.2432,0.8353,0.4931,-0.2432,0.8353,0.4226,0.0301,0.9058,0.3163,0.3009,0.8996,0.3163,0.3009,0.8996,-0.3707,0.0209,0.9285,-0.4018,0.3030,0.8641,-0.4018,0.3030,0.8641,-0.3707,0.0209,0.9285,-0.3082,-0.2629,0.9143,-0.3082,-0.2629,0.9143,0.2924,-0.0208,0.9561,0.2597,-0.3070,0.9156,0.2597,-0.3070,0.9156,0.2924,-0.0208,0.9561,0.3004,0.2673,0.9156,0.3004,0.2673,0.9156,0.1111,-0.1916,0.9752,-0.1249,-0.3547,0.9266,-0.1249,-0.3547,0.9266,0.1111,-0.1915,0.9752,0.3376,-0.0122,0.9412,0.3376,-0.0122,0.9412,-0.1672,0.3315,0.9285,0.0614,0.4994,0.8641,0.0614,0.4994,0.8641,-0.1672,0.3315,0.9285,-0.3818,0.1354,0.9143,-0.3818,0.1354,0.9143,0.3616,-0.0256,0.9320,0.4482,-0.2897,0.8457,0.4482,-0.2897,0.8457,0.3616,-0.0256,0.9320,0.2444,0.2405,0.9394,0.2444,0.2405,0.9394,-0.2774,0.3363,0.9000,-0.0436,0.5052,0.8618,-0.0436,0.5052,0.8618,-0.2774,0.3363,0.9000,-0.4877,0.1389,0.8618,-0.4877,0.1389,0.8618,-0.3624,0.0073,0.9320,-0.4622,0.2666,0.8457,-0.4622,0.2666,0.8457,-0.3624,0.0073,0.9320,-0.2319,-0.2526,0.9394,-0.2319,-0.2526,0.9394,-0.2931,0.0059,0.9561,-0.2748,0.2935,0.9156,-0.2748,0.2935,0.9156,-0.2931,0.0059,0.9561,-0.2865,-0.2821,0.9156,-0.2865,-0.2821,0.9156,0.0018,0.2931,0.9561,0.2896,0.2790,0.9156,0.2896,0.2790,0.9156,0.0018,0.2931,0.9561,-0.2861,0.2825,0.9156,-0.2861,0.2825,0.9156,-0.0330,-0.3610,0.9320,-0.2987,-0.4422,0.8457,-0.2987,-0.4422,0.8457,-0.0330,-0.3610,0.9320,0.2355,-0.2492,0.9394,0.2355,-0.2492,0.9394,-0.1168,0.2916,0.9494,0.1554,0.3863,0.9092,0.1554,0.3863,0.9092,-0.1168,0.2916,0.9494,-0.3790,0.1722,0.9092,-0.3790,0.1722,0.9092,0.1838,-0.3226,0.9285,-0.0361,-0.5019,0.8641,-0.0361,-0.5019,0.8641,0.1838,-0.3226,0.9285,0.3881,-0.1159,0.9143,0.3881,-0.1159,0.9143,-0.4205,-0.0515,0.9058,-0.5048,0.2179,0.8353,-0.5047,0.2179,0.8353,-0.4205,-0.0515,0.9058,-0.3007,-0.3165,0.8997,-0.3007,-0.3165,0.8997,0.0000,0.0000,1.0000,-0.2799,0.0672,0.9577,-0.2799,0.0672,0.9577,0.0000,0.0000,1.0000,0.2799,-0.0672,0.9577,0.2799,-0.0672,0.9577,0.3544,0.2321,0.9058,0.5491,0.0277,0.8353,0.5491,0.0277,0.8353,0.3544,0.2321,0.9058,0.1297,0.4169,0.8997,0.1297,0.4169,0.8997,-0.3075,0.2080,0.9285,-0.1896,0.4661,0.8641,-0.1896,0.4661,0.8641,-0.3075,0.2080,0.9285,-0.3994,-0.0676,0.9143,-0.3994,-0.0676,0.9143,0.2655,0.1243,0.9561,0.3763,-0.1417,0.9156,0.3763,-0.1417,0.9156,0.2655,0.1243,0.9561,0.1322,0.3797,0.9156,0.1322,0.3797,0.9156,0.1903,-0.1132,0.9752,0.0637,-0.3706,0.9266,0.0637,-0.3706,0.9266,0.1903,-0.1132,0.9752,0.3008,0.1538,0.9412,0.3008,0.1538,0.9412,-0.3075,0.2080,0.9285,-0.1896,0.4661,0.8641,-0.1896,0.4661,0.8641,-0.3075,0.2080,0.9285,-0.3994,-0.0676,0.9143,-0.3994,-0.0676,0.9143,0.3283,0.1537,0.9320,0.5325,-0.0347,0.8457,0.5325,-0.0347,0.8457,0.3283,0.1537,0.9320,0.0963,0.3291,0.9394,0.0963,0.3291,0.9394,-0.4061,0.1586,0.9000,-0.2842,0.4200,0.8619,-0.2842,0.4200,0.8618,-0.4061,0.1586,0.9000,-0.4936,-0.1162,0.8618,-0.4936,-0.1162,0.8618,0.0215,-0.4231,0.9058,-0.2531,-0.4881,0.8353,-0.2531,-0.4881,0.8353,0.0215,-0.4231,0.9058,0.2944,-0.3223,0.8997,0.2944,-0.3223,0.8997,0.0284,0.3702,0.9285,0.3110,0.3956,0.8641,0.3110,0.3956,0.8641,0.0284,0.3702,0.9285,-0.2566,0.3134,0.9143,-0.2566,0.3134,0.9143,-0.0266,-0.2919,0.9561,-0.3122,-0.2534,0.9156,-0.3122,-0.2534,0.9156,-0.0266,-0.2919,0.9561,0.2611,-0.3057,0.9156,0.2611,-0.3057,0.9156,-0.1938,-0.1072,0.9752,-0.3521,0.1320,0.9266,-0.3521,0.1321,0.9266,-0.1938,-0.1072,0.9752,-0.0190,-0.3373,0.9412,-0.0190,-0.3373,0.9412,0.3418,0.2706,0.9000,0.5060,0.0334,0.8618,0.5060,0.0334,0.8618,0.3418,0.2706,0.9000,0.1487,0.4848,0.8618,0.1487,0.4848,0.8618,0.2941,-0.3218,0.9000,0.0692,-0.5024,0.8618,0.0692,-0.5024,0.8618,0.2941,-0.3218,0.9000,0.4941,-0.1140,0.8618,0.4941,-0.1140,0.8618,-0.1206,0.1857,0.9752,0.1068,0.3606,0.9266,0.1068,0.3606,0.9266,-0.1206,0.1857,0.9752,-0.3378,-0.0049,0.9412,-0.3378,-0.0049,0.9412,-0.1009,0.2975,0.9494,0.1760,0.3773,0.9092,0.1760,0.3773,0.9092,-0.1009,0.2975,0.9494,-0.3692,0.1924,0.9092,-0.3692,0.1924,0.9092,-0.2658,-0.1673,0.9494,-0.4079,0.0834,0.9092,-0.4079,0.0834,0.9092,-0.2658,-0.1673,0.9494,-0.1013,-0.4038,0.9092,-0.1013,-0.4038,0.9092,0.3188,0.1903,0.9285,0.5025,-0.0259,0.8641,0.5025,-0.0259,0.8641,0.3188,0.1903,0.9285,0.1081,0.3904,0.9143,0.1081,0.3904,0.9143,0.3348,0.1605,0.9285,0.4981,-0.0715,0.8641,0.4981,-0.0715,0.8641,0.3348,0.1605,0.9285,0.1431,0.3789,0.9143,0.1431,0.3789,0.9143,0.0712,-0.3691,0.9266,-0.1693,-0.5231,0.8353,-0.1693,-0.5231,0.8353,0.0726,-0.3681,0.9269,0.3066,-0.1807,0.9345,0.3066,-0.1807,0.9345,-0.1612,0.2836,0.9452,0.1052,0.4180,0.9023,0.1052,0.4180,0.9023,-0.1612,0.2836,0.9452,-0.4130,0.1235,0.9023,-0.4130,0.1235,0.9023,0.0575,-0.2992,0.9525,-0.2379,-0.3419,0.9091,-0.2379,-0.3419,0.9091,0.0575,-0.2992,0.9525,0.3477,-0.2293,0.9091,0.3477,-0.2293,0.9091,-0.2983,-0.0617,0.9525,-0.3452,0.2330,0.9091,-0.3452,0.2330,0.9091,-0.2983,-0.0617,0.9525,-0.2243,-0.3509,0.9091,-0.2243,-0.3509,0.9091,0.2621,0.3670,0.8925,0.4920,0.1779,0.8522,0.4920,0.1779,0.8522,0.2622,0.3670,0.8925,0.0087,0.5231,0.8522,0.0087,0.5231,0.8522,-0.1628,-0.1632,0.9731,-0.3887,0.0303,0.9208,-0.3887,0.0303,0.9208,-0.1626,-0.1633,0.9731,0.0781,-0.3419,0.9365,0.0781,-0.3419,0.9365,0.3207,0.0600,0.9452,0.3610,-0.2356,0.9023,0.3610,-0.2356,0.9023,0.3207,0.0600,0.9452,0.2513,0.3503,0.9023,0.2513,0.3503,0.9023,0.2873,0.2562,0.9229,0.5142,0.0716,0.8546,0.5142,0.0716,0.8546,0.2865,0.2568,0.9230,0.0336,0.4182,0.9077,0.0336,0.4182,0.9077,0.1429,-0.4146,0.8987,-0.1110,-0.5551,0.8243,-0.1110,-0.5551,0.8243,0.1441,-0.4138,0.8989,0.3851,-0.2359,0.8921,0.3851,-0.2359,0.8921,0.0000,0.0000,1.0000,-0.0076,-0.2991,0.9542,-0.0076,-0.2991,0.9542,0.0000,0.0000,1.0000,0.0076,0.2991,0.9542,0.0076,0.2991,0.9542,-0.3115,0.3086,0.8987,-0.1458,0.5470,0.8243,-0.1458,0.5470,0.8243,-0.3123,0.3074,0.8989,-0.4498,0.0413,0.8921,-0.4498,0.0413,0.8921,-0.1444,-0.3569,0.9229,-0.4295,-0.2916,0.8546,-0.4295,-0.2916,0.8546,-0.1434,-0.3570,0.9230,0.1548,-0.3899,0.9077,0.1548,-0.3899,0.9077,-0.1839,0.2429,0.9525,0.0622,0.4118,0.9091,0.0622,0.4118,0.9091,-0.1839,0.2429,0.9525,-0.4133,0.0519,0.9091,-0.4133,0.0519,0.9091,0.0739,0.2183,0.9731,0.3620,0.1447,0.9208,0.3620,0.1447,0.9208,0.0737,0.2184,0.9731,-0.2212,0.2721,0.9365,-0.2212,0.2721,0.9365,-0.1444,-0.3569,0.9229,-0.4295,-0.2916,0.8546,-0.4295,-0.2916,0.8546,-0.1434,-0.3570,0.9230,0.1548,-0.3899,0.9077,0.1548,-0.3899,0.9077,-0.2271,0.2995,0.9266,-0.0794,0.5441,0.8353,-0.0794,0.5441,0.8353,-0.2279,0.2980,0.9269,-0.3549,0.0265,0.9345,-0.3549,0.0265,0.9345,-0.0728,-0.4451,0.8925,-0.3626,-0.3771,0.8522,-0.3626,-0.3771,0.8522,-0.0728,-0.4451,0.8925,0.2235,-0.4730,0.8522,0.2235,-0.4730,0.8522,0.4237,0.1132,0.8987,0.5458,-0.1501,0.8243,0.5458,-0.1501,0.8243,0.4229,0.1145,0.8989,0.2626,0.3675,0.8921,0.2626,0.3675,0.8921,-0.3815,-0.0513,0.9229,-0.4661,0.2287,0.8546,-0.4661,0.2287,0.8546,-0.3812,-0.0523,0.9230,-0.2621,-0.3276,0.9077,-0.2621,-0.3276,0.9077,0.3025,0.0362,0.9525,0.3242,-0.2615,0.9091,0.3242,-0.2615,0.9091,0.3025,0.0362,0.9525,0.2533,0.3306,0.9091,0.2533,0.3306,0.9091,0.1512,-0.1739,0.9731,-0.0577,-0.3856,0.9208,-0.0577,-0.3856,0.9208,0.1513,-0.1738,0.9731,0.3465,0.0537,0.9365,0.3465,0.0537,0.9365,-0.2352,0.3047,0.9229,-0.0350,0.5180,0.8546,-0.0350,0.5180,0.8546,-0.2359,0.3039,0.9230,-0.4148,0.0631,0.9077,-0.4148,0.0631,0.9077,0.3732,0.0449,0.9266,0.5098,-0.2059,0.8353,0.5098,-0.2059,0.8353,0.3723,0.0463,0.9269,0.2020,0.2930,0.9345,0.2019,0.2930,0.9345,-0.3475,0.2875,0.8925,-0.1426,0.5033,0.8522,-0.1426,0.5033,0.8522,-0.3475,0.2875,0.8925,-0.5211,0.0457,0.8522,-0.5211,0.0457,0.8522,-0.3704,-0.0637,0.9266,-0.5196,0.1799,0.8353,-0.5196,0.1799,0.8352,-0.3695,-0.0651,0.9269,-0.1869,-0.3029,0.9345,-0.1869,-0.3029,0.9345,-0.3003,-0.0515,0.9525,-0.3370,0.2448,0.9091,-0.3370,0.2448,0.9091,-0.3003,-0.0515,0.9525,-0.2362,-0.3430,0.9091,-0.2362,-0.3430,0.9091,-0.0557,0.2995,0.9525,0.2400,0.3404,0.9091,0.2400,0.3404,0.9091,-0.0557,0.2995,0.9525,-0.3463,0.2314,0.9091,-0.3463,0.2314,0.9091,0.0373,-0.3740,0.9267,-0.2162,-0.5055,0.8353,-0.2162,-0.5055,0.8352,0.0388,-0.3731,0.9269,0.2889,-0.2078,0.9345,0.2889,-0.2079,0.9345,-0.1763,0.2745,0.9452,0.0825,0.4231,0.9023,0.0825,0.4231,0.9023,-0.1763,0.2745,0.9452,-0.4190,0.1010,0.9023,-0.4190,0.1010,0.9023,0.2503,-0.2924,0.9229,0.0612,-0.5156,0.8546,0.0612,-0.5156,0.8546,0.2510,-0.2916,0.9230,0.4174,-0.0420,0.9077,0.4174,-0.0420,0.9077,-0.4174,-0.1345,0.8987,-0.5527,0.1222,0.8243,-0.5527,0.1222,0.8243,-0.4166,-0.1357,0.8989,-0.2437,-0.3803,0.8921,-0.2437,-0.3803,0.8921,0.0000,0.0000,1.0000,-0.2989,0.0137,0.9542,-0.2989,0.0137,0.9542,0.0000,0.0000,1.0000,0.2989,-0.0137,0.9542,0.2989,-0.0137,0.9542,0.3149,0.3052,0.8987,0.5498,0.1348,0.8243,0.5498,0.1348,0.8243,0.3136,0.3060,0.8989,0.0504,0.4489,0.8921,0.0504,0.4489,0.8921,-0.3539,0.1516,0.9229,-0.2828,0.4354,0.8546,-0.2828,0.4354,0.8546,-0.3540,0.1506,0.9230,-0.3930,-0.1469,0.9077,-0.3930,-0.1469,0.9077,0.2466,0.1789,0.9525,0.4105,-0.0705,0.9091,0.4105,-0.0705,0.9091,0.2466,0.1789,0.9525,0.0602,0.4121,0.9091,0.0602,0.4121,0.9091,0.2168,-0.0782,0.9731,0.1373,-0.3649,0.9208,0.1373,-0.3649,0.9208,0.2168,-0.0781,0.9731,0.2765,0.2157,0.9365,0.2765,0.2157,0.9365,-0.3539,0.1516,0.9229,-0.2828,0.4354,0.8546,-0.2828,0.4354,0.8546,-0.3540,0.1505,0.9230,-0.3930,-0.1469,0.9077,-0.3930,-0.1469,0.9077,0.3041,0.2210,0.9266,0.5456,0.0684,0.8352,0.5455,0.0684,0.8353,0.3026,0.2218,0.9269,0.0337,0.3543,0.9345,0.0337,0.3543,0.9345,-0.4436,0.0818,0.8925,-0.3697,0.3701,0.8522,-0.3697,0.3701,0.8522,-0.4436,0.0818,0.8925,-0.4774,-0.2139,0.8522,-0.4774,-0.2139,0.8522,0.1046,-0.4259,0.8987,-0.1610,-0.5426,0.8243,-0.1610,-0.5426,0.8243,0.1059,-0.4252,0.8989,0.3621,-0.2700,0.8921,0.3621,-0.2700,0.8921,-0.0436,0.3825,0.9229,0.2381,0.4614,0.8546,0.2381,0.4614,0.8546,-0.0446,0.3822,0.9230,-0.3222,0.2687,0.9077,-0.3222,0.2686,0.9077,0.0301,-0.3032,0.9525,-0.2680,-0.3188,0.9091,-0.2680,-0.3188,0.9091,0.0301,-0.3032,0.9525,0.3254,-0.2600,0.9091,0.3254,-0.2600,0.9091,-0.1769,-0.1477,0.9731,-0.3844,0.0655,0.9208,-0.3843,0.0655,0.9208,-0.1768,-0.1478,0.9731,0.0467,-0.3475,0.9365,0.0467,-0.3475,0.9365,0.2944,0.3417,0.8925,0.5061,0.1324,0.8522,0.5061,0.1324,0.8522,0.2944,0.3417,0.8925,0.0562,0.5201,0.8522,0.0562,0.5201,0.8522,0.3616,-0.2695,0.8925,0.1679,-0.4955,0.8522,0.1679,-0.4955,0.8522,0.3616,-0.2695,0.8925,0.5228,-0.0193,0.8522,0.5228,-0.0193,0.8522,-0.1598,0.1661,0.9731,0.0381,0.3880,0.9208,0.0381,0.3880,0.9208,-0.1599,0.1659,0.9731,-0.3434,-0.0712,0.9365,-0.3434,-0.0712,0.9365,-0.1612,0.2836,0.9452,0.1052,0.4180,0.9023,0.1052,0.4180,0.9023,-0.1612,0.2836,0.9452,-0.4130,0.1235,0.9023,-0.4130,0.1235,0.9023,-0.2384,-0.2228,0.9452,-0.4310,0.0051,0.9023,-0.4310,0.0051,0.9023,-0.2384,-0.2228,0.9452,-0.0240,-0.4304,0.9023,-0.0240,-0.4304,0.9023,0.2873,0.2562,0.9229,0.5142,0.0716,0.8546,0.5142,0.0716,0.8546,0.2865,0.2568,0.9230,0.0336,0.4182,0.9077,0.0336,0.4182,0.9077,0.3094,0.2290,0.9229,0.5186,0.0245,0.8546,0.5186,0.0245,0.8546,0.3086,0.2297,0.9230,0.0715,0.4134,0.9077,0.0715,0.4134,0.9077,-0.3954,-0.1834,0.9000,-0.6170,0.0448,0.7857,-0.6170,0.0448,0.7857,-0.3868,-0.1910,0.9021,-0.1193,-0.3970,0.9100,-0.1194,-0.3970,0.9100,0.2773,0.2622,0.9243,0.4961,-0.0030,0.8683,0.4961,-0.0030,0.8683,0.2773,0.2622,0.9243,0.0248,0.4955,0.8683,0.0248,0.4955,0.8683,-0.3247,-0.1491,0.9340,-0.4484,0.1726,0.8769,-0.4484,0.1726,0.8769,-0.3247,-0.1491,0.9340,-0.1614,-0.4526,0.8769,-0.1613,-0.4526,0.8769,-0.1537,0.3226,0.9340,0.1663,0.4508,0.8769,0.1663,0.4508,0.8769,-0.1537,0.3226,0.9340,-0.4549,0.1549,0.8769,-0.4549,0.1549,0.8769,0.4804,-0.1917,0.8558,0.3280,-0.4926,0.8061,0.3280,-0.4926,0.8061,0.4804,-0.1917,0.8558,0.5770,0.1314,0.8061,0.5770,0.1314,0.8061,-0.2335,0.1405,0.9621,-0.0732,0.4458,0.8921,-0.0732,0.4458,0.8921,-0.2340,0.1393,0.9622,-0.3653,-0.1833,0.9126,-0.3653,-0.1833,0.9126,0.1575,-0.3475,0.9243,-0.1644,-0.4681,0.8683,-0.1644,-0.4681,0.8683,0.1575,-0.3475,0.9243,0.4604,-0.1848,0.8683,0.4604,-0.1848,0.8683,0.3681,-0.2523,0.8949,0.2174,-0.5461,0.8090,0.2174,-0.5461,0.8090,0.3708,-0.2459,0.8955,0.4776,0.0772,0.8751,0.4776,0.0772,0.8751,-0.4236,-0.2730,0.8637,-0.6341,-0.0273,0.7728,-0.6341,-0.0273,0.7728,-0.4165,-0.2800,0.8649,-0.1576,-0.4934,0.8554,-0.1576,-0.4934,0.8554,0.0000,0.0000,1.0000,-0.3431,-0.0749,0.9363,-0.3431,-0.0749,0.9363,0.0000,0.0000,1.0000,0.3431,0.0749,0.9363,0.3431,0.0749,0.9363,0.2592,0.4322,0.8637,0.5566,0.3049,0.7728,0.5566,0.3049,0.7728,0.2498,0.4353,0.8649,-0.0768,0.5122,0.8554,-0.0768,0.5122,0.8554,-0.4418,0.0635,0.8949,-0.4365,0.3937,0.8090,-0.4365,0.3937,0.8090,-0.4413,0.0566,0.8955,-0.3942,-0.2805,0.8751,-0.3942,-0.2805,0.8751,0.2253,0.2773,0.9340,0.4786,0.0435,0.8769,0.4786,0.0435,0.8769,0.2253,0.2773,0.9340,-0.0554,0.4773,0.8769,-0.0554,0.4773,0.8769,0.2716,-0.0227,0.9621,0.2628,-0.3675,0.8921,0.2628,-0.3675,0.8921,0.2715,-0.0215,0.9622,0.2466,0.3260,0.9126,0.2466,0.3260,0.9126,-0.4418,0.0635,0.8949,-0.4365,0.3937,0.8090,-0.4365,0.3937,0.8090,-0.4413,0.0566,0.8955,-0.3942,-0.2805,0.8751,-0.3942,-0.2805,0.8751,0.2736,0.3393,0.9000,0.5732,0.2326,0.7857,0.5732,0.2326,0.7857,0.2624,0.3424,0.9021,-0.0685,0.4088,0.9100,-0.0685,0.4088,0.9100,-0.5157,-0.0405,0.8558,-0.5120,0.2967,0.8061,-0.5120,0.2967,0.8061,-0.5157,-0.0405,0.8558,-0.4594,-0.3730,0.8061,-0.4594,-0.3730,0.8061,0.2424,-0.4419,0.8637,-0.0176,-0.6344,0.7728,-0.0176,-0.6344,0.7728,0.2498,-0.4353,0.8649,0.4810,-0.1921,0.8554,0.4810,-0.1921,0.8554,-0.1636,0.4152,0.8949,0.1258,0.5742,0.8090,0.1258,0.5742,0.8090,-0.1694,0.4114,0.8955,-0.4389,0.2035,0.8751,-0.4389,0.2035,0.8751,0.1257,-0.3345,0.9340,-0.2040,-0.4351,0.8769,-0.2039,-0.4351,0.8769,0.1257,-0.3345,0.9340,0.4400,-0.1930,0.8769,0.4400,-0.1930,0.8769,-0.1567,-0.2230,0.9621,-0.4498,-0.0414,0.8921,-0.4498,-0.0414,0.8921,-0.1555,-0.2236,0.9622,0.1570,-0.3774,0.9126,0.1570,-0.3774,0.9126,0.2777,0.3493,0.8949,0.5601,0.1782,0.8090,0.5601,0.1782,0.8090,0.2715,0.3525,0.8955,-0.0432,0.4819,0.8751,-0.0432,0.4819,0.8751,0.1549,-0.4074,0.9000,-0.0884,-0.6122,0.7857,-0.0884,-0.6122,0.7857,0.1632,-0.3994,0.9021,0.3875,-0.1472,0.9100,0.3875,-0.1472,0.9100,0.2253,0.4657,0.8558,0.5146,0.2923,0.8061,0.5146,0.2923,0.8061,0.2253,0.4657,0.8558,-0.0902,0.5849,0.8061,-0.0902,0.5849,0.8061,-0.1753,0.3991,0.9000,0.0573,0.6159,0.7857,0.0573,0.6159,0.7857,-0.1832,0.3906,0.9021,-0.3945,0.1274,0.9100,-0.3945,0.1274,0.9100,-0.1425,0.3277,0.9340,0.1817,0.4449,0.8769,0.1817,0.4449,0.8769,-0.1425,0.3276,0.9340,-0.4493,0.1705,0.8769,-0.4493,0.1705,0.8769,0.3256,0.1471,0.9340,0.4474,-0.1754,0.8769,0.4474,-0.1753,0.8769,0.3256,0.1471,0.9340,0.1641,0.4516,0.8769,0.1641,0.4516,0.8769,-0.4105,-0.1466,0.9000,-0.6103,0.1008,0.7857,-0.6103,0.1008,0.7857,-0.4026,-0.1551,0.9021,-0.1549,-0.3845,0.9100,-0.1550,-0.3844,0.9100,0.2627,0.2767,0.9243,0.4955,0.0237,0.8683,0.4955,0.0237,0.8683,0.2627,0.2767,0.9243,-0.0019,0.4961,0.8683,-0.0019,0.4961,0.8683,-0.2597,-0.3629,0.8949,-0.5504,-0.2063,0.8090,-0.5504,-0.2063,0.8090,-0.2533,-0.3657,0.8955,0.0675,-0.4790,0.8751,0.0675,-0.4790,0.8751,-0.2644,0.4291,0.8637,-0.0145,0.6345,0.7728,-0.0145,0.6345,0.7728,-0.2715,0.4221,0.8649,-0.4901,0.1675,0.8554,-0.4901,0.1675,0.8554,0.0000,0.0000,1.0000,-0.0679,0.3445,0.9363,-0.0679,0.3445,0.9363,0.0000,0.0000,1.0000,0.0679,-0.3445,0.9363,0.0679,-0.3445,0.9363,0.4269,-0.2679,0.8637,0.2936,-0.5627,0.7728,0.2936,-0.5627,0.7728,0.4302,-0.2585,0.8649,0.5137,0.0665,0.8554,0.5137,0.0665,0.8554,0.0725,0.4404,0.8949,0.4024,0.4284,0.8090,0.4024,0.4284,0.8090,0.0655,0.4401,0.8955,-0.2724,0.3998,0.8751,-0.2724,0.3998,0.8751,0.2727,-0.2309,0.9340,0.0338,-0.4794,0.8769,0.0338,-0.4793,0.8769,0.2727,-0.2309,0.9340,0.4783,0.0457,0.8769,0.4783,0.0457,0.8769,-0.0282,-0.2710,0.9621,-0.3727,-0.2553,0.8921,-0.3727,-0.2553,0.8921,-0.0269,-0.2710,0.9622,0.3209,-0.2531,0.9126,0.3209,-0.2531,0.9126,0.0725,0.4404,0.8949,0.4024,0.4284,0.8090,0.4024,0.4284,0.8090,0.0655,0.4401,0.8955,-0.2724,0.3998,0.8751,-0.2724,0.3998,0.8751,0.3337,-0.2804,0.9000,0.2210,-0.5778,0.7857,0.2210,-0.5778,0.7857,0.3370,-0.2693,0.9021,0.4101,0.0602,0.9100,0.4101,0.0602,0.9100,-0.0300,0.5164,0.8558,0.3070,0.5059,0.8061,0.3070,0.5059,0.8061,-0.0300,0.5164,0.8558,-0.3636,0.4669,0.8061,-0.3636,0.4669,0.8061,-0.4467,-0.2334,0.8637,-0.6339,0.0305,0.7728,-0.6339,0.0305,0.7728,-0.4403,-0.2409,0.8649,-0.2018,-0.4770,0.8554,-0.2018,-0.4770,0.8554,0.4184,0.1552,0.8949,0.5715,-0.1374,0.8090,0.5715,-0.1374,0.8090,0.4147,0.1611,0.8955,0.2123,0.4347,0.8751,0.2123,0.4347,0.8751,-0.3369,-0.1189,0.9340,-0.4309,0.2127,0.8769,-0.4309,0.2127,0.8769,-0.3369,-0.1189,0.9340,-0.2018,-0.4360,0.8769,-0.2018,-0.4361,0.8769,-0.2197,0.1611,0.9621,-0.0323,0.4506,0.8921,-0.0323,0.4506,0.8921,-0.2204,0.1600,0.9622,-0.3805,-0.1494,0.9126,-0.3805,-0.1494,0.9126,0.4610,-0.2346,0.8558,0.2818,-0.5204,0.8061,0.2818,-0.5204,0.8061,0.4610,-0.2346,0.8558,0.5866,0.0784,0.8061,0.5866,0.0784,0.8061,-0.2014,-0.4765,0.8558,-0.4991,-0.3180,0.8061,-0.4991,-0.3180,0.8061,-0.2014,-0.4765,0.8558,0.1197,-0.5795,0.8061,0.1197,-0.5795,0.8061,0.1452,0.2306,0.9621,0.4472,0.0641,0.8921,0.4472,0.0641,0.8921,0.1440,0.2312,0.9622,-0.1759,0.3689,0.9126,-0.1759,0.3689,0.9126,0.2773,0.2622,0.9243,0.4961,-0.0030,0.8683,0.4961,-0.0030,0.8683,0.2773,0.2622,0.9243,0.0248,0.4955,0.8683,0.0248,0.4955,0.8683,-0.3194,0.2087,0.9243,-0.1125,0.4832,0.8683,-0.1125,0.4832,0.8683,-0.3194,0.2087,0.9243,-0.4877,-0.0911,0.8683,-0.4877,-0.0911,0.8683,0.3681,-0.2523,0.8949,0.2174,-0.5461,0.8090,0.2174,-0.5461,0.8090,0.3708,-0.2459,0.8955,0.4776,0.0772,0.8751,0.4776,0.0772,0.8751,0.3436,-0.2848,0.8949,0.1668,-0.5636,0.8090,0.1668,-0.5636,0.8090,0.3469,-0.2786,0.8955,0.4826,0.0335,0.8751,0.4826,0.0335,0.8751] +,"uvs":[0.1785,0.0088,0.1478,0.0429,0.1221,0.0085,0.1853,0.0047,0.0782,0.8104,0.0854,0.8291,0.0863,1.0523,0.0761,0.9244,0.0782,0.8104,0.2018,0.0088,0.1688,0.0637,0.1756,0.0088,0.1860,0.0429,0.1767,0.0637,0.1767,0.0637,0.1655,0.0088,0.1655,0.0088,0.1553,0.0054,0.1553,0.0054,0.1744,0.0065,0.2001,0.0077,0.2194,0.0088,0.2124,0.0429,0.2189,0.0065,0.2279,0.0048,0.2242,0.0084,0.2164,0.0480,0.0337,0.0095,0.0363,0.0439,0.0252,0.0480,0.0252,0.0480,0.0254,0.0086,0.0281,0.0051,0.0398,0.0076,0.0518,0.0099,0.1730,0.0073,0.1869,0.0108,0.1325,0.0480,0.1325,0.0480,0.1374,0.0084,0.1374,0.0084,0.1416,0.0048,0.1416,0.0048,0.1943,0.0043,0.0188,0.0073,0.0175,0.0043,0.0188,0.0073,0.0649,0.2700,0.0630,0.3838,0.0564,0.3822,0.0633,0.2049,0.0743,0.0085,0.0743,0.0085,0.0685,0.2050,0.0666,0.3613,0.0600,0.1401,0.0537,0.2057,0.0632,0.0099,0.0743,0.0085,0.0743,0.0085,0.1504,0.2714,0.1410,0.3841,0.1239,0.3613,0.1239,0.3613,0.1437,0.2065,0.1645,0.2066,0.1777,0.2714,0.1807,0.2065,0.1810,0.3612,0.1763,0.3841,0.1777,0.2714,0.1734,0.1408,0.1761,0.2065,0.1751,0.3613,0.1751,0.3613,0.1721,0.2051,0.1332,0.1408,0.1167,0.2049,0.1332,0.1408,0.1332,0.1408,0.1453,0.0428,0.1332,0.1408,0.1931,0.2700,0.1870,0.3837,0.1910,0.2050,0.1997,0.2051,0.1941,0.3822,0.1871,0.1408,0.1807,0.2065,0.1807,0.2065,0.1767,0.0637,0.1767,0.0637,0.2056,0.2715,0.1979,0.3845,0.2070,0.2066,0.1112,0.2715,0.1038,0.2066,0.1325,0.0480,0.1325,0.0480,0.1261,0.2068,0.1112,0.2715,0.1112,0.2715,0.1225,0.3826,0.1035,0.3845,0.1112,0.2715,0.2065,0.1409,0.2108,0.0428,0.0489,0.2708,0.0493,0.3843,0.0439,0.3826,0.0439,0.3826,0.0450,0.2061,0.0381,0.1417,0.0439,0.3826,0.0439,0.3826,0.0341,0.2068,0.0341,0.2068,0.0252,0.0480,0.0252,0.0480,0.0668,0.4639,0.0707,0.4797,0.0779,0.5819,0.0668,0.4958,0.1336,0.4638,0.1404,0.4794,0.1221,0.5819,0.1221,0.5819,0.1217,0.4797,0.1217,0.4797,0.1239,0.3613,0.1239,0.3613,0.1722,0.4638,0.1763,0.3841,0.1732,0.4796,0.1722,0.4638,0.1766,0.5281,0.1673,0.5934,0.1637,0.5819,0.1637,0.5819,0.1782,0.4958,0.1836,0.4967,0.1720,0.5948,0.1791,0.4638,0.1637,0.5819,0.1637,0.5819,0.1732,0.4796,0.1732,0.4796,0.1830,0.5293,0.1743,0.5950,0.1865,0.4971,0.1144,0.5293,0.1079,0.4971,0.1232,0.4972,0.1144,0.5293,0.1144,0.5293,0.1246,0.5952,0.1119,0.5950,0.1144,0.5293,0.1897,0.4649,0.0997,0.4649,0.1035,0.3845,0.1079,0.4971,0.0997,0.4649,0.0666,0.5283,0.0729,0.5938,0.0673,0.5952,0.0673,0.5952,0.0599,0.4970,0.0535,0.4651,0.0673,0.5952,0.0673,0.5952,0.0547,0.4972,0.0547,0.4972,0.0439,0.3826,0.0439,0.3826,0.1569,0.6976,0.1544,0.7330,0.1454,0.7899,0.1604,0.6984,0.1480,0.7905,0.1586,0.6619,0.1444,0.7889,0.1444,0.7889,0.1534,0.6966,0.1637,0.5819,0.1637,0.5819,0.1622,0.6987,0.1585,0.7338,0.1503,0.7910,0.1229,0.7338,0.1181,0.6987,0.1261,0.6987,0.1229,0.7338,0.1242,0.7910,0.1229,0.7338,0.1266,0.6988,0.1657,0.6636,0.1496,0.7902,0.1496,0.7902,0.1114,0.6636,0.1119,0.5950,0.1181,0.6987,0.1114,0.6636,0.0927,0.7906,0.0850,0.6973,0.0902,0.7321,0.0883,0.6966,0.0959,0.7899,0.0883,0.6966,0.0789,0.6627,0.0907,0.7903,0.0907,0.7903,0.0796,0.6985,0.0796,0.6985,0.0673,0.5952,0.0673,0.5952,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.5171,0.2471,0.5171,0.2471,0.0660,0.6198,0.0660,0.9925,0.5171,0.9925,0.0660,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376,0.6198,0.9887,0.2471,0.9887,0.2471,0.5376,0.6198,0.5376,0.9925,0.9887,0.9925,0.5376] +,"indices":[0,1,2,3,0,2,4,5,6,7,8,6,0,9,10,1,0,10,11,12,13,14,15,11,11,16,17,18,19,11,11,19,20,20,12,11,21,22,20,20,23,21,21,23,24,24,25,21,21,25,26,26,22,21,27,28,29,30,31,27,27,31,32,32,33,27,27,33,34,34,28,27,35,36,37,38,39,35,35,40,41,42,43,35,44,45,32,32,31,46,47,48,49,49,50,47,47,50,51,52,53,47,47,53,54,54,48,47,55,50,49,49,56,55,55,56,34,34,57,55,55,57,58,59,50,55,60,61,62,63,64,60,60,64,10,10,65,60,66,67,68,68,69,70,71,72,73,74,75,71,76,77,2,2,1,78,79,80,10,10,64,81,82,83,68,68,84,82,82,84,20,20,85,82,82,85,86,86,83,82,87,84,68,68,88,87,87,89,90,91,12,87,87,12,20,20,84,87,92,93,86,86,94,92,95,96,97,98,99,100,101,99,102,102,103,104,105,94,86,86,85,105,105,85,20,20,22,105,105,106,26,26,94,105,107,108,109,110,111,107,107,111,34,34,56,107,107,56,49,49,108,107,112,111,113,114,115,112,112,116,117,118,28,112,112,28,34,34,111,112,119,120,121,121,122,119,119,122,49,49,48,119,119,48,54,54,120,119,123,124,125,126,127,123,123,128,129,130,61,123,131,132,68,68,133,134,135,136,137,138,139,135,135,139,86,86,140,135,135,140,141,141,136,135,142,139,143,144,145,142,142,146,68,68,83,142,142,83,86,86,139,142,147,148,141,141,149,147,150,151,102,102,152,153,154,152,155,155,156,157,158,149,141,141,140,158,158,140,86,86,93,158,159,160,102,102,161,162,163,164,165,166,167,163,163,167,49,49,122,163,163,122,121,121,164,163,168,167,169,170,171,168,168,172,173,174,108,168,168,108,49,49,167,168,175,176,177,176,175,141,141,178,176,179,176,178,180,175,181,182,183,180,180,183,184,185,136,180,180,136,141,141,175,180,186,187,188,189,190,155,155,191,192,193,194,195,196,186,197,198,178,196,196,178,141,141,148,196,199,200,155,155,201,202,203,204,205,205,204,121,121,206,205,207,205,208,209,204,210,211,212,209,209,213,214,215,164,209,209,164,121,121,204,209,216,217,218,218,219,216,220,216,219,219,221,220,222,223,224,224,225,222,226,222,225,225,227,226,228,229,230,230,231,228,232,228,231,231,233,232,234,235,236,236,237,234,238,234,237,237,239,238,240,241,242,242,243,240,244,240,243,243,245,244,246,247,248,248,249,246,250,246,249,249,251,250,252,253,254,254,255,252,256,252,255,255,257,256,258,259,260,260,261,258,262,258,261,261,263,262,264,265,266,266,267,264,268,264,267,267,269,268,270,271,272,272,273,270,274,270,273,273,275,274,276,277,278,278,279,276,280,276,279,279,281,280,282,283,284,284,285,282,286,282,285,285,287,286,288,289,290,290,291,288,292,288,291,291,293,292,294,295,296,296,297,294,298,294,297,297,299,298,300,301,302,302,303,300,304,300,303,303,305,304,306,307,308,308,309,306,310,306,309,309,311,310,312,313,314,314,315,312,316,312,315,315,317,316,318,319,320,320,321,318,322,318,321,321,323,322,324,325,326,326,327,324,328,324,327,327,329,328,330,331,332,332,333,330,334,330,333,333,335,334,336,337,338,338,339,336,340,336,339,339,341,340,342,343,344,344,345,342,346,342,345,345,347,346,348,349,350,350,351,348,352,348,351,351,353,352,354,355,356,356,357,354,358,354,357,357,359,358,360,361,362,362,363,360,364,360,363,363,365,364,366,367,368,368,369,366,370,366,369,369,371,370,372,373,374,374,375,372,376,372,375,375,377,376,378,379,380,380,381,378,382,378,381,381,383,382,384,385,386,386,387,384,388,384,387,387,389,388,390,391,392,392,393,390,394,390,393,393,395,394,396,397,398,398,399,396,400,396,399,399,401,400,402,403,404,404,405,402,406,402,405,405,407,406,408,409,410,410,411,408,412,408,411,411,413,412,414,415,416,416,417,414,418,414,417,417,419,418,420,421,422,422,423,420,424,420,423,423,425,424,426,427,428,428,429,426,430,426,429,429,431,430,432,433,434,434,435,432,436,432,435,435,437,436,438,439,440,440,441,438,442,438,441,441,443,442,444,445,446,446,447,444,448,444,447,447,449,448,450,451,452,452,453,450,454,450,453,453,455,454,456,457,458,458,459,456,460,456,459,459,461,460,462,463,464,464,465,462,466,462,465,465,467,466,468,469,470,470,471,468,472,468,471,471,473,472,474,475,476,476,477,474,478,474,477,477,479,478,480,481,482,482,483,480,484,480,483,483,485,484,486,487,488,488,489,486,490,486,489,489,491,490,492,493,494,494,495,492,496,492,495,495,497,496,498,499,500,500,501,498,502,498,501,501,503,502,504,505,506,506,507,504,508,504,507,507,509,508,510,511,512,512,513,510,514,510,513,513,515,514,516,517,518,518,519,516,520,516,519,519,521,520,522,523,524,524,525,522,526,522,525,525,527,526,528,529,530,530,531,528,532,528,531,531,533,532,534,535,536,536,537,534,538,534,537,537,539,538,540,541,542,542,543,540,544,540,543,543,545,544,546,547,548,548,549,546,550,546,549,549,551,550,552,553,554,554,555,552,556,552,555,555,557,556,558,559,560,560,561,558,562,558,561,561,563,562,564,565,566,566,567,564,568,564,567,567,569,568,570,571,572,572,573,570,574,570,573,573,575,574,576,577,578,578,579,576,580,576,579,579,581,580,582,583,584,584,585,582,586,582,585,585,587,586,588,589,590,590,591,588,592,588,591,591,593,592,594,595,596,596,597,594,598,594,597,597,599,598,600,601,602,602,603,600,604,600,603,603,605,604,606,607,608,608,609,606,610,606,609,609,611,610,612,613,614,614,615,612,616,612,615,615,617,616,618,619,620,620,621,618,622,618,621,621,623,622,624,625,626,626,627,624,628,624,627,627,629,628,630,631,632,632,633,630,634,630,633,633,635,634,636,637,638,638,639,636,640,636,639,639,641,640,642,643,644,644,645,642,646,642,645,645,647,646,648,649,650,650,651,648,652,648,651,651,653,652,654,655,656,656,657,654,658,654,657,657,659,658,660,661,662,662,663,660,664,660,663,663,665,664,666,667,668,668,669,666,670,666,669,669,671,670,672,673,674,674,675,672,676,672,675,675,677,676,678,679,680,680,681,678,682,678,681,681,683,682,684,685,686,686,687,684,688,684,687,687,689,688,690,691,692,692,693,690,694,690,693,693,695,694,696,697,698,698,699,696,700,696,699,699,701,700,702,703,704,704,705,702,706,702,705,705,707,706,708,709,710,710,711,708,712,708,711,711,713,712,714,715,716,716,717,714,718,714,717,717,719,718,720,721,722,722,723,720,724,720,723,723,725,724,726,727,728,728,729,726,730,726,729,729,731,730,732,733,734,734,735,732,736,732,735,735,737,736,738,739,740,740,741,738,742,738,741,741,743,742,744,745,746,746,747,744,748,744,747,747,749,748,750,751,752,752,753,750,754,750,753,753,755,754,756,757,758,758,759,756,760,756,759,759,761,760,762,763,764,764,765,762,766,762,765,765,767,766,768,769,770,770,771,768,772,768,771,771,773,772,774,775,776,776,777,774,778,774,777,777,779,778,780,781,782,782,783,780,784,780,783,783,785,784,786,787,788,788,789,786,790,786,789,789,791,790,792,793,794,794,795,792,796,792,795,795,797,796,798,799,800,800,801,798,802,798,801,801,803,802,804,805,806,806,807,804,808,804,807,807,809,808,810,811,812,812,813,810,814,810,813,813,815,814,816,817,818,818,819,816,820,816,819,819,821,820,822,823,824,824,825,822,826,822,825,825,827,826,828,829,830,830,831,828,832,828,831,831,833,832,834,835,836,836,837,834,838,834,837,837,839,838,840,841,842,842,843,840,844,840,843,843,845,844,846,847,848,848,849,846,850,846,849,849,851,850,852,853,854,854,855,852,856,852,855,855,857,856,858,859,860,860,861,858,862,858,861,861,863,862,864,865,866,866,867,864,868,864,867,867,869,868,870,871,872,872,873,870,874,870,873,873,875,874,876,877,878,878,879,876,880,876,879,879,881,880,882,883,884,884,885,882,886,882,885,885,887,886,888,889,890,890,891,888,892,888,891,891,893,892,894,895,896,896,897,894,898,894,897,897,899,898,900,901,902,902,903,900,904,900,903,903,905,904,906,907,908,908,909,906,910,906,909,909,911,910,912,913,914,914,915,912,916,912,915,915,917,916,918,919,920,920,921,918,922,918,921,921,923,922,924,925,926,926,927,924,928,924,927,927,929,928,930,931,932,932,933,930,934,930,933,933,935,934,936,937,938,938,939,936,940,936,939,939,941,940,942,943,944,944,945,942,946,942,945,945,947,946,948,949,950,950,951,948,952,948,951,951,953,952,954,955,956,956,957,954,958,954,957,957,959,958,960,961,962,962,963,960,964,960,963,963,965,964,966,967,968,968,969,966,970,966,969,969,971,970,972,973,974,974,975,972,976,972,975,975,977,976,978,979,980,980,981,978,982,978,981,981,983,982,984,985,986,986,987,984,988,984,987,987,989,988,990,991,992,992,993,990,994,990,993,993,995,994,996,997,998,998,999,996,1000,996,999,999,1001,1000,1002,1003,1004,1004,1005,1002,1006,1002,1005,1005,1007,1006,1008,1009,1010,1010,1011,1008,1012,1008,1011,1011,1013,1012,1014,1015,1016,1016,1017,1014,1018,1014,1017,1017,1019,1018,1020,1021,1022,1022,1023,1020,1024,1020,1023,1023,1025,1024,1026,1027,1028,1028,1029,1026,1030,1026,1029,1029,1031,1030,1032,1033,1034,1034,1035,1032,1036,1032,1035,1035,1037,1036,1038,1039,1040,1040,1041,1038,1042,1038,1041,1041,1043,1042,1044,1045,1046,1046,1047,1044,1048,1044,1047,1047,1049,1048,1050,1051,1052,1052,1053,1050,1054,1050,1053,1053,1055,1054,1056,1057,1058,1058,1059,1056,1060,1056,1059,1059,1061,1060,1062,1063,1064,1064,1065,1062,1066,1062,1065,1065,1067,1066,1068,1069,1070,1070,1071,1068,1072,1068,1071,1071,1073,1072,1074,1075,1076,1076,1077,1074,1078,1074,1077,1077,1079,1078,1080,1081,1082,1082,1083,1080,1084,1080,1083,1083,1085,1084,1086,1087,1088,1088,1089,1086,1090,1086,1089,1089,1091,1090,1092,1093,1094,1094,1095,1092,1096,1092,1095,1095,1097,1096,1098,1099,1100,1100,1101,1098,1102,1098,1101,1101,1103,1102,1104,1105,1106,1106,1107,1104,1108,1104,1107,1107,1109,1108,1110,1111,1112,1112,1113,1110,1114,1110,1113,1113,1115,1114,1116,1117,1118,1118,1119,1116,1120,1116,1119,1119,1121,1120,1122,1123,1124,1124,1125,1122,1126,1122,1125,1125,1127,1126,1128,1129,1130,1130,1131,1128,1132,1128,1131,1131,1133,1132,1134,1135,1136,1136,1137,1134,1138,1134,1137,1137,1139,1138,1140,1141,1142,1142,1143,1140,1144,1140,1143,1143,1145,1144,1146,1147,1148,1148,1149,1146,1150,1146,1149,1149,1151,1150,1152,1153,1154,1154,1155,1152,1156,1152,1155,1155,1157,1156,1158,1159,1160,1160,1161,1158,1162,1158,1161,1161,1163,1162,1164,1165,1166,1166,1167,1164,1168,1164,1167,1167,1169,1168,1170,1171,1172,1172,1173,1170,1174,1170,1173,1173,1175,1174,1176,1177,1178,1178,1179,1176,1180,1176,1179,1179,1181,1180,1182,1183,1184,1184,1185,1182,1186,1182,1185,1185,1187,1186,1188,1189,1190,1190,1191,1188,1192,1188,1191,1191,1193,1192,1194,1195,1196,1196,1197,1194,1198,1194,1197,1197,1199,1198,1200,1201,1202,1202,1203,1200,1204,1200,1203,1203,1205,1204,1206,1207,1208,1208,1209,1206,1210,1206,1209,1209,1211,1210,1212,1213,1214,1214,1215,1212,1216,1212,1215,1215,1217,1216,1218,1219,1220,1220,1221,1218,1222,1218,1221,1221,1223,1222,1224,1225,1226,1226,1227,1224,1228,1224,1227,1227,1229,1228,1230,1231,1232,1232,1233,1230,1234,1230,1233,1233,1235,1234,1236,1237,1238,1238,1239,1236,1240,1236,1239,1239,1241,1240,1242,1243,1244,1244,1245,1242,1246,1242,1245,1245,1247,1246,1248,1249,1250,1250,1251,1248,1252,1248,1251,1251,1253,1252,1254,1255,1256,1256,1257,1254,1258,1254,1257,1257,1259,1258,1260,1261,1262,1262,1263,1260,1264,1260,1263,1263,1265,1264,1266,1267,1268,1268,1269,1266,1270,1266,1269,1269,1271,1270,1272,1273,1274,1274,1275,1272,1276,1272,1275,1275,1277,1276,1278,1279,1280,1280,1281,1278,1282,1278,1281,1281,1283,1282,1284,1285,1286,1286,1287,1284,1288,1284,1287,1287,1289,1288,1290,1291,1292,1292,1293,1290,1294,1290,1293,1293,1295,1294,1296,1297,1298,1298,1299,1296,1300,1296,1299,1299,1301,1300,1302,1303,1304,1304,1305,1302,1306,1302,1305,1305,1307,1306,1308,1309,1310,1310,1311,1308,1312,1308,1311,1311,1313,1312,1314,1315,1316,1316,1317,1314,1318,1314,1317,1317,1319,1318,1320,1321,1322,1322,1323,1320,1324,1320,1323,1323,1325,1324,1326,1327,1328,1328,1329,1326,1330,1326,1329,1329,1331,1330,1332,1333,1334,1334,1335,1332,1336,1332,1335,1335,1337,1336,1338,1339,1340,1340,1341,1338,1342,1338,1341,1341,1343,1342,1344,1345,1346,1346,1347,1344,1348,1344,1347,1347,1349,1348,1350,1351,1352,1352,1353,1350,1354,1350,1353,1353,1355,1354,1356,1357,1358,1358,1359,1356,1360,1356,1359,1359,1361,1360,1362,1363,1364,1364,1365,1362,1366,1362,1365,1365,1367,1366,1368,1369,1370,1370,1371,1368,1372,1368,1371,1371,1373,1372,1374,1375,1376,1376,1377,1374,1378,1374,1377,1377,1379,1378,1380,1381,1382,1382,1383,1380,1384,1380,1383,1383,1385,1384,1386,1387,1388,1388,1389,1386,1390,1386,1389,1389,1391,1390,1392,1393,1394,1394,1395,1392,1396,1392,1395,1395,1397,1396,1398,1399,1400,1400,1401,1398,1402,1398,1401,1401,1403,1402,1404,1405,1406,1406,1407,1404,1408,1404,1407,1407,1409,1408,1410,1411,1412,1412,1413,1410,1414,1410,1413,1413,1415,1414] +,"subMeshes":[{"materialIndex":0,"verticesStart":0,"verticesCount":1416,"indexStart":0,"indexCount":2904}]}],"multiMaterials":[],"shadowGenerators":[],"skeletons":[]} \ No newline at end of file diff --git a/src/shaders/butterflyMaterial/butterflyFragment.glsl b/src/shaders/butterflyMaterial/butterflyFragment.glsl new file mode 100644 index 000000000..9071c4f77 --- /dev/null +++ b/src/shaders/butterflyMaterial/butterflyFragment.glsl @@ -0,0 +1,59 @@ +precision highp float; + +uniform float time; + +uniform vec3 lightDirection; + +uniform sampler2D butterflyTexture; + +varying vec3 vPosition; +varying vec2 vUV; + +varying mat4 normalMatrix; +varying vec3 vNormal; + +varying vec3 vOriginalWorldPosition; + +// src: https://gist.github.com/mairod/a75e7b44f68110e1576d77419d608786 +vec3 hueShift( vec3 color, float hueAdjust ){ + const vec3 kRGBToYPrime = vec3 (0.299, 0.587, 0.114); + const vec3 kRGBToI = vec3 (0.596, -0.275, -0.321); + const vec3 kRGBToQ = vec3 (0.212, -0.523, 0.311); + + const vec3 kYIQToR = vec3 (1.0, 0.956, 0.621); + const vec3 kYIQToG = vec3 (1.0, -0.272, -0.647); + const vec3 kYIQToB = vec3 (1.0, -1.107, 1.704); + + float YPrime = dot (color, kRGBToYPrime); + float I = dot (color, kRGBToI); + float Q = dot (color, kRGBToQ); + float hue = atan (Q, I); + float chroma = sqrt (I * I + Q * Q); + + hue += hueAdjust; + + Q = chroma * sin (hue); + I = chroma * cos (hue); + + vec3 yIQ = vec3 (YPrime, I, Q); + + return vec3( dot (yIQ, kYIQToR), dot (yIQ, kYIQToG), dot (yIQ, kYIQToB) ); +} + +void main() { + vec4 finalColor = texture(butterflyTexture, vUV); + if(finalColor.a < 0.1) discard; + + finalColor.rgb = hueShift(finalColor.rgb, vOriginalWorldPosition.x * 10.0 + vOriginalWorldPosition.z * 10.0); + + vec3 normalW = normalize((normalMatrix * vec4(vNormal, 0.0)).xyz); + + float ndl1 = max(dot(normalW, lightDirection), 0.0); + float ndl2 = max(dot(-normalW, lightDirection), 0.0); + float ndl = ndl1 + ndl2; + + // ambient lighting + ndl = clamp(ndl + 0.1, 0.0, 1.0); + + gl_FragColor = vec4(finalColor.rgb * ndl, 1.0);// apply color and lighting +} \ No newline at end of file diff --git a/src/shaders/butterflyMaterial/butterflyVertex.glsl b/src/shaders/butterflyMaterial/butterflyVertex.glsl new file mode 100644 index 000000000..599fc5112 --- /dev/null +++ b/src/shaders/butterflyMaterial/butterflyVertex.glsl @@ -0,0 +1,78 @@ +precision highp float; + +attribute vec3 position; +attribute vec3 normal; +attribute vec2 uv; + +uniform mat4 viewProjection; + +//uniform mat4 world; + +uniform vec3 playerPosition; + +uniform float time; + +varying vec3 vPosition; +varying vec2 vUV; + +varying mat4 normalMatrix; +varying vec3 vNormal; + +varying vec3 vOriginalWorldPosition; + +#include "../utils/rotateAround.glsl"; + +float easeOut(float t, float a) { + return 1.0 - pow(1.0 - t, a); +} + +float easeIn(float t, float alpha) { + return pow(t, alpha); +} + +#include "../utils/remap.glsl"; + +#include + +void main() { + #include + + vec3 objectWorld = vec3(finalWorld[3].x, finalWorld[3].y, finalWorld[3].z); + vOriginalWorldPosition = objectWorld; + + // high frequency movement for wing flap + objectWorld.y += 0.1 * sin(5.0 * time + objectWorld.x * 10.0 + objectWorld.z * 10.0); + // low frequency movement of larger amplitude for general movement + objectWorld.y += 0.5 * sin(0.2 * time + objectWorld.x * 15.0 + objectWorld.z * 15.0); + + vec3 butterflyForward = vec3(1.0, 0.0, 0.0); + + float rotationY = sin(0.5 * time + vOriginalWorldPosition.x * 10.0 + vOriginalWorldPosition.z * 10.0) * 3.14; + vec3 rotatedPosition = rotateAround(position, vec3(0.0, 1.0, 0.0), rotationY); + butterflyForward = rotateAround(butterflyForward, vec3(0.0, 1.0, 0.0), rotationY); + + vec3 flyPosition = rotateAround(rotatedPosition, butterflyForward, sign(position.z) * cos(10.0 * time + objectWorld.x * 10.0 + objectWorld.z * 10.0)); + flyPosition.y += 3.0; + + objectWorld += butterflyForward * 0.5 * sin(0.5 * time + vOriginalWorldPosition.x * 10.0 + vOriginalWorldPosition.z * 10.0); + + // avoid the player + vec3 playerToButterfly = objectWorld - playerPosition; + playerToButterfly.y = 0.0; + float distanceToPlayer = length(playerToButterfly); + if (distanceToPlayer < 2.0) { + objectWorld += normalize(playerToButterfly) * (2.0 - distanceToPlayer); + } + + finalWorld[3].xyz = objectWorld; + + vec4 outPosition = viewProjection * finalWorld * vec4(flyPosition, 1.0); + gl_Position = outPosition; + + vPosition = flyPosition; + vUV = uv; + + normalMatrix = transpose(inverse(finalWorld)); + + vNormal = normal; +} \ No newline at end of file diff --git a/src/shaders/grassMaterial/grassFragment.glsl b/src/shaders/grassMaterial/grassFragment.glsl new file mode 100644 index 000000000..f07546666 --- /dev/null +++ b/src/shaders/grassMaterial/grassFragment.glsl @@ -0,0 +1,32 @@ +precision highp float; + +uniform float time; + +uniform vec3 lightDirection; + +varying vec3 vPosition; + +varying mat4 normalMatrix; +varying vec3 vNormal; + +void main() { + vec3 baseColor = vec3(0.05, 0.2, 0.01); + vec3 tipColor = vec3(0.5, 0.5, 0.1); + + vec3 finalColor = mix(baseColor, tipColor, pow(vPosition.y, 4.0)); + + vec3 normalW = normalize((normalMatrix * vec4(vNormal, 0.0)).xyz); + + float ndl1 = max(dot(normalW, lightDirection), 0.0); + float ndl2 = max(dot(-normalW, lightDirection), 0.0); + float ndl = ndl1 + ndl2; + + // ambient lighting + ndl = clamp(ndl + 0.1, 0.0, 1.0); + + float density = 0.2; + float aoForDensity = mix(1.0, 0.25, density); + float ao = mix(aoForDensity, 1.0, pow(vPosition.y, 2.0)); + + gl_FragColor = vec4(finalColor * ndl * ao, 1.0);// apply color and lighting +} \ No newline at end of file diff --git a/src/shaders/grassMaterial/grassVertex.glsl b/src/shaders/grassMaterial/grassVertex.glsl new file mode 100644 index 000000000..fa5336ee8 --- /dev/null +++ b/src/shaders/grassMaterial/grassVertex.glsl @@ -0,0 +1,87 @@ +precision highp float; + +attribute vec3 position; +attribute vec3 normal; + +uniform mat4 view; +uniform mat4 projection; + +uniform vec3 cameraPosition; +uniform vec3 playerPosition; + +uniform float time; + +uniform sampler2D perlinNoise; + +varying vec3 vPosition; + +varying mat4 normalMatrix; +varying vec3 vNormal; + +#include "../utils/rotateAround.glsl"; + +float easeOut(float t, float a) { + return 1.0 - pow(1.0 - t, a); +} + +float easeIn(float t, float alpha) { + return pow(t, alpha); +} + +#include "../utils/remap.glsl"; + +#include + +void main() { + #include + + // wind + vec3 objectWorld = world3.xyz; + float windStrength = texture2D(perlinNoise, objectWorld.xz * 0.007 + 0.1 * time).r; + float windDir = texture2D(perlinNoise, objectWorld.xz * 0.005 + 0.05 * time).r * 2.0 * 3.14; + + float windLeanAngle = remap(windStrength, 0.0, 1.0, 0.25, 1.0); + windLeanAngle = easeIn(windLeanAngle, 2.0) * 0.75; + + // curved grass blade + float leanAmount = 0.3; + float curveAmount = leanAmount * position.y; + float objectDistance = length(objectWorld - playerPosition); + + // account for player presence + vec3 playerDirection = (objectWorld - playerPosition) / objectDistance; + float maxDistance = 3.0; + float distance01 = objectDistance / maxDistance; + float influence = 1.0 + 8.0 * smoothstep(0.0, 1.0, 1.0 - distance01); + curveAmount *= influence; + curveAmount += windLeanAngle * smoothstep(0.2, 1.0, distance01); + + vec3 leanAxis = rotateAround(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), windDir * smoothstep(0.2, 1.0, distance01)); + leanAxis = normalize(mix(cross(vec3(0.0, 1.0, 0.0), playerDirection), leanAxis, smoothstep(0.0, 1.0, 1.0 - distance01))); + + + vec3 leaningPosition = rotateAround(position, leanAxis, curveAmount); + + vec3 leaningNormal = rotateAround(normal, leanAxis, curveAmount); + + vec4 worldPosition = finalWorld * vec4(leaningPosition, 1.0); + + + //vec3 viewDir = normalize(cameraPosition - worldPosition); + //float viewDotNormal = abs(dot(viewDir, leaningNormal)); + //float viewSpaceThickenFactor = easeOut(1.0 - viewDotNormal, 4.0); + + //viewSpaceThickenFactor *= smoothstep(0.0, 0.2, viewDotNormal); + + vec4 viewPosition = view * worldPosition; + //viewPosition.x += viewSpaceThickenFactor * leaningNormal.y; + + vec4 outPosition = projection * viewPosition; + gl_Position = outPosition; + + vPosition = position; + + normalMatrix = transpose(inverse(finalWorld)); + + vNormal = leaningNormal; +} \ No newline at end of file diff --git a/src/shaders/telluricPlanetMaterial/fragment.glsl b/src/shaders/telluricPlanetMaterial/fragment.glsl index eeba6a0cc..8c395f379 100644 --- a/src/shaders/telluricPlanetMaterial/fragment.glsl +++ b/src/shaders/telluricPlanetMaterial/fragment.glsl @@ -130,7 +130,7 @@ void main() { vec2 uv = toUV(vUnitSamplePoint); // trick from https://www.shadertoy.com/view/3dVSzm to avoid Greenwich artifacts vec2 df = fwidth(uv); - if(df.x > 0.5) df.x = 0.0; + if (df.x > 0.5) df.x = 0.0; vec4 lutResult = textureLod(lut, uv, log2(max(df.x, df.y) * 1024.0)); // moisture @@ -169,15 +169,11 @@ void main() { ); beachFactor = smoothSharpener(beachFactor, 2.0); - float steepFactor = slope;//smoothSharpener(slope, steepSharpness); - steepFactor = smoothstep(0.3, 0.7, steepFactor); - steepFactor = smoothSharpener(steepFactor, steepSharpness); - - plainFactor = 1.0 - steepFactor; + plainFactor = 1.0;//- steepFactor; // apply beach factor plainFactor *= 1.0 - beachFactor; - beachFactor *= 1.0 - steepFactor; + //beachFactor *= 1.0 - steepFactor; // blend with desert factor when above water desertFactor = smoothstep(0.5, 0.3, moisture01); @@ -192,6 +188,14 @@ void main() { beachFactor *= 1.0 - snowFactor; desertFactor *= 1.0 - snowFactor; + float steepFactor = slope; + steepFactor = smoothstep(0.05, 0.3, steepFactor); + steepFactor = smoothSharpener(steepFactor, steepSharpness); + snowFactor *= 1.0 - steepFactor; + plainFactor *= 1.0 - steepFactor; + beachFactor *= 1.0 - steepFactor; + desertFactor *= 1.0 - steepFactor; + // blend with bottom factor when under water bottomFactor = smoothstep(waterLevel01, waterLevel01 - 1e-2, elevation01); bottomFactor = smoothSharpener(bottomFactor, 2.0); diff --git a/src/ts/assets.ts b/src/ts/assets.ts index 5968bc159..8702aa67b 100644 --- a/src/ts/assets.ts +++ b/src/ts/assets.ts @@ -1,4 +1,5 @@ -import "@babylonjs/loaders/glTF/2.0"; +import "@babylonjs/loaders"; +import "@babylonjs/core/Loading/Plugins/babylonFileLoader"; import "@babylonjs/core/Loading/loadingScreen"; import "@babylonjs/core/Animations/animatable"; @@ -19,13 +20,15 @@ import plumeParticle from "../asset/textures/plume.png"; import atmosphereLUT from "../shaders/textures/atmosphereLUT.glsl"; import spaceship from "../asset/spaceship/spaceship2.glb"; -//import spacestation from "../asset/spacestation/spacestation.glb"; import shipCarrier from "../asset/spacestation/shipcarrier.glb"; import banana from "../asset/banana/banana.glb"; import endeavorSpaceship from "../asset/spaceship/endeavour.glb"; import character from "../asset/character.glb"; import rock from "../asset/rock.glb"; +import tree from "../asset/tree/tree.babylon"; +import treeTexturePath from "../asset/tree/Tree.png"; + import ouchSound from "../asset/sound/ouch.mp3"; import engineRunningSound from "../asset/sound/engineRunning.mp3"; @@ -70,8 +73,9 @@ export class Assets { private static Spacestation: Mesh; private static Banana: Mesh; private static Character: Mesh; - static Rock: Mesh; + public static Rock: Mesh; + public static Tree: Mesh; public static ScatterCube: Mesh; public static OuchSound: Sound; @@ -164,16 +168,39 @@ export class Assets { const rockTask = Assets.manager.addMeshTask("rockTask", "", "", rock); rockTask.onSuccess = function (task: MeshAssetTask) { - Assets.Rock = task.loadedMeshes[0] as Mesh; + Assets.Rock = task.loadedMeshes[0].getChildMeshes()[0] as Mesh; + Assets.Rock.position.y = 0.1; + Assets.Rock.scaling.scaleInPlace(0.2); + Assets.Rock.bakeCurrentTransformIntoVertices(); Assets.Rock.isVisible = false; - for (const mesh of Assets.Rock.getChildMeshes()) { - mesh.isVisible = false; - } - console.log("Rock loaded"); }; + const treeTask = Assets.manager.addMeshTask("treeTask", "", "", tree); + treeTask.onSuccess = function (task: MeshAssetTask) { + Assets.Tree = task.loadedMeshes[0] as Mesh; + Assets.Tree.position.y = -1; + Assets.Tree.scaling.scaleInPlace(3); + Assets.Tree.bakeCurrentTransformIntoVertices(); + Assets.Tree.isVisible = false; + + const treeMaterial = new StandardMaterial("treeMaterial", scene); + + treeMaterial.opacityTexture = null; + treeMaterial.backFaceCulling = false; + + const treeTexture = new Texture(treeTexturePath, scene); + treeTexture.hasAlpha = true; + + treeMaterial.diffuseTexture = treeTexture; + treeMaterial.specularColor.set(0, 0, 0); + + Assets.Tree.material = treeMaterial; + + console.log("Tree loaded"); + } + const ouchSoundTask = Assets.manager.addBinaryFileTask("ouchSoundTask", ouchSound); ouchSoundTask.onSuccess = function (task) { Assets.OuchSound = new Sound("OuchSound", task.data, scene); diff --git a/src/ts/index.ts b/src/ts/index.ts index b3b8c113b..33be4aecf 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -121,7 +121,7 @@ terminaModel.orbit.period = 60 * 60; const termina = StarSystemHelper.makeStar(starSystem, terminaModel);*/ const planetModel = new TelluricPlanemoModel(0.4233609183800225, sunModel); -planetModel.physicalProperties.minTemperature = -37; +planetModel.physicalProperties.minTemperature = -55; planetModel.physicalProperties.maxTemperature = 30; planetModel.orbit.period = 60 * 60 * 24 * 365.25; @@ -163,7 +163,7 @@ aresModel.physicalProperties.minTemperature = -30; aresModel.physicalProperties.maxTemperature = 20; aresModel.physicalProperties.pressure = 0.5; aresModel.physicalProperties.waterAmount = 0.2; -aresModel.physicalProperties.oceanLevel = Settings.OCEAN_DEPTH * aresModel.physicalProperties.waterAmount * aresModel.physicalProperties.pressure; +aresModel.physicalProperties.oceanLevel = 0; aresModel.orbit.period = 60 * 60 * 24 * 365.24; aresModel.orbit.radius = 4020 * planet.getRadius(); @@ -177,7 +177,7 @@ const ares = StarSystemHelper.makeTelluricPlanet(starSystem, aresModel); ares.postProcesses.splice(ares.postProcesses.indexOf(PostProcessType.OCEAN), 1); ares.postProcesses.splice(ares.postProcesses.indexOf(PostProcessType.CLOUDS), 1); -ares.material.colorSettings.plainColor.copyFromFloats(143 / 255, 45 / 255, 45 / 255); +ares.material.colorSettings.plainColor.copyFromFloats(139 / 255, 59 / 255, 24 / 255); ares.material.colorSettings.desertColor.copyFromFloats(178 / 255, 107 / 255, 42 / 255); ares.material.colorSettings.beachColor.copyFrom(ares.material.colorSettings.plainColor); ares.material.colorSettings.bottomColor.copyFrom(ares.material.colorSettings.plainColor.scale(0.9)); diff --git a/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts b/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts index b901d1107..5ff70d3da 100644 --- a/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts +++ b/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts @@ -107,7 +107,7 @@ export class TelluricPlanemoMaterial extends ShaderMaterial { mode: ColorMode.DEFAULT, snowColor: new Color3(0.7, 0.7, 0.7), - steepColor: new Color3(115, 100, 100).scaleInPlace(1 / 255), + steepColor: new Color3(60, 60, 60).scaleInPlace(1 / 255), plainColor: new Color3( //TODO: make this better Math.max(0.22 + centeredRand(model.rng, 82) / 20, 0), diff --git a/src/ts/planemos/telluricPlanemo/telluricPlanemoModel.ts b/src/ts/planemos/telluricPlanemo/telluricPlanemoModel.ts index 4891cab31..8686b306a 100644 --- a/src/ts/planemos/telluricPlanemo/telluricPlanemoModel.ts +++ b/src/ts/planemos/telluricPlanemo/telluricPlanemoModel.ts @@ -59,7 +59,7 @@ export class TelluricPlanemoModel implements PlanemoModel { mass: mass, axialTilt: normalRandom(0, 0.2, this.rng, GENERATION_STEPS.AXIAL_TILT), rotationPeriod: (60 * 60 * 24) / 10, - minTemperature: randRangeInt(-50, 5, this.rng, 80), + minTemperature: randRangeInt(-60, 5, this.rng, 80), maxTemperature: randRangeInt(10, 50, this.rng, 81), pressure: Math.max(normalRandom(0.9, 0.2, this.rng, GENERATION_STEPS.PRESSURE), 0), waterAmount: Math.max(normalRandom(1.0, 0.3, this.rng, GENERATION_STEPS.WATER_AMOUNT), 0), @@ -108,7 +108,7 @@ export class TelluricPlanemoModel implements PlanemoModel { max_mountain_height: 10e3, continent_base_height: this.physicalProperties.oceanLevel * 1.9, - mountains_frequency: (20 * this.radius) / 1000e3 + mountains_frequency: (60 * this.radius) / 1000e3 }; if (this.isSatelliteOfTelluric) { diff --git a/src/ts/planemos/telluricPlanemo/terrain/chunks/chunkTree.ts b/src/ts/planemos/telluricPlanemo/terrain/chunks/chunkTree.ts index bc35977bd..1144456d1 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/chunks/chunkTree.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/chunks/chunkTree.ts @@ -39,6 +39,8 @@ export class ChunkTree { private deleteSemaphores: DeleteSemaphore[] = []; + readonly planetModel: TelluricPlanemoModel; + readonly planetName: string; readonly planetSeed: number; readonly terrainSettings: TerrainSettings; @@ -65,6 +67,8 @@ export class ChunkTree { this.planetSeed = planetModel.seed; this.terrainSettings = planetModel.terrainSettings; + this.planetModel = planetModel; + this.minDepth = 0; // max depth is minimal depth to get a certain minimum space between vertices @@ -149,6 +153,8 @@ export class ChunkTree { * @returns The updated tree */ private updateLODRecursively(observerPositionW: Vector3, chunkForge: ChunkForge, tree: quadTree = this.tree, walked: number[] = []): quadTree { + if (walked.length == this.maxDepth) return tree; + const nodeRelativePosition = getChunkSphereSpacePositionFromPath(walked, this.direction, this.rootChunkLength / 2, getRotationQuaternion(this.parent)); const nodePositionW = nodeRelativePosition.add(this.parent.getAbsolutePosition()); @@ -157,21 +163,29 @@ export class ChunkTree { const chunkApproxPosition = nodePositionW.add(direction.scale(additionalHeight)); const distanceToNodeSquared = Vector3.DistanceSquared(chunkApproxPosition, observerPositionW); - if (walked.length >= this.maxDepth) return tree; - - const distanceThreshold = Settings.CHUNK_RENDER_DISTANCE_MULTIPLIER * (this.rootChunkLength / 2 ** walked.length); + const subdivisionDistanceThreshold = Settings.CHUNK_RENDER_DISTANCE_MULTIPLIER * (this.rootChunkLength / 2 ** walked.length); + const deletionDistanceThreshold = 20e3 + 1.5 * subdivisionDistanceThreshold; - if (distanceToNodeSquared < distanceThreshold ** 2 || walked.length < this.minDepth) { - // if the node is near the camera or if we are loading minimal LOD - if (tree instanceof Array && tree.length === 4) { - return [ - this.updateLODRecursively(observerPositionW, chunkForge, tree[0], walked.concat([0])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[1], walked.concat([1])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[2], walked.concat([2])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[3], walked.concat([3])) - ]; + // the 1.5 is to avoid creation/deletion oscillations + if (distanceToNodeSquared > deletionDistanceThreshold ** 2 && walked.length >= this.minDepth && tree instanceof Array) { + const newChunk = this.createChunk(walked, chunkForge); + if (tree.length === 0 && walked.length === 0) { + return newChunk; } + this.requestDeletion(tree, [newChunk]); + return newChunk; + } + + if (tree instanceof Array) { + return [ + this.updateLODRecursively(observerPositionW, chunkForge, tree[0], walked.concat([0])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[1], walked.concat([1])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[2], walked.concat([2])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[3], walked.concat([3])) + ]; + } + if (distanceToNodeSquared < subdivisionDistanceThreshold ** 2 || walked.length < this.minDepth) { if (tree instanceof PlanetChunk) { if (!tree.isReady()) return tree; if (!tree.mesh.isVisible) return tree; @@ -189,22 +203,7 @@ export class ChunkTree { if (tree instanceof PlanetChunk) return tree; - // the 1.5 is to avoid creation/deletion oscillations - if (distanceToNodeSquared > (20e3 + 1.1 * distanceThreshold) ** 2 && walked.length >= this.minDepth) { - const newChunk = this.createChunk(walked, chunkForge); - if (tree.length === 0 && walked.length === 0) { - return newChunk; - } - this.requestDeletion(tree, [newChunk]); - return newChunk; - } - - return [ - this.updateLODRecursively(observerPositionW, chunkForge, tree[0], walked.concat([0])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[1], walked.concat([1])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[2], walked.concat([2])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[3], walked.concat([3])) - ]; + throw new Error("This should never happen"); } /** @@ -214,7 +213,7 @@ export class ChunkTree { * @returns The new Chunk */ private createChunk(path: number[], chunkForge: ChunkForge): PlanetChunk { - const chunk = new PlanetChunk(path, this.direction, this.parentAggregate, this.material, this.rootChunkLength, this.scene); + const chunk = new PlanetChunk(path, this.direction, this.parentAggregate, this.material, this.planetModel, this.rootChunkLength, this.scene); chunk.onDestroyPhysicsShapeObservable.add((index) => { this.onChunkPhysicsShapeDeletedObservable.notifyObservers(index); @@ -241,8 +240,8 @@ export class ChunkTree { this.executeOnEveryChunk((chunk) => { chunk.registerPhysicsShapeDeletion(index); }); - for (const mutex of this.deleteSemaphores) { - for (const chunk of mutex.chunksToDelete) { + for (const deleteSemaphore of this.deleteSemaphores) { + for (const chunk of deleteSemaphore.chunksToDelete) { chunk.registerPhysicsShapeDeletion(index); } } @@ -250,12 +249,7 @@ export class ChunkTree { public computeCulling(camera: Camera): void { this.executeOnEveryChunk((chunk: PlanetChunk) => { - if (!chunk.isReady()) return; - - chunk.mesh.setEnabled(true); // this is needed to update the world matrix - chunk.getTransform().computeWorldMatrix(true); - - chunk.mesh.setEnabled(isSizeOnScreenEnough(chunk, camera)); + chunk.computeCulling(camera); }); } diff --git a/src/ts/planemos/telluricPlanemo/terrain/chunks/planetChunk.ts b/src/ts/planemos/telluricPlanemo/terrain/chunks/planetChunk.ts index 0472598ef..33a4e1ec6 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/chunks/planetChunk.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/chunks/planetChunk.ts @@ -14,6 +14,12 @@ import { ThinInstancePatch } from "../instancePatch/thinInstancePatch"; import { randomDownSample } from "../instancePatch/matrixBuffer"; import { Assets } from "../../../../assets"; import { CollisionMask } from "../../../../settings"; +import { isSizeOnScreenEnough } from "../../../../utils/isObjectVisibleOnScreen"; +import { Camera } from "@babylonjs/core/Cameras/camera"; +import { IPatch } from "../instancePatch/iPatch"; +import { createGrassBlade } from "../../../../proceduralAssets/grass/grassBlade"; +import { TelluricPlanemoModel } from "../../telluricPlanemoModel"; +import { createButterfly } from "../../../../proceduralAssets/butterfly/butterfly"; export class PlanetChunk implements Transformable { public readonly mesh: Mesh; @@ -22,13 +28,15 @@ export class PlanetChunk implements Transformable { private readonly transform: TransformNode; + readonly planetModel: TelluricPlanemoModel; + readonly chunkSideLength: number; private loaded = false; private readonly parent: TransformNode; - private readonly instancePatches: ThinInstancePatch[] = []; + private readonly instancePatches: IPatch[] = []; readonly onDestroyPhysicsShapeObservable = new Observable(); @@ -44,7 +52,7 @@ export class PlanetChunk implements Transformable { private disposed = false; - constructor(path: number[], direction: Direction, parentAggregate: PhysicsAggregate, material: Material, rootLength: number, scene: Scene) { + constructor(path: number[], direction: Direction, parentAggregate: PhysicsAggregate, material: Material, planetModel: TelluricPlanemoModel, rootLength: number, scene: Scene) { const id = `D${direction}P${path.join("")}`; this.depth = path.length; @@ -53,6 +61,8 @@ export class PlanetChunk implements Transformable { this.transform = new TransformNode(`${id}Transform`, scene); + this.planetModel = planetModel; + this.mesh = new Mesh(`Chunk${id}`, scene); this.mesh.setEnabled(false); @@ -102,14 +112,14 @@ export class PlanetChunk implements Transformable { // The following is a code snippet to use the approximate normals of the mesh instead of // the analytic normals. This is useful for debugging purposes /*if(!analyticNormal) { - this.mesh.createNormals(true); - const normals = this.mesh.getVerticesData(VertexBuffer.NormalKind); - if (normals === null) throw new Error("Mesh has no normals"); - for(let i = 0; i < normals.length; i++) { - normals[i] = -normals[i]; - } - this.mesh.setVerticesData(VertexBuffer.NormalKind, normals); - }*/ + this.mesh.createNormals(true); + const normals = this.mesh.getVerticesData(VertexBuffer.NormalKind); + if (normals === null) throw new Error("Mesh has no normals"); + for(let i = 0; i < normals.length; i++) { + normals[i] = -normals[i]; + } + this.mesh.setVerticesData(VertexBuffer.NormalKind, normals); + }*/ this.mesh.freezeNormals(); if (this.depth > 3) { @@ -125,10 +135,23 @@ export class PlanetChunk implements Transformable { this.onRecieveVertexDataObservable.notifyObservers(); - const cubePatch = new ThinInstancePatch(this.parent, randomDownSample(alignedInstancesMatrixBuffer, 300)); - cubePatch.createInstances(Assets.ScatterCube); + const rockPatch = new ThinInstancePatch(this.parent, randomDownSample(alignedInstancesMatrixBuffer, 4)); + rockPatch.createInstances(Assets.Rock); + this.instancePatches.push(rockPatch); + + if(this.planetModel.physicalProperties.pressure > 0 && this.planetModel.physicalProperties.oceanLevel > 0) { + const treePatch = new ThinInstancePatch(this.parent, randomDownSample(instancesMatrixBuffer, 6)); + treePatch.createInstances(Assets.Tree); + this.instancePatches.push(treePatch); - this.instancePatches.push(cubePatch); + const butterflyPatch = new ThinInstancePatch(this.parent, instancesMatrixBuffer); + butterflyPatch.createInstances(createButterfly(this.mesh.getScene())); + this.instancePatches.push(butterflyPatch); + + /*const grassPatch = new ThinInstancePatch(this.parent, instancesMatrixBuffer); + grassPatch.createInstances(createGrassBlade(this.mesh.getScene(), 3)); + this.instancePatches.push(grassPatch);*/ + } } public getAverageHeight(): number { @@ -184,4 +207,24 @@ export class PlanetChunk implements Transformable { this.disposed = true; } + + computeCulling(camera: Camera) { + if (!this.isReady()) return; + + this.mesh.setEnabled(true); // this is needed to update the world matrix + this.getTransform().computeWorldMatrix(true); + + const distanceVector = camera.globalPosition.subtract(this.getTransform().getAbsolutePosition()); + const dirToCenterOfPlanet = this.getTransform().getAbsolutePosition().subtract(this.parent.getAbsolutePosition()).normalizeToNew(); + + const normalComponent = dirToCenterOfPlanet.scale(distanceVector.dot(dirToCenterOfPlanet)); + + const tangentialDistance = distanceVector.subtract(normalComponent).length(); + + this.instancePatches.forEach((patch) => { + patch.setEnabled(tangentialDistance < 200); + }); + + this.mesh.setEnabled(isSizeOnScreenEnough(this, camera)); + } } diff --git a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/hierarchyInstancePatch.ts b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/hierarchyInstancePatch.ts index 4316585e7..79c2dac60 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/hierarchyInstancePatch.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/hierarchyInstancePatch.ts @@ -6,15 +6,15 @@ import { Mesh } from "@babylonjs/core/Meshes/mesh"; export class HierarchyInstancePatch implements IPatch { private baseRoot: TransformNode | null = null; - readonly position: Vector3; readonly instances: TransformNode[] = []; private positions: Vector3[] = []; private rotations: Quaternion[] = []; private scalings: Vector3[] = []; + readonly parent: TransformNode; - constructor(position: Vector3, matrixBuffer: Float32Array) { - this.position = position; + constructor(parent: TransformNode, matrixBuffer: Float32Array) { + this.parent = parent; // decompose matrix buffer into position, rotation and scaling for (let i = 0; i < matrixBuffer.length; i += 16) { @@ -40,9 +40,9 @@ export class HierarchyInstancePatch implements IPatch { this.baseRoot = null; } - public static CreateSquare(position: Vector3, size: number, resolution: number) { + public static CreateSquare(parent: TransformNode, position: Vector3, size: number, resolution: number) { const buffer = createSquareMatrixBuffer(position, size, resolution); - return new HierarchyInstancePatch(position, buffer); + return new HierarchyInstancePatch(parent, buffer); } public createInstances(baseRoot: TransformNode): void { @@ -67,15 +67,16 @@ export class HierarchyInstancePatch implements IPatch { } } + public setEnabled(enabled: boolean) { + if (this.baseRoot === null) return; + this.baseRoot.setEnabled(enabled); + } + public getNbInstances(): number { if (this.baseRoot === null) return 0; return this.instances.length; } - public getPosition(): Vector3 { - return this.position; - } - public dispose() { this.clearInstances(); if (this.baseRoot !== null) this.baseRoot.dispose(); diff --git a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/iPatch.ts b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/iPatch.ts index 1cac26e7e..747a0e0d8 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/iPatch.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/iPatch.ts @@ -22,10 +22,7 @@ export interface IPatch { */ getNbInstances(): number; - /** - * Returns the position of the patch. - */ - getPosition(): Vector3; + setEnabled(enabled: boolean): void; /** * Disposes the patch and all its instances and buffers. diff --git a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/instancePatch.ts b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/instancePatch.ts index 63f36e5ed..8f6eecafd 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/instancePatch.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/instancePatch.ts @@ -66,6 +66,11 @@ export class InstancePatch implements IPatch { } } + public setEnabled(enabled: boolean) { + if (this.baseMesh === null) return; + this.baseMesh.setEnabled(enabled); + } + public getNbInstances(): number { if (this.baseMesh === null) return 0; return this.baseMesh.instances.length; diff --git a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/thinInstancePatch.ts b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/thinInstancePatch.ts index de039c7e0..0fb5b2b34 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/instancePatch/thinInstancePatch.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/instancePatch/thinInstancePatch.ts @@ -1,8 +1,11 @@ import { Mesh } from "@babylonjs/core/Meshes/mesh"; import "@babylonjs/core/Meshes/thinInstanceMesh"; import { TransformNode } from "@babylonjs/core/Meshes/transformNode"; +import { IPatch } from "./iPatch"; +import { createSquareMatrixBuffer } from "./matrixBuffer"; +import { Vector3 } from "@babylonjs/core/Maths/math.vector"; -export class ThinInstancePatch { +export class ThinInstancePatch implements IPatch { private baseMesh: Mesh | null = null; readonly matrixBuffer: Float32Array; readonly parent: TransformNode; @@ -12,10 +15,10 @@ export class ThinInstancePatch { this.matrixBuffer = matrixBuffer; } - /*public static CreateSquare(position: Vector3, size: number, resolution: number) { - const buffer = createSquareMatrixBuffer(position, size, resolution); - return new ThinInstancePatch(position, buffer); - }*/ + public static CreateSquare(parent: TransformNode, position: Vector3, size: number, resolution: number) { + const buffer = createSquareMatrixBuffer(position, size, resolution); + return new ThinInstancePatch(parent, buffer); + } public clearInstances(): void { if (this.baseMesh === null) return; @@ -45,6 +48,15 @@ export class ThinInstancePatch { return this.baseMesh.thinInstanceCount; } + public setEnabled(enabled: boolean) { + if (this.baseMesh === null) return; + if (enabled) { + this.baseMesh.thinInstanceCount = this.matrixBuffer.length / 16; + } else { + this.baseMesh.thinInstanceCount = 0; + } + } + public dispose() { this.clearInstances(); if (this.baseMesh !== null) this.baseMesh.dispose(); diff --git a/src/ts/planemos/telluricPlanemo/terrain/workers/buildScript.ts b/src/ts/planemos/telluricPlanemo/terrain/workers/buildScript.ts index 8206358df..946f730fd 100644 --- a/src/ts/planemos/telluricPlanemo/terrain/workers/buildScript.ts +++ b/src/ts/planemos/telluricPlanemo/terrain/workers/buildScript.ts @@ -14,7 +14,7 @@ function handle_build(data: TransferBuildData): void { const size = data.planetDiameter / 2 ** data.depth; const space_between_vertices = size / nbSubdivisions; //console.log(data.depth, space_between_vertices); - const scatter_per_square_meter = space_between_vertices < Settings.MIN_DISTANCE_BETWEEN_VERTICES ? 0.4 : 0; + const scatter_per_square_meter = space_between_vertices < Settings.MIN_DISTANCE_BETWEEN_VERTICES ? 0.02 : 0; const flat_area = size * size; const max_nb_instances = Math.floor(flat_area * scatter_per_square_meter * 2.0); diff --git a/src/ts/postProcesses/oceanPostProcess.ts b/src/ts/postProcesses/oceanPostProcess.ts index 6aa9d5e6e..38f5c44e1 100644 --- a/src/ts/postProcesses/oceanPostProcess.ts +++ b/src/ts/postProcesses/oceanPostProcess.ts @@ -32,8 +32,8 @@ export class OceanPostProcess extends UberPostProcess implements ObjectPostProce const oceanUniforms: OceanUniforms = { oceanRadius: planet.getBoundingRadius(), - depthModifier: 0.001, - alphaModifier: 0.001, + depthModifier: 0.0015, + alphaModifier: 0.0025, specularPower: 1.0, smoothness: 0.9, waveBlendingSharpness: 0.1, diff --git a/src/ts/proceduralAssets/butterfly/butterfly.ts b/src/ts/proceduralAssets/butterfly/butterfly.ts new file mode 100644 index 000000000..765861f58 --- /dev/null +++ b/src/ts/proceduralAssets/butterfly/butterfly.ts @@ -0,0 +1,92 @@ +import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData"; +import { Mesh } from "@babylonjs/core/Meshes/mesh"; +import { Scene } from "@babylonjs/core/scene"; +import { createButterflyMaterial } from "./butterflyMaterial"; + +export function createButterfly(scene: Scene) { + const positions = new Float32Array(6 * 3); + const indices = new Uint32Array(4 * 3); + const uvs = new Float32Array(6 * 2); + + // butter fly is made of 4 triangles (2 squares touching each other) + // 0--1 + // | /| + // |/ | + // 2--3 + positions[0] = 0; + positions[1] = 0; + positions[2] = -1; + + positions[3] = 1; + positions[4] = 0; + positions[5] = -1; + + positions[6] = 0; + positions[7] = 0.0; + positions[8] = 0.0; + + positions[9] = 1; + positions[10] = 0; + positions[11] = 0; + + positions[12] = 0; + positions[13] = 0; + positions[14] = 1; + + positions[15] = 1; + positions[16] = 0; + positions[17] = 1; + + // first square + indices[0] = 0; + indices[1] = 1; + indices[2] = 2; + + indices[3] = 1; + indices[4] = 3; + indices[5] = 2; + + // second square + indices[6] = 2; + indices[7] = 3; + indices[8] = 4; + + indices[9] = 3; + indices[10] = 5; + indices[11] = 4; + + // uvs (0,0) is bottom left, (1,1) is top right + uvs[0] = 0; + uvs[1] = 0; + + uvs[2] = 0; + uvs[3] = 1; + + uvs[4] = 0.5; + uvs[5] = 0; + + uvs[6] = 0.5; + uvs[7] = 1; + + uvs[8] = 1; + uvs[9] = 0; + + uvs[10] = 1; + uvs[11] = 1; + + const vertexData = new VertexData(); + vertexData.positions = positions; + vertexData.indices = indices; + vertexData.uvs = uvs; + + const mesh = new Mesh("butterfly", scene); + vertexData.applyToMesh(mesh); + mesh.createNormals(false); + + mesh.scaling.scaleInPlace(0.2); + mesh.bakeCurrentTransformIntoVertices(); + + mesh.material = createButterflyMaterial(scene); + + return mesh; +} diff --git a/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts b/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts new file mode 100644 index 000000000..9454e19b3 --- /dev/null +++ b/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts @@ -0,0 +1,46 @@ +import { Scene } from "@babylonjs/core/scene"; +import { Effect } from "@babylonjs/core/Materials/effect"; +import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial"; +import butterflyFragment from "../../../shaders/butterflyMaterial/butterflyFragment.glsl"; +import butterflyVertex from "../../../shaders/butterflyMaterial/butterflyVertex.glsl"; + +import butterflyTexture from "../../../asset/butterfly.png"; +import { Texture } from "@babylonjs/core/Materials/Textures/texture"; +import { TransformNode } from "@babylonjs/core/Meshes/transformNode"; +import { Vector3 } from "@babylonjs/core/Maths/math.vector"; +import { PointLight } from "@babylonjs/core/Lights/pointLight"; + +export function createButterflyMaterial(scene: Scene, player?: TransformNode) { + const shaderName = "butterflyMaterial"; + Effect.ShadersStore[`${shaderName}FragmentShader`] = butterflyFragment; + Effect.ShadersStore[`${shaderName}VertexShader`] = butterflyVertex; + + const butterflyMaterial = new ShaderMaterial(shaderName, scene, shaderName, { + attributes: ["position", "normal", "uv"], + uniforms: ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "playerPosition"], + defines: ["#define INSTANCES"], + samplers: ["butterflyTexture"] + }); + + butterflyMaterial.setTexture("butterflyTexture", new Texture(butterflyTexture, scene)); + butterflyMaterial.backFaceCulling = false; + + let elapsedSeconds = 0; + scene.onBeforeRenderObservable.add(() => { + elapsedSeconds += scene.getEngine().getDeltaTime() / 1000; + + if(scene.activeCamera === null) throw new Error("Active camera is null"); + + const star = scene.lights[1]; + if(!(star instanceof PointLight)) throw new Error("Could not find star light"); + + const lightDirection = star.position.subtract(scene.activeCamera.globalPosition).normalize(); + butterflyMaterial.setVector3("lightDirection", lightDirection); + + const playerPosition = player?.position ?? new Vector3(0, 0, 0); + butterflyMaterial.setVector3("playerPosition", playerPosition); + butterflyMaterial.setFloat("time", elapsedSeconds); + }); + + return butterflyMaterial; +} diff --git a/src/ts/proceduralAssets/grass/grassBlade.ts b/src/ts/proceduralAssets/grass/grassBlade.ts new file mode 100644 index 000000000..2993dc2b1 --- /dev/null +++ b/src/ts/proceduralAssets/grass/grassBlade.ts @@ -0,0 +1,89 @@ +import { Mesh } from "@babylonjs/core/Meshes/mesh"; +import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData"; +import { Scene } from "@babylonjs/core/scene"; +import { Vector3 } from "@babylonjs/core/Maths/math.vector"; +import { createGrassMaterial } from "./grassMaterial"; + +// rotation using https://www.wikiwand.com/en/Rodrigues%27_rotation_formula +function rotateAround(vector: Vector3, axis: Vector3, theta: number) { + // Please note that unit vector are required, i did not divide by the norms + return vector + .scale(Math.cos(theta)) + .addInPlace(Vector3.Cross(axis, vector).scaleInPlace(Math.sin(theta))) + .addInPlace(axis.scale(Vector3.Dot(axis, vector) * (1.0 - Math.cos(theta)))); +} + +export function createGrassBlade(scene: Scene, nbStacks: number) { + const nbVertices = 2 * nbStacks + 1; + const nbTriangles = 2 * (nbStacks - 1) + 1; + + const positions = new Float32Array(nbVertices * 3); + const normals = new Float32Array(nbVertices * 3); + const indices = new Uint32Array(nbTriangles * 3); + + const normal = new Vector3(0, 0, 1); + const curvyNormal1 = rotateAround(normal, new Vector3(0, 1, 0), Math.PI * 0.3); + const curvyNormal2 = rotateAround(normal, new Vector3(0, 1, 0), -Math.PI * 0.3); + + // The vertices are aranged in rows of 2 vertices, we stack the rows on top of each other until we reach the top of the blade + let vertexIndex = 0; + let normalIndex = 0; + let indexIndex = 0; + const step = 1 / nbStacks; + for (let i = 0; i < nbStacks; i++) { + positions[vertexIndex++] = -0.05 * (nbStacks - i) * step; + positions[vertexIndex++] = i * step; + positions[vertexIndex++] = 0; + + positions[vertexIndex++] = 0.05 * (nbStacks - i) * step; + positions[vertexIndex++] = i * step; + positions[vertexIndex++] = 0; + + normals[normalIndex++] = curvyNormal1.x; + normals[normalIndex++] = curvyNormal1.y; + normals[normalIndex++] = curvyNormal1.z; + + normals[normalIndex++] = curvyNormal2.x; + normals[normalIndex++] = curvyNormal2.y; + normals[normalIndex++] = curvyNormal2.z; + + if (i === 0) { + continue; + } + + // make 2 triangles out of the vertices + indices[indexIndex++] = 2 * (i - 1); + indices[indexIndex++] = 2 * (i - 1) + 1; + indices[indexIndex++] = 2 * i; + + indices[indexIndex++] = 2 * i; + indices[indexIndex++] = 2 * (i - 1) + 1; + indices[indexIndex++] = 2 * i + 1; + } + + // the last vertex is the tip of the blade + positions[vertexIndex++] = 0; + positions[vertexIndex++] = nbStacks * step; + positions[vertexIndex++] = 0; + + normals[normalIndex++] = 0; + normals[normalIndex++] = 0; + normals[normalIndex++] = 1; + + // last triangle + indices[indexIndex++] = 2 * (nbStacks - 1); + indices[indexIndex++] = 2 * (nbStacks - 1) + 1; + indices[indexIndex++] = 2 * nbStacks; + + const vertexData = new VertexData(); + vertexData.positions = positions; + vertexData.normals = normals; + vertexData.indices = indices; + + const grassBlade = new Mesh("grassBlade", scene); + vertexData.applyToMesh(grassBlade); + + grassBlade.material = createGrassMaterial(scene); + + return grassBlade; +} \ No newline at end of file diff --git a/src/ts/proceduralAssets/grass/grassMaterial.ts b/src/ts/proceduralAssets/grass/grassMaterial.ts new file mode 100644 index 000000000..67d82ae9e --- /dev/null +++ b/src/ts/proceduralAssets/grass/grassMaterial.ts @@ -0,0 +1,51 @@ +import { Effect } from "@babylonjs/core/Materials/effect"; +import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial"; +import { Scene } from "@babylonjs/core/scene"; + +import grassFragment from "../../../shaders/grassMaterial/grassFragment.glsl"; +import grassVertex from "../../../shaders/grassMaterial/grassVertex.glsl"; +import { TransformNode } from "@babylonjs/core/Meshes/transformNode"; +import { Texture } from "@babylonjs/core/Materials/Textures/texture"; +import perlinNoise from "../../../asset/perlin.png"; +import { PointLight } from "@babylonjs/core/Lights/pointLight"; + +export function createGrassMaterial(scene: Scene) { + const shaderName = "grassMaterial"; + Effect.ShadersStore[`${shaderName}FragmentShader`] = grassFragment; + Effect.ShadersStore[`${shaderName}VertexShader`] = grassVertex; + + const grassMaterial = new ShaderMaterial(shaderName, scene, shaderName, { + attributes: ["position", "normal"], + uniforms: ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "cameraPosition", "playerPosition"], + defines: ["#define INSTANCES"], + samplers: ["perlinNoise"] + }); + + const perlinTexture = new Texture(perlinNoise, scene); + + grassMaterial.backFaceCulling = false; + grassMaterial.setTexture("perlinNoise", perlinTexture); + + let elapsedSeconds = 0; + scene.onBeforeRenderObservable.add(() => { + elapsedSeconds += scene.getEngine().getDeltaTime() / 1000; + + if(scene.activeCamera === null) throw new Error("Active camera is null"); + + const star = scene.lights[1]; + if(!(star instanceof PointLight)) throw new Error("Could not find star light"); + + const lightDirection = star.position.subtract(scene.activeCamera.globalPosition).normalize(); + grassMaterial.setVector3("lightDirection", lightDirection); + + if(scene.activeCamera.parent !== null && !(scene.activeCamera.parent instanceof TransformNode)) throw new Error("Camera parent is not a TransformNode"); + + const playerPosition = scene.activeCamera.parent !== null ? scene.activeCamera.parent.getAbsolutePosition() : scene.activeCamera.globalPosition; // high y to avoid interaction with grass + const cameraPosition = scene.activeCamera.globalPosition; + grassMaterial.setVector3("playerPosition", playerPosition); + grassMaterial.setVector3("cameraPosition", cameraPosition); + grassMaterial.setFloat("time", elapsedSeconds); + }); + + return grassMaterial; +} \ No newline at end of file diff --git a/src/ts/settings.ts b/src/ts/settings.ts index 6268b6302..e21105855 100644 --- a/src/ts/settings.ts +++ b/src/ts/settings.ts @@ -16,7 +16,7 @@ export const Settings = { TIME_MULTIPLIER: 1, CHUNK_RENDER_DISTANCE_MULTIPLIER: 2, ENABLE_VOLUMETRIC_CLOUDS: false, - SEED_HALF_RANGE: 1e6, + SEED_HALF_RANGE: 1e4, C: 299792458, FOV: (92 * Math.PI) / 180 }; diff --git a/src/ts/typing.d.ts b/src/ts/typing.d.ts index 50579e25f..da1f68f1a 100644 --- a/src/ts/typing.d.ts +++ b/src/ts/typing.d.ts @@ -10,6 +10,7 @@ declare module "*.glsl"; declare module "*.glb"; declare module "*.obj"; +declare module "*.babylon"; declare module "*.wasm"; diff --git a/webpack.config.js b/webpack.config.js index dfc8c9fba..68b3f8c80 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -100,7 +100,7 @@ const config = { use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"] }, { - test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif|glb|obj|mp3)$/i, + test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif|glb|obj|mp3|babylon)$/i, type: "asset" },