Section 1
//Symbol13_5 (feignIGF_fla.Symbol13_5)
package feignIGF_fla {
import flash.display.*;
public dynamic class Symbol13_5 extends MovieClip {
public function Symbol13_5(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package feignIGF_fla
Section 2
//Symbol2_3 (feignIGF_fla.Symbol2_3)
package feignIGF_fla {
import flash.display.*;
public dynamic class Symbol2_3 extends MovieClip {
public var cntr2:MovieClip;
public var cntr:MovieClip;
public var ttl:MovieClip;
public function Symbol2_3(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package feignIGF_fla
Section 3
//Symbol3_4 (feignIGF_fla.Symbol3_4)
package feignIGF_fla {
import flash.display.*;
public dynamic class Symbol3_4 extends MovieClip {
public function Symbol3_4(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package feignIGF_fla
Section 4
//testModel (org.ascollada.testModel)
package org.ascollada {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.geom.*;
public class testModel extends TriangleMesh3D {
private var fa:Array;
private var ve:Array;
public function testModel(_arg1:MaterialObject3D, _arg2:uint=0){
super(_arg1, new Array(), new Array());
ve = this.geometry.vertices;
fa = this.geometry.faces;
switch (_arg2){
case 0:
v(0.644, 0.248, -0.963);
v(1.286, -2.664, -0.796);
v(-1.302, -2.664, -1.028);
v(1.019, 0.049, 0.268);
v(0.821, -2.681, 0.295);
v(-1.151, -3.016, 0.294);
v(-0.965, -0.194, 0.663);
v(0.694, -1.844, -0.51);
v(-0.716, -1.896, -0.536);
v(0.873, 0.921, 0.037);
v(1.149, 1.022, -0.411);
v(-1.028, 0.217, -0.572);
v(1.652, -0.136, -0.304);
v(1.623, -0.05, -1.099);
v(1.38, 0.608, -0.723);
v(1.394, 0.57, -0.251);
v(-1.693, 0.192, -0.332);
v(-1.524, 0.096, 0.268);
v(-1.336, 0.728, 0.184);
v(-1.441, 0.85, -0.109);
v(0.663, -1.748, 0.101);
v(-0.772, -1.503, 0.26);
v(-0.86, 1.042, -0.215);
v(-0.679, 0.876, 0.314);
v(0.42, 0.791, 0.408);
v(-0.114, 0.67, 0.424);
v(0.598, 1.192, -0.238);
v(-0.404, 1.2, -0.193);
v(0.791, -0.981, 0.78);
v(-0.678, -1.248, 0.898);
v(-0.495, -0.254, 0.631);
v(0.579, -0.265, 0.572);
v(1.026, -0.859, 0.068);
v(-0.988, -0.839, 0.178);
v(-0.011, -1.896, -0.536);
v(-1.185, -1.894, 0.174);
v(-1.818, -1.9, 0.287);
v(-1.713, -1.973, -0.313);
v(-1.24, -1.946, -0.542);
v(1.272, -1.462, -1.899);
v(1.551, -1.791, -1.862);
v(1.789, -1.72, -1.29);
v(1.089, -1.701, -1.331);
v(1.487, -3.466, -1.859);
v(1.678, -3.45, -1.995);
v(1.708, -3.369, -1.471);
v(1.51, -3.366, -1.455);
v(-1.514, -3.398, 0.818);
v(-1.785, -3.332, 0.826);
v(-1.794, -3.602, 0.369);
v(-1.302, -3.622, 0.058);
v(0.994, -3.288, 0.374);
v(-1.302, -3.962, -1.213);
v(1.311, -3.725, -0.678);
v(0, -3.798, 0.058);
v(0, -3.798, -1.462);
v(0.674, -5.774, 0.899);
v(0.068, -5.724, 1.113);
v(0.153, -6.176, 0.287);
v(0.745, -6.181, 0.287);
v(-0.8, -6.114, -0.405);
v(-0.686, -6.186, -1.39);
v(0.016, -6.109, -0.405);
v(-0.533, -8.689, -1.551);
v(-0.47, -8.271, -2.082);
v(-0.07, -8.835, -1.631);
v(0.555, -8.762, 1.112);
v(0.12, -8.758, 1.112);
v(0.454, -8.322, 0.612);
v(1.057, -4.798, -0.526);
v(-0.9, -4.798, -1.122);
v(0.207, -4.953, -0.513);
v(0.008, -4.953, -0.875);
v(0.109, -6.951, -1.803);
v(0.01, -7.068, 0.106);
v(-0.215, -8.267, -2.082);
v(0.18, -8.317, 0.612);
v(-0.756, -6.955, -1.803);
v(0.875, -7.072, 0.106);
v(-0.316, 1.422, 0.037);
v(0.35, 1.416, 0.001);
v(-0.541, 1.256, 0.522);
v(-0.161, 1.045, 0.607);
v(-0.372, 2.072, 1.613);
v(-0.928, 2.207, 1.272);
v(-0.19, 2.594, 1.523);
v(-0.747, 2.729, 1.182);
v(-0.811, 1.416, 0.724);
v(-0.254, 1.167, 1.065);
v(-0.487, 2.996, 0.698);
v(0.203, 2.829, 1.12);
v(-0.215, 2.889, 0.24);
v(0.341, 2.568, 0.529);
v(-0.181, 2.116, 0.017);
v(0.236, 1.961, 0.221);
v(-0.871, 2.62, 0.642);
v(0.286, 2.34, 1.351);
v(0.223, 1.644, 0.97);
v(-0.759, 1.882, 0.368);
v(-0.71, 1.14, 1.101);
v(-0.137, 3.059, 0.969);
v(-0.622, 1.57, 1.498);
v(-0.9, 1.637, 1.328);
v(-1.275, -4.789, 0.623);
v(-1.515, -4.351, 1.014);
v(-1.628, -4.662, 0.39);
v(-1.52, -3.641, 0.479);
v(1.166, -4.575, -2.035);
v(1.611, -4.131, -2.189);
v(1.646, -4.231, -1.524);
v(1.183, -4.457, -1.746);
v(0.592, -9.178, 0.51);
v(0.55, -9.203, 1.331);
v(0.115, -9.284, 1.331);
v(0.175, -9.173, 0.517);
v(-0.607, -8.905, -2.083);
v(-0.21, -8.901, -2.296);
v(-0.065, -9.21, -1.75);
v(-0.528, -9.214, -1.75);
v(-0.776, -9.124, -0.648);
v(-0.771, -9.215, -0.648);
v(-0.065, -9.211, -0.318);
v(-0.07, -8.964, -0.317);
v(0.12, -9.14, 2.239);
v(0.115, -9.301, 2.239);
v(0.789, -9.305, 1.908);
v(0.793, -9.214, 1.908);
v(-1.265, -3.89, 0.721);
v(1.293, -3.775, -1.601);
v(1.389, -4.516, -2.112);
v(-0.082, -6.245, -1.187);
f2(22, 27, 11);
f2(29, 30, 6);
f2(33, 6, 11);
f2(8, 34, 2);
f2(34, 7, 1);
f2(34, 8, 11);
f2(54, 51, 4);
f2(53, 55, 1);
f2(55, 52, 2);
f2(69, 53, 51);
f2(52, 70, 50);
f2(55, 71, 54);
f2(61, 77, 60);
f2(68, 78, 66);
f2(91, 95, 89);
f2(95, 84, 86);
f2(98, 93, 79);
f2(89, 100, 91);
f2(83, 101, 88);
f2(81, 99, 87);
f2(103, 104, 105);
f2(106, 105, 49);
f2(25, 24, 82);
f2(27, 81, 79);
f2(58, 74, 57);
f2(39, 13, 40);
f2(47, 127, 106);
f2(103, 127, 104);
f2(128, 46, 43);
f2(128, 110, 109);
f2(129, 107, 43);
f2(129, 108, 109);
f2(109, 110, 129);
f2(110, 107, 129);
f2(47, 106, 35);
f2(106, 38, 35);
f2(38, 106, 37);
f2(106, 49, 37);
f2(56, 51, 54);
f2(56, 54, 57);
f2(9, 15, 10);
f2(15, 14, 10);
f2(12, 15, 3);
f2(15, 9, 3);
f2(13, 14, 12);
f2(14, 15, 12);
f2(23, 18, 6);
f2(18, 17, 6);
f2(19, 18, 22);
f2(18, 23, 22);
f2(16, 19, 11);
f2(19, 22, 11);
f2(16, 17, 18);
f2(16, 18, 19);
f2(4, 20, 21);
f2(4, 21, 5);
f2(27, 0, 11);
f2(26, 0, 27);
f2(28, 29, 20);
f2(29, 21, 20);
f2(30, 31, 25);
f2(31, 24, 25);
f2(28, 31, 30);
f2(28, 30, 29);
f2(36, 35, 6);
f2(36, 6, 17);
f2(37, 36, 17);
f2(37, 17, 16);
f2(11, 38, 16);
f2(38, 37, 16);
f2(6, 35, 38);
f2(6, 38, 11);
f2(12, 41, 13);
f2(41, 40, 13);
f2(3, 42, 12);
f2(42, 41, 12);
f2(42, 0, 39);
f2(3, 0, 42);
f2(44, 43, 40);
f2(43, 39, 40);
f2(45, 44, 40);
f2(45, 40, 41);
f2(42, 46, 41);
f2(46, 45, 41);
f2(39, 43, 42);
f2(43, 46, 42);
f2(48, 47, 36);
f2(47, 35, 36);
f2(37, 49, 36);
f2(49, 48, 36);
f2(5, 2, 50);
f2(2, 52, 50);
f2(4, 51, 1);
f2(51, 53, 1);
f2(50, 60, 54);
f2(60, 62, 54);
f2(60, 63, 62);
f2(63, 65, 62);
f2(67, 66, 56);
f2(67, 56, 57);
f2(10, 26, 9);
f2(26, 24, 9);
f2(25, 27, 23);
f2(27, 22, 23);
f2(24, 26, 80);
f2(24, 80, 82);
f2(26, 27, 80);
f2(27, 79, 80);
f2(86, 84, 85);
f2(84, 83, 85);
f2(92, 94, 91);
f2(94, 93, 91);
f2(48, 104, 127);
f2(48, 127, 47);
f2(105, 104, 49);
f2(104, 48, 49);
f2(44, 108, 43);
f2(108, 129, 43);
f2(45, 109, 44);
f2(109, 108, 44);
f2(45, 46, 128);
f2(45, 128, 109);
f2(107, 110, 128);
f2(107, 128, 43);
f2(112, 111, 66);
f2(111, 68, 66);
f2(76, 114, 67);
f2(114, 113, 67);
f2(111, 114, 68);
f2(114, 76, 68);
f2(111, 112, 114);
f2(112, 113, 114);
f2(75, 116, 64);
f2(116, 115, 64);
f2(117, 116, 65);
f2(116, 75, 65);
f2(64, 115, 63);
f2(115, 118, 63);
f2(116, 117, 115);
f2(117, 118, 115);
f2(120, 119, 63);
f2(120, 63, 118);
f2(121, 120, 117);
f2(120, 118, 117);
f2(65, 122, 121);
f2(65, 121, 117);
f2(63, 119, 65);
f2(119, 122, 65);
f2(120, 121, 119);
f2(121, 122, 119);
f2(124, 123, 113);
f2(123, 67, 113);
f2(112, 125, 113);
f2(125, 124, 113);
f2(66, 126, 112);
f2(126, 125, 112);
f2(123, 126, 67);
f2(126, 66, 67);
f2(123, 124, 126);
f2(124, 125, 126);
f2(105, 106, 127);
f2(105, 127, 103);
f2(88, 99, 81);
f2(88, 81, 82);
f2(99, 102, 87);
f2(102, 84, 87);
f2(83, 84, 102);
f2(83, 102, 101);
f2(88, 101, 99);
f2(101, 102, 99);
f2(91, 100, 92);
f2(100, 90, 92);
f2(86, 85, 100);
f2(85, 90, 100);
f2(80, 94, 97);
f2(94, 96, 97);
f2(83, 88, 97);
f2(83, 97, 96);
f2(90, 85, 96);
f2(85, 83, 96);
f2(90, 96, 92);
f2(96, 94, 92);
f2(84, 95, 98);
f2(84, 98, 87);
f2(91, 93, 95);
f2(93, 98, 95);
f2(79, 93, 80);
f2(93, 94, 80);
f2(95, 86, 89);
f2(86, 100, 89);
f2(82, 80, 97);
f2(82, 97, 88);
f2(81, 87, 98);
f2(81, 98, 79);
f2(82, 81, 25);
f2(81, 27, 25);
f2(66, 78, 56);
f2(78, 59, 56);
f2(60, 77, 63);
f2(77, 64, 63);
f2(76, 74, 68);
f2(74, 78, 68);
f2(58, 59, 74);
f2(59, 78, 74);
f2(67, 57, 74);
f2(67, 74, 76);
f2(65, 75, 73);
f2(73, 77, 61);
f2(75, 64, 73);
f2(64, 77, 73);
f2(62, 72, 54);
f2(72, 55, 54);
f2(54, 71, 57);
f2(71, 58, 57);
f2(61, 70, 72);
f2(52, 55, 70);
f2(55, 72, 70);
f2(50, 70, 60);
f2(70, 61, 60);
f2(51, 56, 69);
f2(56, 59, 69);
f2(53, 69, 55);
f2(69, 71, 55);
f2(59, 58, 71);
f2(59, 71, 69);
f2(4, 5, 54);
f2(5, 50, 54);
f2(21, 29, 33);
f2(29, 6, 33);
f2(28, 20, 32);
f2(20, 7, 32);
f2(11, 0, 34);
f2(0, 7, 34);
f2(32, 0, 3);
f2(7, 0, 32);
f2(11, 8, 33);
f2(8, 21, 33);
f2(31, 28, 32);
f2(31, 32, 3);
f2(9, 24, 3);
f2(24, 31, 3);
f2(23, 6, 30);
f2(23, 30, 25);
f2(39, 0, 13);
f2(0, 14, 13);
f2(26, 10, 14);
f2(14, 0, 26);
f2(2, 5, 8);
f2(5, 21, 8);
f2(1, 7, 4);
f2(7, 20, 4);
f2(34, 1, 55);
f2(34, 55, 2);
f2(73, 130, 65);
f2(130, 62, 65);
f2(130, 73, 61);
f2(72, 62, 130);
f2(72, 130, 61);
x = 0;
y = 25;
z = 0;
rotationX = 0;
rotationY = 70;
rotationZ = 0;
break;
case 1:
v(1.39, -3.108, -1.332);
v(-1.302, -3.108, -1.332);
v(1.217, -2.875, 0.279);
v(-1.151, -2.875, 0.279);
v(0.694, -1.896, -1.092);
v(-0.716, -1.896, -1.092);
v(0.828, -0.209, 0.788);
v(0.828, 0.146, 0.252);
v(1.665, -0.958, 1.188);
v(1.665, -0.958, 0.632);
v(1.396, -0.258, 0.789);
v(1.398, -0.484, 1.038);
v(-1.676, -0.958, 0.632);
v(-1.676, -0.958, 1.188);
v(-1.2, -0.477, 1.038);
v(-1.212, -0.348, 0.789);
v(0.809, -2.371, 0.072);
v(-0.772, -2.371, 0.072);
v(-0.706, 0.146, 0.456);
v(-0.706, -0.209, 0.788);
v(0.061, -0.654, 0.858);
v(0.51, 0.278, 0.715);
v(-0.361, 0.346, 0.944);
v(0.761, -2.298, 0.704);
v(-0.724, -2.298, 0.704);
v(-1, -0.947, 0.959);
v(1, -0.947, 0.959);
v(1, -0.647, -0.11);
v(-1, -0.647, -0.11);
v(-0.011, -1.896, -1.092);
v(-1.177, -2.407, 1.784);
v(-1.722, -2.179, 1.865);
v(-1.676, -3.109, 1.827);
v(-1.192, -3.109, 1.621);
v(1.199, -2.874, 1.539);
v(1.797, -3.085, 1.745);
v(1.556, -2.607, 2.17);
v(1.174, -2.713, 2.09);
v(0.628, -3.409, 2.579);
v(0.619, -3.387, 2.524);
v(0.803, -3.024, 2.86);
v(0.807, -3.032, 2.572);
v(-0.288, -2.678, 2.532);
v(-0.421, -2.675, 2.768);
v(-0.483, -3.202, 2.74);
v(-0.305, -3.095, 2.529);
v(-1.302, -3.172, -0.281);
v(1.39, -3.172, -0.281);
v(-1.302, -3.821, -1.213);
v(1.39, -3.821, -1.213);
v(0, -3.798, 0.058);
v(0, -3.798, -1.272);
v(1.713, -3.059, 2.083);
v(0.946, -3.054, 2.083);
v(-1.914, -3.059, 2.083);
v(-1.099, -3.054, 2.083);
v(-0.533, -5.257, 0.532);
v(-0.47, -4.827, -0.605);
v(-0.07, -5.253, 0.532);
v(0.555, -5.257, 0.532);
v(0.12, -5.253, 0.532);
v(0.454, -4.827, -0.605);
v(0.917, -4.453, -0.282);
v(-0.9, -4.453, -0.282);
v(0.021, -4.609, -0.282);
v(-0.514, -3.946, 1.277);
v(0.444, -3.946, 1.277);
v(-0.215, -4.823, -0.605);
v(0.18, -4.823, -0.605);
v(-1.711, -3.951, 1.277);
v(1.685, -3.951, 1.277);
v(-0.18, 0.232, 1.65);
v(0.406, 0.302, 1.406);
v(0.67, 0.207, 1.242);
v(1.156, -0.575, 2.144);
v(0.608, -0.952, 2.112);
v(1.091, -0.526, 2.698);
v(0.542, -0.904, 2.667);
v(0.253, -0.369, 1.295);
v(0.802, 0.008, 1.327);
v(0.178, -0.551, 3.008);
v(0.857, -0.084, 3.047);
v(-0.029, -0.089, 2.853);
v(0.52, 0.289, 2.884);
v(-0.223, 0.242, 2.274);
v(0.325, 0.619, 2.306);
v(0.013, -0.756, 2.536);
v(1.154, 0.029, 2.602);
v(0.875, 0.375, 1.763);
v(-0.093, -0.291, 1.708);
v(0.81, -0.454, 1.175);
v(0.543, -0.352, 3.109);
v(1.005, -0.603, 1.592);
v(0.73, -0.792, 1.576);
v(0.504, -3.246, 2.951);
v(0.132, -2.909, 3.009);
v(-0.001, -3.487, 3.058);
v(0.531, -3.556, 2.971);
v(-0.422, -3.382, 2.512);
v(-0.023, -3.511, 2.809);
v(0.163, -2.955, 2.797);
v(-0.249, -3.122, 2.508);
v(0.592, -5.722, -0.008);
v(0.684, -6.248, 0.604);
v(0.249, -6.244, 0.604);
v(0.175, -5.717, -0.001);
v(-0.607, -5.722, 0.212);
v(-0.21, -5.717, -0.002);
v(-0.142, -6.244, 0.604);
v(-0.669, -6.248, 0.604);
v(-0.84, -6.035, 0.99);
v(-0.835, -6.126, 0.989);
v(-0.267, -6.121, 1.32);
v(-0.272, -5.875, 1.32);
v(0.307, -5.873, 1.32);
v(0.302, -6.12, 1.32);
v(0.845, -6.124, 0.99);
v(0.85, -6.033, 0.99);
v(-1.78, -4.1, 2.495);
v(1.573, -4.1, 2.495);
v(-1.141, -4.096, 2.495);
v(0.972, -4.096, 2.495);
v(0.739, -5.922, 0.722);
v(0.185, -5.84, 0.887);
v(-0.717, -5.923, 0.722);
v(-0.175, -5.841, 0.887);
v(0, -0.461, -0.419);
f2(4, 0, 29);
f2(51, 48, 1);
f2(64, 51, 50);
f2(82, 86, 80);
f2(86, 75, 77);
f2(87, 83, 81);
f2(89, 84, 71);
f2(80, 91, 82);
f2(93, 75, 78);
f2(0, 49, 51);
f2(1, 5, 29);
f2(3, 46, 50);
f2(118, 54, 69);
f2(52, 119, 70);
f2(120, 67, 65);
f2(120, 58, 67);
f2(121, 66, 68);
f2(60, 121, 68);
f2(18, 126, 28);
f2(14, 13, 25);
f2(25, 26, 20);
f2(39, 38, 34);
f2(39, 34, 35);
f2(3, 1, 46);
f2(47, 0, 2);
f2(7, 21, 6);
f2(20, 22, 19);
f2(22, 18, 19);
f2(21, 72, 73);
f2(39, 99, 38);
f2(99, 98, 38);
f2(102, 61, 59);
f2(68, 105, 60);
f2(107, 67, 58);
f2(57, 106, 56);
f2(71, 84, 85);
f2(20, 78, 89);
f2(50, 65, 64);
f2(50, 64, 66);
f2(5, 17, 28);
f2(27, 16, 4);
f2(4, 29, 126);
f2(4, 126, 27);
f2(9, 27, 10);
f2(27, 7, 10);
f2(5, 28, 126);
f2(5, 126, 29);
f2(12, 15, 28);
f2(15, 18, 28);
f2(8, 11, 26);
f2(11, 6, 26);
f2(27, 34, 26);
f2(34, 37, 26);
f2(27, 26, 16);
f2(26, 23, 16);
f2(30, 33, 25);
f2(33, 28, 25);
f2(24, 25, 17);
f2(25, 28, 17);
f2(21, 20, 6);
f2(20, 26, 6);
f2(22, 20, 89);
f2(22, 89, 71);
f2(21, 73, 78);
f2(21, 78, 20);
f2(16, 0, 4);
f2(2, 0, 16);
f2(3, 17, 1);
f2(17, 5, 1);
f2(14, 25, 19);
f2(25, 20, 19);
f2(49, 62, 51);
f2(62, 64, 51);
f2(52, 70, 47);
f2(70, 62, 47);
f2(63, 69, 46);
f2(69, 54, 46);
f2(48, 51, 63);
f2(51, 64, 63);
f2(67, 57, 65);
f2(57, 69, 65);
f2(68, 66, 61);
f2(66, 70, 61);
f2(73, 72, 79);
f2(72, 88, 79);
f2(82, 84, 86);
f2(84, 89, 86);
f2(86, 89, 75);
f2(89, 78, 75);
f2(79, 88, 74);
f2(88, 87, 74);
f2(83, 87, 85);
f2(87, 88, 85);
f2(75, 93, 92);
f2(75, 92, 74);
f2(114, 115, 117);
f2(115, 116, 117);
f2(103, 116, 104);
f2(116, 115, 104);
f2(111, 112, 110);
f2(112, 113, 110);
f2(112, 111, 108);
f2(111, 109, 108);
f2(107, 108, 106);
f2(108, 109, 106);
f2(67, 107, 57);
f2(107, 106, 57);
f2(102, 103, 104);
f2(102, 104, 105);
f2(102, 105, 61);
f2(105, 68, 61);
f2(98, 99, 101);
f2(99, 100, 101);
f2(98, 101, 38);
f2(101, 41, 38);
f2(101, 100, 41);
f2(100, 40, 41);
f2(40, 100, 39);
f2(100, 99, 39);
f2(95, 96, 94);
f2(96, 97, 94);
f2(42, 94, 45);
f2(94, 97, 45);
f2(97, 96, 45);
f2(96, 44, 45);
f2(96, 95, 44);
f2(95, 43, 44);
f2(43, 95, 42);
f2(95, 94, 42);
f2(85, 84, 83);
f2(84, 82, 83);
f2(77, 75, 76);
f2(75, 74, 76);
f2(21, 22, 72);
f2(22, 71, 72);
f2(54, 55, 46);
f2(55, 50, 46);
f2(52, 47, 53);
f2(47, 50, 53);
f2(42, 45, 30);
f2(45, 33, 30);
f2(45, 44, 33);
f2(44, 32, 33);
f2(44, 43, 32);
f2(43, 31, 32);
f2(42, 30, 43);
f2(30, 31, 43);
f2(34, 38, 37);
f2(38, 41, 37);
f2(41, 40, 37);
f2(40, 36, 37);
f2(40, 39, 36);
f2(39, 35, 36);
f2(26, 37, 8);
f2(37, 36, 8);
f2(36, 35, 8);
f2(35, 9, 8);
f2(27, 9, 34);
f2(9, 35, 34);
f2(28, 33, 12);
f2(33, 32, 12);
f2(32, 31, 12);
f2(31, 13, 12);
f2(31, 30, 13);
f2(30, 25, 13);
f2(23, 26, 24);
f2(26, 25, 24);
f2(23, 24, 16);
f2(24, 17, 16);
f2(2, 16, 3);
f2(16, 17, 3);
f2(13, 14, 12);
f2(14, 15, 12);
f2(14, 19, 15);
f2(19, 18, 15);
f2(10, 11, 9);
f2(11, 8, 9);
f2(11, 10, 6);
f2(10, 7, 6);
f2(70, 66, 62);
f2(66, 64, 62);
f2(69, 63, 65);
f2(63, 64, 65);
f2(27, 126, 7);
f2(126, 21, 7);
f2(21, 126, 18);
f2(21, 18, 22);
f2(119, 59, 70);
f2(59, 61, 70);
f2(57, 56, 69);
f2(56, 118, 69);
f2(108, 125, 112);
f2(125, 113, 112);
f2(109, 111, 124);
f2(111, 110, 124);
f2(56, 124, 125);
f2(56, 125, 58);
f2(110, 113, 125);
f2(110, 125, 124);
f2(104, 115, 123);
f2(115, 114, 123);
f2(103, 122, 116);
f2(122, 117, 116);
f2(117, 122, 123);
f2(117, 123, 114);
f2(59, 60, 123);
f2(59, 123, 122);
f2(54, 118, 55);
f2(118, 120, 55);
f2(56, 58, 120);
f2(56, 120, 118);
f2(59, 119, 121);
f2(59, 121, 60);
f2(52, 53, 119);
f2(53, 121, 119);
f2(74, 92, 79);
f2(92, 90, 79);
f2(78, 90, 93);
f2(90, 92, 93);
f2(81, 76, 87);
f2(76, 74, 87);
f2(82, 91, 83);
f2(91, 81, 83);
f2(86, 77, 80);
f2(77, 91, 80);
f2(77, 76, 91);
f2(76, 81, 91);
f2(120, 65, 55);
f2(65, 50, 55);
f2(121, 53, 66);
f2(53, 50, 66);
f2(124, 56, 106);
f2(124, 106, 109);
f2(125, 108, 107);
f2(125, 107, 58);
f2(123, 60, 105);
f2(123, 105, 104);
f2(122, 103, 102);
f2(122, 102, 59);
f2(79, 90, 78);
f2(79, 78, 73);
f2(88, 72, 85);
f2(72, 71, 85);
f2(47, 2, 50);
f2(2, 3, 50);
f2(62, 49, 47);
f2(49, 0, 47);
f2(63, 46, 48);
f2(46, 1, 48);
f2(51, 1, 29);
f2(29, 0, 51);
x = 0;
y = 3;
z = 0;
rotationX = 0;
rotationY = 70;
rotationZ = 0;
break;
case 3:
v(1.39, -3.413, -1.332);
v(-1.302, -3.413, -1.332);
v(1.298, -1.366, 0.415);
v(1.217, -3.211, 0.046);
v(-1.151, -3.211, 0.046);
v(-0.868, -1.418, 0.335);
v(0.694, -2.45, -0.78);
v(-0.716, -2.45, -0.78);
v(0.828, -0.573, 0.104);
v(1, -0.757, -0.794);
v(1.665, -1.648, -0.129);
v(1.396, -0.983, -0.432);
v(1.398, -0.983, 0.008);
v(-1.47, -1.382, -0.059);
v(-1.2, -0.933, 0.347);
v(0.809, -2.674, 0.42);
v(-0.772, -2.674, 0.42);
v(-1, -0.714, -0.553);
v(-0.706, -0.53, 0.371);
v(0.179, -0.814, 0.124);
v(-0.114, -0.814, 0.124);
v(0.761, -2.146, 1.095);
v(-0.724, -2.146, 1.095);
v(-0.529, -1.269, 0.616);
v(0.547, -1.269, 0.616);
v(1.027, -0.826, -0.138);
v(-0.991, -0.826, -0.138);
v(-0.011, -2.119, -0.78);
v(-0.673, -3.521, 1.284);
v(-0.967, -3.232, 1.518);
v(-1.269, -3.184, 1.356);
v(-1.185, -3.544, 0.849);
v(1.223, -3.544, 0.57);
v(1.306, -3.138, 1.021);
v(1.023, -3.004, 1.137);
v(0.732, -3.354, 0.918);
v(0.401, -4.644, 2.276);
v(0.557, -4.489, 2.498);
v(0.063, -4.301, 2.436);
v(0.028, -4.47, 2.206);
v(-0.2, -4.484, 2.33);
v(-0.268, -4.389, 2.574);
v(-0.742, -4.626, 2.533);
v(-0.557, -4.699, 2.313);
v(-1.302, -3.482, -0.091);
v(1.39, -3.482, -0.091);
v(-1.302, -4.127, -1.213);
v(1.419, -4.45, -0.906);
v(0, -3.798, 0.058);
v(0, -4.103, -1.272);
v(0.84, -5.023, 2.682);
v(0.074, -4.373, 2.406);
v(-0.794, -5.036, 2.689);
v(0.022, -4.373, 2.406);
v(-1.13, -5.395, -0.383);
v(-1.04, -4.779, -0.168);
v(-0.67, -5.394, -0.437);
v(1.01, -5.381, -0.387);
v(0.578, -5.39, -0.438);
v(0.871, -4.767, -0.182);
v(0.917, -4.69, -0.529);
v(-0.9, -4.69, -0.529);
v(0.021, -4.845, -0.529);
v(0.039, -4.919, 1.609);
v(-0.786, -4.779, -0.195);
v(0.598, -4.773, -0.212);
v(-1.047, -4.926, 1.608);
v(1.18, -4.914, 1.602);
v(-0.408, 0.021, -0.34);
v(0.416, 0.02, -0.345);
v(-0.252, -0.659, 0.456);
v(0.415, -0.659, 0.456);
v(0.333, -0.249, 1.867);
v(-0.333, -0.249, 1.867);
v(0.333, 0.161, 2.034);
v(-0.333, 0.161, 2.034);
v(-0.333, -0.648, 0.881);
v(0.333, -0.648, 0.881);
v(-0.418, 0.701, 1.76);
v(0.407, 0.701, 1.76);
v(-0.333, 0.812, 1.232);
v(0.333, 0.812, 1.232);
v(-0.333, 0.446, 0.669);
v(0.333, 0.446, 0.669);
v(-0.692, 0.26, 1.608);
v(0.694, 0.26, 1.608);
v(0.622, -0.151, 0.851);
v(-0.554, -0.151, 0.851);
v(0, -0.94, 0.792);
v(0, 0.709, 1.872);
v(0.167, -0.699, 1.555);
v(-0.167, -0.699, 1.555);
v(-0.232, -5.486, 2.377);
v(-0.156, -4.996, 2.77);
v(-0.71, -5.208, 2.807);
v(-0.476, -5.681, 2.384);
v(0.356, -5.52, 2.567);
v(0.531, -5.037, 2.837);
v(-0.019, -4.843, 2.779);
v(0.1, -5.36, 2.489);
v(1.086, -4.591, -0.808);
v(1.12, -4.977, -1.298);
v(0.688, -4.986, -1.349);
v(0.672, -4.608, -0.856);
v(-1.255, -4.822, -0.778);
v(-0.863, -4.609, -0.838);
v(-0.776, -4.983, -1.346);
v(-1.236, -4.984, -1.292);
v(-1.561, -5.31, -1.942);
v(-1.569, -5.214, -2.05);
v(-0.863, -5.109, -2.114);
v(-0.864, -5.315, -2.088);
v(0.805, -5.322, -2.083);
v(0.8, -5.116, -2.111);
v(1.47, -5.206, -2.051);
v(1.462, -5.3, -1.942);
v(-0.664, -5.761, 2.227);
v(0.697, -5.75, 2.221);
v(-0.024, -5.756, 2.229);
v(0.097, -5.755, 2.228);
f2(22, 23, 5);
f2(26, 5, 17);
f2(6, 0, 27);
f2(27, 9, 6);
f2(48, 45, 3);
f2(49, 46, 1);
f2(62, 49, 48);
f2(80, 84, 78);
f2(84, 73, 75);
f2(85, 81, 79);
f2(116, 52, 66);
f2(50, 117, 67);
f2(53, 118, 63);
f2(119, 51, 63);
f2(10, 11, 12);
f2(17, 14, 18);
f2(69, 17, 68);
f2(17, 31, 13);
f2(31, 30, 13);
f2(2, 32, 35);
f2(47, 0, 45);
f2(9, 69, 8);
f2(68, 17, 18);
f2(19, 69, 71);
f2(20, 70, 68);
f2(72, 90, 77);
f2(89, 79, 81);
f2(70, 76, 87);
f2(44, 61, 66);
f2(44, 66, 52);
f2(45, 50, 67);
f2(0, 47, 49);
f2(16, 22, 26);
f2(22, 5, 26);
f2(15, 25, 2);
f2(27, 7, 17);
f2(1, 7, 27);
f2(4, 16, 7);
f2(6, 15, 3);
f2(55, 66, 64);
f2(66, 63, 64);
f2(63, 67, 65);
f2(67, 59, 65);
f2(25, 15, 6);
f2(6, 9, 25);
f2(7, 16, 26);
f2(7, 26, 17);
f2(3, 4, 48);
f2(4, 44, 48);
f2(47, 60, 49);
f2(60, 62, 49);
f2(46, 49, 61);
f2(49, 62, 61);
f2(62, 63, 48);
f2(63, 51, 48);
f2(53, 63, 48);
f2(84, 75, 78);
f2(75, 89, 78);
f2(82, 83, 68);
f2(83, 69, 68);
f2(80, 82, 84);
f2(82, 87, 84);
f2(84, 87, 73);
f2(87, 76, 73);
f2(79, 74, 85);
f2(74, 72, 85);
f2(77, 86, 72);
f2(86, 85, 72);
f2(81, 85, 83);
f2(85, 86, 83);
f2(75, 74, 89);
f2(74, 79, 89);
f2(73, 91, 90);
f2(73, 90, 72);
f2(71, 88, 70);
f2(88, 76, 70);
f2(113, 114, 112);
f2(114, 115, 112);
f2(115, 57, 112);
f2(57, 58, 112);
f2(57, 115, 101);
f2(115, 114, 101);
f2(114, 113, 101);
f2(113, 102, 101);
f2(113, 112, 102);
f2(112, 58, 102);
f2(110, 111, 109);
f2(111, 108, 109);
f2(108, 111, 54);
f2(111, 56, 54);
f2(56, 111, 106);
f2(111, 110, 106);
f2(109, 107, 110);
f2(107, 106, 110);
f2(109, 108, 107);
f2(108, 54, 107);
f2(106, 107, 105);
f2(107, 104, 105);
f2(55, 104, 54);
f2(104, 107, 54);
f2(106, 105, 56);
f2(105, 64, 56);
f2(64, 105, 55);
f2(105, 104, 55);
f2(100, 101, 103);
f2(101, 102, 103);
f2(100, 103, 59);
f2(103, 65, 59);
f2(65, 103, 58);
f2(103, 102, 58);
f2(101, 100, 57);
f2(100, 59, 57);
f2(96, 97, 99);
f2(97, 98, 99);
f2(96, 99, 36);
f2(99, 39, 36);
f2(99, 98, 39);
f2(98, 38, 39);
f2(38, 98, 37);
f2(98, 97, 37);
f2(37, 97, 36);
f2(97, 96, 36);
f2(93, 94, 92);
f2(94, 95, 92);
f2(40, 92, 43);
f2(92, 95, 43);
f2(95, 94, 43);
f2(94, 42, 43);
f2(94, 93, 42);
f2(93, 41, 42);
f2(41, 93, 40);
f2(93, 92, 40);
f2(81, 83, 80);
f2(83, 82, 80);
f2(73, 72, 74);
f2(73, 74, 75);
f2(19, 71, 70);
f2(19, 70, 20);
f2(52, 53, 44);
f2(53, 48, 44);
f2(50, 45, 51);
f2(45, 48, 51);
f2(40, 43, 28);
f2(43, 31, 28);
f2(31, 43, 30);
f2(43, 42, 30);
f2(30, 42, 29);
f2(42, 41, 29);
f2(40, 28, 41);
f2(28, 29, 41);
f2(32, 36, 35);
f2(36, 39, 35);
f2(39, 38, 35);
f2(38, 34, 35);
f2(38, 37, 34);
f2(37, 33, 34);
f2(37, 36, 33);
f2(36, 32, 33);
f2(35, 34, 2);
f2(28, 31, 5);
f2(31, 17, 5);
f2(29, 14, 30);
f2(14, 13, 30);
f2(29, 28, 14);
f2(28, 5, 14);
f2(21, 24, 22);
f2(24, 23, 22);
f2(23, 24, 20);
f2(24, 19, 20);
f2(21, 22, 15);
f2(22, 16, 15);
f2(3, 15, 4);
f2(15, 16, 4);
f2(14, 17, 13);
f2(8, 12, 9);
f2(12, 11, 9);
f2(67, 63, 60);
f2(63, 62, 60);
f2(66, 61, 63);
f2(61, 62, 63);
f2(63, 65, 58);
f2(63, 58, 119);
f2(63, 118, 56);
f2(63, 56, 64);
f2(67, 117, 57);
f2(67, 57, 59);
f2(66, 55, 54);
f2(66, 54, 116);
f2(52, 116, 118);
f2(52, 118, 53);
f2(54, 56, 116);
f2(56, 118, 116);
f2(57, 117, 58);
f2(117, 119, 58);
f2(50, 51, 119);
f2(50, 119, 117);
f2(73, 76, 91);
f2(76, 88, 91);
f2(91, 88, 90);
f2(88, 77, 90);
f2(78, 89, 80);
f2(89, 81, 80);
f2(82, 68, 70);
f2(82, 70, 87);
f2(83, 86, 71);
f2(83, 71, 69);
f2(88, 71, 77);
f2(71, 86, 77);
f2(47, 45, 60);
f2(45, 67, 60);
f2(61, 44, 46);
f2(44, 1, 46);
f2(24, 21, 2);
f2(21, 15, 2);
f2(68, 18, 20);
f2(18, 23, 20);
f2(69, 19, 8);
f2(19, 24, 8);
f2(14, 5, 23);
f2(14, 23, 18);
f2(2, 34, 10);
f2(2, 10, 12);
f2(10, 9, 11);
f2(32, 9, 10);
f2(69, 9, 17);
f2(9, 27, 17);
f2(12, 8, 2);
f2(8, 24, 2);
f2(44, 4, 7);
f2(44, 7, 1);
f2(45, 0, 3);
f2(0, 6, 3);
f2(49, 1, 27);
f2(27, 0, 49);
f2(25, 9, 2);
f2(9, 32, 2);
f2(10, 34, 33);
f2(10, 33, 32);
x = 0;
y = 3;
z = 0;
rotationX = 0;
rotationY = 160;
rotationZ = 0;
break;
case 4:
v(1, 0.102, -1.151);
v(1.279, -3.05, -1.332);
v(-1.146, -2.637, -1.332);
v(1, 0.102, -0.081);
v(1.27, -3.053, 0.294);
v(-0.792, 0.513, 0.02);
v(0.694, -1.642, -0.833);
v(0.828, 0.895, -0.253);
v(0.828, 0.895, -0.789);
v(1.665, 0.102, -0.39);
v(1.665, 0.102, -0.946);
v(1.396, 0.802, -0.789);
v(1.398, 0.802, -0.54);
v(-1.469, -0.105, -0.527);
v(-1.469, 0.293, -0.138);
v(-1.2, 0.809, -0.252);
v(-1.212, 0.712, -0.501);
v(-0.772, -1.503, 0.26);
v(-0.706, 0.895, -0.253);
v(0.179, 0.719, -0.081);
v(-0.114, 0.719, -0.081);
v(0.414, 1.142, -0.789);
v(-0.591, 1.025, -0.789);
v(-0.529, -0.17, 0.244);
v(0.547, -0.17, 0.244);
v(1.027, -0.826, -0.138);
v(-0.792, -0.252, -0.958);
v(-0.716, -1.642, -0.833);
v(-0.724, -1.178, 0.685);
v(-1.449, -1.167, 0.909);
v(-1.311, -1.584, 0.727);
v(1.259, -2.342, -0.085);
v(1.465, -1.93, 0.581);
v(1.045, -1.673, 0.65);
v(0.995, -1.763, 0.163);
v(-0.716, -2.982, 0.202);
v(-0.359, -2.781, 0.682);
v(-0.556, -2.303, 0.564);
v(-0.508, -2.351, 0.284);
v(0.724, -1.083, 0.646);
v(0.99, -1.118, 0.993);
v(0.946, -1.624, 0.837);
v(0.809, -1.503, 0.26);
v(-1.311, -3.283, 0.058);
v(1.352, -3.678, 0.058);
v(-1.36, -3.619, -1.213);
v(1.302, -4.014, -1.213);
v(0, -3.798, 0.058);
v(0, -3.798, -1.272);
v(1.08, -6.141, 0.871);
v(0.342, -6.091, 1.07);
v(0.092, -6.147, 0.398);
v(0.83, -6.197, 0.198);
v(-0.697, -6.114, -0.091);
v(-0.697, -6.486, -0.955);
v(0.118, -6.482, -0.955);
v(0.118, -6.109, -0.091);
v(-0.43, -8.53, -0.347);
v(-0.367, -8.271, -0.847);
v(0.033, -8.526, -0.347);
v(0.566, -8.58, 0.579);
v(0.132, -8.549, 0.579);
v(0.315, -7.951, 0.155);
v(0.917, -4.798, -0.875);
v(-0.9, -4.798, -0.875);
v(0.034, -4.953, -0.875);
v(0.008, -4.953, -0.875);
v(-0.076, -7.162, -1.166);
v(0.089, -6.791, 0.07);
v(-0.112, -8.267, -0.847);
v(0.051, -7.93, 0.227);
v(-0.598, -7.166, -1.166);
v(0.513, -6.822, -0.044);
v(-0.412, 1.399, -0.618);
v(-0.109, 1.399, -0.856);
v(0.47, 1.244, -0.56);
v(0.818, 2.473, -0.383);
v(0.514, 2.473, 0.211);
v(0.526, 2.928, -0.532);
v(0.223, 2.928, 0.062);
v(0.097, 1.309, -0.13);
v(0.622, 1.431, -0.483);
v(-0.351, 3.001, -0.136);
v(0.025, 3.001, -0.871);
v(-0.638, 2.786, -0.378);
v(-0.335, 2.786, -0.972);
v(-0.698, 1.936, -0.408);
v(-0.395, 1.936, -1.002);
v(-0.225, 2.63, 0.235);
v(0.406, 2.63, -0.999);
v(0.372, 1.684, -0.934);
v(-0.163, 1.684, 0.113);
v(0.757, 1.311, -0.039);
v(-0.161, 3.16, -0.508);
v(0.919, 1.963, -0.144);
v(0.768, 1.963, 0.153);
v(1.019, -1.084, 0.037);
v(0.838, -1.659, -0.105);
v(0.818, -1.239, -0.398);
v(-0.96, -3.423, 0.039);
v(-0.826, -3.221, 0.624);
v(-1.072, -2.705, 0.294);
v(0.582, -8.922, -0.158);
v(0.538, -8.953, 0.562);
v(0.105, -8.922, 0.562);
v(0.166, -8.893, -0.15);
v(-0.504, -8.905, -0.847);
v(-0.107, -8.901, -1.061);
v(0.038, -8.901, -0.347);
v(-0.425, -8.905, -0.347);
v(-0.673, -8.815, 0.45);
v(-0.668, -8.906, 0.449);
v(0.038, -8.902, 0.78);
v(0.033, -8.656, 0.78);
v(0.121, -8.728, 1.699);
v(0.102, -8.974, 1.688);
v(0.775, -9.004, 1.357);
v(0.785, -8.913, 1.361);
f2(1, 6, 4);
f2(27, 2, 101);
f2(42, 4, 6);
f2(101, 17, 27);
f2(7, 19, 3);
f2(20, 18, 5);
f2(8, 0, 21);
f2(28, 23, 5);
f2(23, 20, 5);
f2(19, 24, 3);
f2(24, 39, 3);
f2(25, 0, 3);
f2(6, 0, 25);
f2(27, 1, 2);
f2(27, 6, 1);
f2(26, 0, 27);
f2(27, 0, 6);
f2(25, 39, 42);
f2(6, 25, 42);
f2(25, 3, 39);
f2(26, 17, 28);
f2(5, 26, 28);
f2(26, 27, 17);
f2(47, 4, 101);
f2(43, 47, 101);
f2(47, 44, 4);
f2(48, 2, 1);
f2(46, 48, 1);
f2(48, 45, 2);
f2(46, 63, 48);
f2(63, 52, 51);
f2(63, 44, 49);
f2(52, 63, 49);
f2(63, 46, 44);
f2(64, 53, 43);
f2(45, 64, 43);
f2(64, 54, 53);
f2(54, 64, 55);
f2(64, 45, 48);
f2(65, 50, 47);
f2(48, 65, 47);
f2(65, 51, 50);
f2(66, 47, 56);
f2(55, 66, 56);
f2(66, 48, 47);
f2(51, 65, 63);
f2(65, 48, 63);
f2(48, 66, 64);
f2(66, 55, 64);
f2(55, 67, 54);
f2(67, 69, 58);
f2(59, 69, 56);
f2(50, 70, 61);
f2(70, 68, 62);
f2(68, 51, 52);
f2(71, 57, 53);
f2(54, 71, 53);
f2(71, 58, 57);
f2(72, 49, 60);
f2(62, 72, 60);
f2(72, 52, 49);
f2(58, 71, 67);
f2(71, 54, 67);
f2(52, 72, 68);
f2(72, 62, 68);
f2(81, 75, 74);
f2(73, 86, 74);
f2(87, 74, 86);
f2(88, 79, 82);
f2(84, 88, 82);
f2(88, 77, 79);
f2(77, 88, 80);
f2(88, 84, 86);
f2(89, 83, 78);
f2(76, 89, 78);
f2(89, 85, 83);
f2(85, 89, 87);
f2(89, 76, 81);
f2(87, 90, 74);
f2(90, 81, 74);
f2(81, 90, 89);
f2(90, 87, 89);
f2(80, 91, 73);
f2(91, 86, 73);
f2(86, 91, 88);
f2(91, 80, 88);
f2(93, 79, 78);
f2(83, 93, 78);
f2(93, 82, 79);
f2(93, 85, 84);
f2(82, 93, 84);
f2(93, 83, 85);
f2(94, 76, 77);
f2(76, 94, 81);
f2(94, 92, 81);
f2(92, 95, 80);
f2(95, 77, 80);
f2(77, 95, 94);
f2(95, 92, 94);
f2(81, 92, 75);
f2(80, 75, 92);
f2(114, 115, 117);
f2(115, 116, 117);
f2(61, 114, 117);
f2(61, 117, 60);
f2(60, 117, 103);
f2(117, 116, 103);
f2(103, 116, 104);
f2(116, 115, 104);
f2(104, 115, 114);
f2(104, 114, 61);
f2(110, 111, 112);
f2(110, 112, 113);
f2(57, 110, 59);
f2(110, 113, 59);
f2(59, 113, 108);
f2(113, 112, 108);
f2(108, 112, 111);
f2(108, 111, 109);
f2(109, 111, 110);
f2(109, 110, 57);
f2(106, 107, 108);
f2(106, 108, 109);
f2(58, 106, 57);
f2(106, 109, 57);
f2(59, 108, 107);
f2(59, 107, 69);
f2(69, 107, 58);
f2(107, 106, 58);
f2(102, 103, 105);
f2(103, 104, 105);
f2(62, 102, 105);
f2(62, 105, 70);
f2(70, 105, 61);
f2(105, 104, 61);
f2(60, 103, 102);
f2(60, 102, 62);
f2(99, 100, 101);
f2(35, 99, 101);
f2(35, 101, 38);
f2(38, 101, 37);
f2(37, 101, 36);
f2(101, 100, 36);
f2(36, 100, 35);
f2(100, 99, 35);
f2(98, 96, 97);
f2(39, 98, 42);
f2(42, 98, 97);
f2(42, 97, 41);
f2(41, 97, 96);
f2(41, 96, 40);
f2(40, 96, 39);
f2(96, 98, 39);
f2(84, 85, 87);
f2(84, 87, 86);
f2(78, 79, 77);
f2(78, 77, 76);
f2(20, 19, 75);
f2(20, 75, 80);
f2(21, 22, 74);
f2(22, 73, 74);
f2(22, 20, 80);
f2(22, 80, 73);
f2(19, 21, 75);
f2(21, 74, 75);
f2(18, 20, 22);
f2(7, 8, 21);
f2(7, 21, 19);
f2(51, 68, 50);
f2(68, 70, 50);
f2(56, 69, 67);
f2(56, 67, 55);
f2(50, 61, 60);
f2(50, 60, 49);
f2(53, 57, 56);
f2(57, 59, 56);
f2(43, 53, 47);
f2(53, 56, 47);
f2(47, 50, 49);
f2(47, 49, 44);
f2(1, 4, 44);
f2(1, 44, 46);
f2(101, 2, 43);
f2(2, 45, 43);
f2(28, 42, 30);
f2(42, 41, 30);
f2(30, 41, 29);
f2(41, 40, 29);
f2(29, 40, 39);
f2(29, 39, 28);
f2(31, 35, 34);
f2(35, 38, 34);
f2(34, 38, 33);
f2(38, 37, 33);
f2(33, 37, 36);
f2(33, 36, 32);
f2(32, 36, 35);
f2(32, 35, 31);
f2(0, 31, 34);
f2(0, 34, 3);
f2(3, 34, 9);
f2(34, 33, 9);
f2(9, 33, 10);
f2(33, 32, 10);
f2(31, 0, 10);
f2(31, 10, 32);
f2(28, 30, 26);
f2(26, 30, 13);
f2(13, 30, 29);
f2(13, 29, 14);
f2(14, 29, 28);
f2(14, 28, 5);
f2(28, 39, 24);
f2(28, 24, 23);
f2(20, 23, 24);
f2(20, 24, 19);
f2(39, 28, 42);
f2(28, 17, 42);
f2(0, 26, 22);
f2(0, 22, 21);
f2(4, 42, 101);
f2(42, 17, 101);
f2(13, 14, 16);
f2(14, 15, 16);
f2(26, 13, 16);
f2(26, 16, 22);
f2(22, 16, 15);
f2(22, 15, 18);
f2(18, 15, 5);
f2(15, 14, 5);
f2(9, 10, 11);
f2(9, 11, 12);
f2(3, 9, 12);
f2(3, 12, 7);
f2(7, 12, 8);
f2(12, 11, 8);
f2(10, 0, 11);
f2(0, 8, 11);
x = 0;
y = 25;
z = 0;
rotationX = 0;
rotationY = 80;
rotationZ = 0;
break;
case 5:
v(0.773, -0.139, -1.172);
v(1.39, -3.108, -1.332);
v(-1.302, -3.108, -1.332);
v(1.044, -0.446, -0.183);
v(1.217, -2.875, -0.186);
v(-1.151, -2.306, -0.526);
v(-0.881, -0.784, 0.002);
v(0.694, -1.896, -1.576);
v(-0.894, -1.896, -1.584);
v(0.759, 0.321, -0.053);
v(0.624, 0.475, -0.548);
v(-1.087, -0.555, -1.139);
v(1.754, -0.552, -0.206);
v(1.613, -0.53, -0.743);
v(1.327, 0.13, -0.479);
v(1.391, 0.12, -0.238);
v(-1.657, -0.641, 0.265);
v(-1.208, -0.349, 1.125);
v(-1.257, -0.019, 0.619);
v(-1.322, -0.042, 0.146);
v(0.809, -1.909, -0.22);
v(-0.772, -1.996, -0.458);
v(-0.853, 0.216, -0.223);
v(-0.717, 0.062, 0.271);
v(0.426, -0.112, 0.066);
v(0.006, -0.116, 0.158);
v(0.202, 0.509, -0.676);
v(-0.588, 0.5, -0.208);
v(0.761, -1.447, 0.205);
v(-0.724, -1.682, 0.205);
v(-0.476, -0.932, -0.055);
v(0.594, -0.823, -0.055);
v(1.027, -0.826, -0.138);
v(-0.991, -0.826, -0.138);
v(-0.011, -1.896, -1.576);
v(-1.027, -0.644, 2.152);
v(-1.469, -0.957, 2.244);
v(-1.244, -1.341, 2.076);
v(-0.865, -1.363, 1.713);
v(1.749, -2.756, -0.679);
v(2.213, -2.709, -0.378);
v(2.401, -2.528, 0.047);
v(1.708, -2.598, -0.032);
v(2.479, -4.594, 0.215);
v(2.572, -4.361, 0.262);
v(2.191, -4.593, 0.271);
v(0.402, -1.406, 2.624);
v(0.395, -1.394, 2.894);
v(-0.086, -1.735, 2.897);
v(0, -1.644, 2.628);
v(-1.514, -2.625, 0.058);
v(1.142, -3.545, 0.637);
v(-1.302, -3.821, -1.213);
v(1.39, -4.128, -1.109);
v(0, -3.798, 0.058);
v(0, -3.798, -1.272);
v(0.925, -4.052, 2.308);
v(0.178, -3.878, 2.304);
v(-0.022, -4.496, 2.006);
v(0.724, -4.67, 2.01);
v(-1.386, -1.495, 2.107);
v(-1.67, -2.592, 1.357);
v(-0.571, -2.97, 1.497);
v(-0.669, -1.489, 2.042);
v(-0.533, -4.418, 2.908);
v(-0.47, -4.374, 2.405);
v(-0.07, -4.414, 2.908);
v(0.638, -4.478, 4.682);
v(0.26, -4.263, 4.679);
v(0.454, -4.795, 3.887);
v(0.995, -4.807, -0.399);
v(-0.9, -4.43, 0.317);
v(0.034, -4.774, -0.875);
v(0.008, -4.816, -0.644);
v(-0.384, -3.456, 1.654);
v(0.178, -4.853, 2.801);
v(-0.25, -4.354, 2.408);
v(0.102, -4.667, 3.885);
v(-0.906, -3.46, 1.656);
v(0.673, -4.84, 2.656);
v(-0.492, 0.698, 0.041);
v(0.15, 0.81, -0.463);
v(0.115, 0.256, 0.179);
v(0.491, 0.09, 0.168);
v(1.399, 1.042, 0.23);
v(1.235, 0.875, 0.855);
v(1.459, 1.577, 0.389);
v(1.295, 1.41, 1.013);
v(0.402, 0.324, 0.488);
v(0.566, 0.491, -0.136);
v(0.889, 1.855, 1.116);
v(1.092, 2.062, 0.343);
v(0.507, 1.985, 0.96);
v(0.671, 2.152, 0.335);
v(-0.093, 1.458, 0.661);
v(0.071, 1.624, 0.037);
v(0.783, 1.341, 1.243);
v(1.124, 1.71, -0.048);
v(0.63, 1.126, -0.245);
v(0.202, 0.737, 0.782);
v(0.637, 0.104, 0.135);
v(1.095, 2.067, 0.78);
v(1.171, 0.518, 0.208);
v(1.089, 0.434, 0.52);
v(0.785, -2.57, 2.645);
v(0.672, -1.979, 2.863);
v(0.204, -2.331, 2.966);
v(0.008, -2.223, 2.651);
v(3.458, -4.652, 0.654);
v(3.164, -4.362, 0.49);
v(2.455, -4.361, 0.758);
v(3.282, -4.651, 1.185);
v(0.304, -5.15, 4.369);
v(0.493, -4.727, 4.922);
v(0.115, -4.511, 4.92);
v(-0.056, -4.939, 4.372);
v(-0.607, -4.9, 2.413);
v(-0.21, -4.898, 2.199);
v(-0.065, -4.997, 2.913);
v(-0.528, -5.002, 2.913);
v(-0.543, -4.903, 3.754);
v(-0.539, -4.993, 3.754);
v(0.203, -4.985, 3.994);
v(0.198, -4.739, 3.992);
v(0.341, -4.118, 5.626);
v(0.245, -4.28, 5.784);
v(0.852, -4.576, 5.534);
v(0.89, -4.517, 5.475);
v(-0.578, -1.259, 1.204);
v(-1.637, -1.229, 1.162);
f2(22, 27, 11);
f2(10, 0, 26);
f2(29, 30, 6);
f2(24, 31, 3);
f2(32, 0, 3);
f2(33, 6, 11);
f2(8, 34, 2);
f2(34, 7, 1);
f2(34, 0, 7);
f2(32, 28, 20);
f2(50, 54, 5);
f2(54, 51, 4);
f2(53, 55, 1);
f2(55, 52, 2);
f2(70, 53, 51);
f2(55, 72, 54);
f2(73, 55, 54);
f2(73, 62, 71);
f2(57, 77, 68);
f2(69, 79, 67);
f2(92, 96, 90);
f2(96, 85, 87);
f2(97, 93, 91);
f2(95, 98, 81);
f2(98, 89, 81);
f2(99, 94, 80);
f2(90, 101, 92);
f2(84, 102, 89);
f2(82, 83, 100);
f2(82, 100, 88);
f2(108, 109, 111);
f2(45, 111, 110);
f2(104, 105, 106);
f2(104, 106, 107);
f2(63, 74, 62);
f2(5, 2, 50);
f2(37, 48, 36);
f2(6, 35, 11);
f2(35, 38, 11);
f2(16, 37, 36);
f2(17, 35, 6);
f2(20, 21, 5);
f2(3, 12, 15);
f2(64, 60, 61);
f2(54, 128, 73);
f2(46, 49, 38);
f2(45, 110, 42);
f2(110, 41, 42);
f2(55, 73, 52);
f2(73, 71, 52);
f2(60, 129, 61);
f2(129, 50, 61);
f2(63, 128, 60);
f2(128, 129, 60);
f2(54, 50, 128);
f2(50, 129, 128);
f2(13, 0, 14);
f2(0, 10, 14);
f2(9, 15, 14);
f2(9, 14, 10);
f2(13, 14, 12);
f2(14, 15, 12);
f2(23, 18, 6);
f2(18, 17, 6);
f2(19, 18, 23);
f2(19, 23, 22);
f2(16, 19, 22);
f2(16, 22, 11);
f2(16, 17, 18);
f2(16, 18, 19);
f2(11, 27, 26);
f2(26, 0, 11);
f2(28, 29, 20);
f2(29, 21, 20);
f2(30, 31, 25);
f2(31, 24, 25);
f2(28, 31, 30);
f2(28, 30, 29);
f2(11, 38, 16);
f2(38, 37, 16);
f2(0, 13, 39);
f2(13, 40, 39);
f2(12, 41, 40);
f2(12, 40, 13);
f2(3, 42, 12);
f2(42, 41, 12);
f2(39, 42, 3);
f2(3, 0, 39);
f2(44, 43, 40);
f2(43, 39, 40);
f2(110, 44, 41);
f2(44, 40, 41);
f2(39, 43, 45);
f2(39, 45, 42);
f2(38, 49, 37);
f2(49, 48, 37);
f2(4, 51, 53);
f2(4, 53, 1);
f2(57, 56, 51);
f2(57, 51, 54);
f2(60, 64, 63);
f2(64, 66, 63);
f2(68, 67, 56);
f2(68, 56, 57);
f2(58, 75, 57);
f2(75, 77, 57);
f2(10, 26, 9);
f2(26, 24, 9);
f2(25, 27, 23);
f2(27, 22, 23);
f2(24, 26, 83);
f2(26, 81, 83);
f2(25, 82, 27);
f2(82, 80, 27);
f2(26, 27, 81);
f2(27, 80, 81);
f2(24, 83, 82);
f2(24, 82, 25);
f2(87, 85, 86);
f2(85, 84, 86);
f2(93, 95, 94);
f2(93, 94, 92);
f2(47, 105, 46);
f2(105, 104, 46);
f2(106, 105, 48);
f2(105, 47, 48);
f2(107, 106, 48);
f2(107, 48, 49);
f2(46, 104, 107);
f2(46, 107, 49);
f2(44, 109, 43);
f2(109, 108, 43);
f2(108, 111, 43);
f2(111, 45, 43);
f2(113, 112, 67);
f2(112, 69, 67);
f2(77, 115, 68);
f2(115, 114, 68);
f2(112, 115, 77);
f2(112, 77, 69);
f2(112, 113, 115);
f2(113, 114, 115);
f2(76, 117, 65);
f2(117, 116, 65);
f2(118, 117, 76);
f2(118, 76, 66);
f2(65, 116, 64);
f2(116, 119, 64);
f2(117, 118, 116);
f2(118, 119, 116);
f2(121, 120, 119);
f2(120, 64, 119);
f2(122, 121, 118);
f2(121, 119, 118);
f2(66, 123, 118);
f2(123, 122, 118);
f2(64, 120, 66);
f2(120, 123, 66);
f2(121, 122, 120);
f2(122, 123, 120);
f2(125, 124, 114);
f2(124, 68, 114);
f2(113, 126, 114);
f2(126, 125, 114);
f2(67, 127, 113);
f2(127, 126, 113);
f2(124, 127, 68);
f2(127, 67, 68);
f2(124, 125, 126);
f2(124, 126, 127);
f2(111, 109, 110);
f2(109, 44, 110);
f2(100, 103, 88);
f2(103, 85, 88);
f2(84, 85, 103);
f2(84, 103, 102);
f2(89, 102, 100);
f2(102, 103, 100);
f2(92, 101, 93);
f2(101, 91, 93);
f2(87, 86, 101);
f2(86, 91, 101);
f2(93, 97, 95);
f2(97, 98, 95);
f2(84, 89, 98);
f2(84, 98, 97);
f2(91, 86, 97);
f2(86, 84, 97);
f2(85, 96, 99);
f2(85, 99, 88);
f2(92, 94, 96);
f2(94, 99, 96);
f2(80, 94, 95);
f2(80, 95, 81);
f2(96, 87, 90);
f2(87, 101, 90);
f2(81, 89, 83);
f2(89, 100, 83);
f2(82, 88, 99);
f2(82, 99, 80);
f2(67, 79, 56);
f2(79, 59, 56);
f2(65, 64, 78);
f2(64, 61, 78);
f2(77, 75, 69);
f2(75, 79, 69);
f2(58, 59, 75);
f2(59, 79, 75);
f2(66, 76, 74);
f2(66, 74, 63);
f2(62, 74, 78);
f2(62, 78, 61);
f2(76, 65, 74);
f2(65, 78, 74);
f2(62, 73, 128);
f2(62, 128, 63);
f2(54, 72, 58);
f2(54, 58, 57);
f2(62, 61, 50);
f2(62, 50, 71);
f2(51, 56, 59);
f2(51, 59, 70);
f2(53, 70, 72);
f2(53, 72, 55);
f2(59, 58, 70);
f2(58, 72, 70);
f2(71, 50, 52);
f2(50, 2, 52);
f2(47, 46, 35);
f2(46, 38, 35);
f2(48, 47, 35);
f2(48, 35, 36);
f2(16, 36, 17);
f2(36, 35, 17);
f2(21, 29, 33);
f2(29, 6, 33);
f2(0, 34, 11);
f2(34, 8, 11);
f2(11, 8, 21);
f2(11, 21, 33);
f2(0, 32, 7);
f2(32, 20, 7);
f2(31, 28, 32);
f2(31, 32, 3);
f2(23, 6, 30);
f2(23, 30, 25);
f2(24, 3, 9);
f2(3, 15, 9);
f2(2, 5, 8);
f2(5, 21, 8);
f2(1, 7, 20);
f2(1, 20, 4);
f2(54, 4, 20);
f2(54, 20, 5);
f2(34, 1, 55);
f2(34, 55, 2);
x = 0;
y = 3;
z = 0;
rotationX = 0;
rotationY = 0xFF;
rotationZ = 0;
break;
case 8:
v(1.22, -0.297, 0.295);
v(1.39, -3.108, -1.332);
v(-1.302, -3.108, -1.332);
v(1.217, -2.875, 0.294);
v(-1.151, -2.875, -0.079);
v(1.183, -1.873, -0.703);
v(1.049, -0.04, 1.192);
v(1.129, -0.01, 0.669);
v(1.711, -0.977, 1.551);
v(1.795, -1.063, 1.008);
v(1.623, -0.285, 0.909);
v(1.587, -0.287, 1.349);
v(-1.223, -0.825, 0.445);
v(-0.988, -1.088, 1.216);
v(-0.837, -0.265, 1.102);
v(1.064, -2.213, 0.332);
v(-0.46, -2.213, -0.086);
v(-0.925, -0.226, 0.852);
v(-0.314, -0.104, 1.284);
v(0.295, -0.736, 1.223);
v(0.062, -0.709, 1.047);
v(0.694, 0.022, 1.199);
v(0.042, 0.096, 0.707);
v(1.109, -2.331, 0.757);
v(-0.555, -2.22, 0.443);
v(-0.274, -0.914, 0.99);
v(0.907, -0.611, 1.229);
v(-0.713, -0.957, -0.208);
v(-0.177, -2.032, -0.909);
v(-1.093, -2.037, 1.515);
v(-1.553, -2.154, 1.224);
v(-1.139, -2.711, 1.143);
v(-0.855, -2.685, 1.34);
v(1.643, -3.146, 2.595);
v(1.887, -3.315, 2.556);
v(1.373, -2.04, 2.025);
v(0.922, -0.881, 2.164);
v(1.127, -1.073, 2.531);
v(0.989, -0.415, 1.944);
v(-1.734, -3.037, 3.015);
v(-1.898, -2.941, 3.208);
v(-2.295, -3.24, 3.02);
v(-2.034, -3.299, 2.89);
v(-1.811, -3.291, 0.044);
v(1.846, -3.396, 0.164);
v(-1.302, -3.821, -1.213);
v(1.39, -3.821, -1.213);
v(0, -3.798, 0.058);
v(0, -3.798, -1.272);
v(1.898, -3.118, 2.917);
v(1.31, -3.425, 2.25);
v(-1.989, -3.074, 2.704);
v(-1.082, -3.663, 2.075);
v(0.828, -5.11, 0.932);
v(0.465, -5.067, 0.683);
v(0.735, -4.534, 1.015);
v(-0.972, -4.702, 2.264);
v(-0.92, -4.273, 2.218);
v(-0.443, -4.685, 2.047);
v(1.268, -4.798, -0.875);
v(-1.187, -4.64, -0.875);
v(0.021, -4.953, -0.875);
v(-0.84, -4.135, 1.372);
v(1.35, -4.123, 2.245);
v(0.357, -4.769, 0.63);
v(-0.408, -4.415, 2.019);
v(-2.18, -4.236, 2.083);
v(2.237, -4.113, 2.31);
v(0.329, 0.317, 1.435);
v(0.791, -0.163, 1.403);
v(-0.106, 0.073, 1.513);
v(0.352, -0.601, 1.652);
v(0.673, -0.373, 2.879);
v(0.212, 0.106, 2.911);
v(1.061, -0.012, 3.062);
v(0.599, 0.468, 3.093);
v(-0.124, -0.152, 1.934);
v(0.338, -0.632, 1.903);
v(0.915, 0.908, 2.811);
v(1.487, 0.314, 2.772);
v(1.087, 0.982, 2.421);
v(1.549, 0.502, 2.389);
v(0.749, 0.705, 1.688);
v(1.211, 0.225, 1.657);
v(0.401, 0.802, 2.683);
v(1.362, -0.195, 2.617);
v(0.893, -0.495, 1.848);
v(0.078, 0.352, 1.904);
v(-0.13, -0.626, 2.006);
v(1.275, 0.667, 2.921);
v(0.219, -0.56, 2.585);
v(-0.012, -0.32, 2.601);
v(-1.786, -4.018, 3.416);
v(-1.803, -3.518, 3.486);
v(-2.306, -3.799, 3.339);
v(-1.993, -4.243, 3.352);
v(1.279, 0.024, 2.449);
v(1.327, -0.464, 2.604);
v(1.455, -0.624, 2.055);
v(1.307, -0.13, 2.178);
v(-0.797, -4.848, 1.484);
v(-1.255, -4.693, 2.019);
v(-1.203, -4.263, 1.973);
v(-0.751, -4.436, 1.445);
v(0.775, -5.045, 0.355);
v(0.51, -4.772, 0.323);
v(1.102, -4.438, 0.694);
v(1.194, -5.014, 0.611);
v(1.674, -5.051, 1.033);
v(1.714, -5.025, 0.955);
v(1.861, -4.336, 1.24);
v(1.751, -4.401, 1.451);
v(-1.741, -4.092, 2.979);
v(-1.927, -4.084, 2.818);
v(-1.794, -4.802, 2.643);
v(-1.726, -4.807, 2.703);
v(-0.975, -3.43, 2.873);
v(-1.939, -4.078, 3.012);
v(1.662, -4.256, 3.105);
v(1.389, -3.413, 2.152);
v(1.318, -1.599, 0.593);
v(1.902, -2.164, 2.044);
v(1.285, -0.976, 2.277);
f2(120, 23, 15);
f2(27, 28, 16);
f2(43, 47, 4);
f2(47, 44, 3);
f2(48, 45, 2);
f2(48, 61, 47);
f2(50, 65, 57);
f2(67, 58, 63);
f2(84, 73, 75);
f2(85, 81, 79);
f2(83, 86, 69);
f2(72, 90, 77);
f2(77, 88, 71);
f2(38, 99, 98);
f2(20, 19, 71);
f2(52, 64, 62);
f2(32, 42, 31);
f2(12, 31, 30);
f2(20, 25, 26);
f2(20, 26, 19);
f2(15, 16, 4);
f2(0, 7, 10);
f2(56, 118, 49);
f2(118, 67, 49);
f2(44, 49, 67);
f2(40, 39, 29);
f2(70, 76, 87);
f2(29, 25, 13);
f2(25, 14, 13);
f2(8, 121, 9);
f2(121, 34, 9);
f2(52, 51, 116);
f2(51, 117, 116);
f2(21, 22, 68);
f2(21, 68, 69);
f2(84, 78, 80);
f2(78, 89, 80);
f2(119, 34, 33);
f2(34, 37, 33);
f2(61, 63, 47);
f2(63, 50, 47);
f2(12, 13, 17);
f2(13, 14, 17);
f2(12, 17, 27);
f2(17, 22, 27);
f2(8, 11, 26);
f2(11, 6, 26);
f2(23, 120, 26);
f2(120, 0, 26);
f2(20, 18, 25);
f2(18, 14, 25);
f2(98, 122, 36);
f2(98, 36, 38);
f2(34, 121, 37);
f2(121, 122, 37);
f2(35, 36, 122);
f2(35, 122, 121);
f2(2, 4, 28);
f2(4, 16, 28);
f2(25, 29, 32);
f2(25, 32, 27);
f2(15, 5, 120);
f2(5, 0, 120);
f2(120, 9, 119);
f2(9, 34, 119);
f2(33, 35, 119);
f2(35, 120, 119);
f2(67, 118, 58);
f2(118, 56, 58);
f2(55, 116, 53);
f2(116, 117, 53);
f2(52, 116, 55);
f2(52, 55, 64);
f2(67, 63, 59);
f2(63, 61, 59);
f2(66, 60, 62);
f2(60, 61, 62);
f2(6, 11, 10);
f2(6, 10, 7);
f2(9, 10, 11);
f2(9, 11, 8);
f2(22, 0, 27);
f2(7, 0, 22);
f2(23, 24, 15);
f2(24, 16, 15);
f2(23, 26, 25);
f2(23, 25, 24);
f2(27, 32, 12);
f2(32, 31, 12);
f2(26, 35, 8);
f2(35, 121, 8);
f2(26, 0, 120);
f2(26, 120, 35);
f2(39, 42, 32);
f2(39, 32, 29);
f2(4, 2, 43);
f2(2, 45, 43);
f2(3, 44, 1);
f2(44, 46, 1);
f2(50, 49, 44);
f2(50, 44, 47);
f2(43, 51, 52);
f2(43, 52, 47);
f2(19, 21, 69);
f2(19, 69, 71);
f2(68, 22, 18);
f2(68, 18, 70);
f2(75, 73, 74);
f2(73, 72, 74);
f2(81, 83, 82);
f2(81, 82, 80);
f2(40, 93, 39);
f2(93, 92, 39);
f2(94, 93, 41);
f2(93, 40, 41);
f2(95, 94, 42);
f2(94, 41, 42);
f2(39, 92, 42);
f2(92, 95, 42);
f2(93, 94, 92);
f2(94, 95, 92);
f2(37, 97, 36);
f2(97, 96, 36);
f2(97, 37, 122);
f2(97, 122, 98);
f2(96, 99, 38);
f2(96, 38, 36);
f2(96, 97, 99);
f2(97, 98, 99);
f2(101, 100, 56);
f2(100, 58, 56);
f2(65, 103, 57);
f2(103, 102, 57);
f2(100, 103, 58);
f2(103, 65, 58);
f2(100, 101, 103);
f2(101, 102, 103);
f2(64, 105, 54);
f2(105, 104, 54);
f2(106, 105, 55);
f2(105, 64, 55);
f2(54, 104, 53);
f2(104, 107, 53);
f2(105, 106, 104);
f2(106, 107, 104);
f2(109, 108, 107);
f2(108, 53, 107);
f2(110, 109, 106);
f2(109, 107, 106);
f2(55, 111, 106);
f2(111, 110, 106);
f2(53, 108, 55);
f2(108, 111, 55);
f2(109, 110, 108);
f2(110, 111, 108);
f2(113, 112, 102);
f2(112, 57, 102);
f2(101, 114, 102);
f2(114, 113, 102);
f2(56, 115, 101);
f2(115, 114, 101);
f2(112, 115, 57);
f2(115, 56, 57);
f2(112, 113, 115);
f2(113, 114, 115);
f2(71, 88, 76);
f2(71, 76, 70);
f2(88, 91, 76);
f2(91, 73, 76);
f2(72, 73, 91);
f2(72, 91, 90);
f2(77, 90, 88);
f2(90, 91, 88);
f2(80, 89, 81);
f2(89, 79, 81);
f2(75, 74, 89);
f2(74, 79, 89);
f2(82, 68, 87);
f2(68, 70, 87);
f2(81, 85, 83);
f2(85, 86, 83);
f2(72, 77, 86);
f2(72, 86, 85);
f2(79, 74, 85);
f2(74, 72, 85);
f2(73, 84, 87);
f2(73, 87, 76);
f2(80, 82, 84);
f2(82, 87, 84);
f2(68, 82, 83);
f2(68, 83, 69);
f2(84, 75, 78);
f2(75, 89, 78);
f2(71, 69, 86);
f2(71, 86, 77);
f2(71, 70, 18);
f2(71, 18, 20);
f2(117, 51, 66);
f2(51, 43, 66);
f2(54, 53, 66);
f2(53, 117, 66);
f2(58, 65, 63);
f2(65, 50, 63);
f2(64, 54, 62);
f2(54, 66, 62);
f2(47, 52, 62);
f2(47, 62, 61);
f2(45, 48, 60);
f2(48, 61, 60);
f2(45, 60, 43);
f2(60, 66, 43);
f2(46, 44, 59);
f2(44, 67, 59);
f2(46, 59, 48);
f2(59, 61, 48);
f2(2, 1, 48);
f2(1, 46, 48);
f2(42, 41, 30);
f2(42, 30, 31);
f2(41, 40, 30);
f2(40, 29, 30);
f2(35, 33, 37);
f2(35, 37, 36);
f2(12, 30, 13);
f2(30, 29, 13);
f2(16, 24, 27);
f2(24, 25, 27);
f2(27, 0, 5);
f2(27, 5, 28);
f2(2, 28, 1);
f2(28, 5, 1);
f2(6, 7, 21);
f2(7, 22, 21);
f2(26, 6, 21);
f2(26, 21, 19);
f2(22, 17, 18);
f2(17, 14, 18);
f2(9, 0, 10);
f2(120, 0, 9);
f2(1, 5, 3);
f2(5, 15, 3);
f2(47, 3, 15);
f2(47, 15, 4);
f2(57, 56, 50);
f2(56, 49, 50);
x = 0;
y = -7;
z = 0;
rotationX = 0;
rotationY = -10;
rotationZ = 0;
break;
case 10:
v(-1.606, 0.574, -0.637);
v(0.966, 0.247, -0.825);
v(0.685, -2.028, -1.189);
v(-2.445, -0.442, 0.782);
v(0.151, -0.047, 0.114);
v(-0.064, -1.783, 0.26);
v(-1.888, -1.709, -0.081);
v(-0.71, -1.822, -0.854);
v(-2.517, 0.003, 0.085);
v(-2.414, 0.501, -0.317);
v(-1.888, -1.709, -1.151);
v(-1.988, 0.023, 1.119);
v(-1.466, 0.019, 0.926);
v(-1.819, 0.592, 0.05);
v(-2.082, 0.334, 0.427);
v(-2.845, -1.969, -0.438);
v(-3.227, -1.192, -0.39);
v(-3.011, -1.03, -0.54);
v(-2.916, -1.244, -0.789);
v(-0.104, -0.36, 0.26);
v(-0.299, -1.929, 0.26);
v(-2.602, -1.021, -0.789);
v(-2.602, -1.021, -0.253);
v(-2.355, -0.456, -0.081);
v(-2.71, 0.121, -0.789);
v(-2.811, -0.694, -0.789);
v(-0.813, -0.32, 0.685);
v(-1.223, -1.766, 0.685);
v(-1.524, -0.976, 0.244);
v(-2.319, -0.164, -0.081);
v(-0.749, -0.061, -0.138);
v(-0.974, -1.874, -0.138);
v(-0.537, -0.422, -0.854);
v(-3.417, -1.983, 0.488);
v(-4.372, -1.401, 0.506);
v(-4.316, -2.024, 0.571);
v(-3.793, -2.054, 0.526);
v(-1.032, -1.777, 2.551);
v(-1.054, -1.272, 2.582);
v(-1.663, -1.645, 2.152);
v(-1.286, -1.928, 1.975);
v(-2.393, -1.812, 2.912);
v(-2.31, -1.57, 3.091);
v(-2.36, -1.43, 2.581);
v(-2.396, -1.706, 2.509);
v(-4.043, -1.716, 2.481);
v(-4.054, -1.446, 2.49);
v(-4.594, -1.568, 2.485);
v(-4.451, -1.736, 2.566);
v(0.563, -2.013, 0.245);
v(0.855, 0.343, 0.245);
v(1.311, -2.105, -0.834);
v(1.745, 0.233, -0.611);
v(1.018, -0.758, 0.353);
v(1.468, -0.813, -0.897);
v(0.583, -1.093, 3.224);
v(0.607, -1.792, 2.91);
v(1.264, -1.495, 2.305);
v(1.24, -0.796, 2.619);
v(2.335, -1.726, 2.686);
v(2.678, -1.769, 1.811);
v(2.774, -0.959, 1.811);
v(2.431, -0.917, 2.686);
v(4.758, -1.871, 2.357);
v(4.493, -1.971, 1.865);
v(4.81, -1.411, 2.357);
v(2.94, -1.526, 3.718);
v(2.952, -1.922, 3.539);
v(2.881, -1.391, 3.165);
v(1.995, 0.045, 0.56);
v(2.156, -1.805, -0.183);
v(2.415, -0.91, -0.13);
v(3.419, -1.235, 1.579);
v(1.97, -1.379, 2.408);
v(4.52, -1.717, 1.865);
v(2.887, -1.641, 3.051);
v(3.359, -1.754, 1.579);
v(1.958, -0.978, 2.589);
v(-3.13, -0.938, -0.567);
v(-3.443, -0.349, -0.567);
v(-2.658, -0.687, -0.167);
v(-2.97, -0.099, -0.167);
v(-3.583, -0.423, 0.92);
v(-3.27, -1.012, 0.92);
v(-4.077, -0.685, 0.96);
v(-3.764, -1.274, 0.96);
v(-2.688, -0.703, 0.084);
v(-3, -0.114, 0.084);
v(-4.114, -1.556, 0.545);
v(-4.501, -0.827, 0.545);
v(-4.215, -1.514, 0.127);
v(-4.528, -0.925, 0.127);
v(-3.676, -1.228, -0.47);
v(-3.989, -0.639, -0.47);
v(-3.575, -1.579, 0.523);
v(-4.225, -0.355, 0.523);
v(-3.549, -0.079, -0.083);
v(-2.998, -1.118, -0.083);
v(-2.581, -0.269, 0.254);
v(-4.418, -1.244, 0.647);
v(-3.046, -0.327, 0.746);
v(-2.89, -0.622, 0.746);
v(-4.373, -1.794, 3.486);
v(-4.132, -1.534, 3.127);
v(-4.719, -1.46, 3.181);
v(-4.666, -1.81, 3.593);
v(-3.352, -1.857, 3.345);
v(-2.897, -1.618, 3.354);
v(-2.97, -1.462, 2.793);
v(-3.309, -1.784, 3.044);
v(3.399, -1.243, 3.009);
v(3.634, -1.485, 3.329);
v(3.579, -1.916, 3.309);
v(3.353, -1.656, 2.994);
v(5.197, -2, 1.955);
v(5.151, -1.595, 1.764);
v(5.46, -1.558, 2.338);
v(5.421, -1.991, 2.498);
v(5.686, -1.984, 3.294);
v(5.767, -2.002, 3.255);
v(5.981, -1.253, 3.29);
v(5.763, -1.198, 3.391);
v(4.365, -2.053, 4.143);
v(4.502, -2.063, 3.939);
v(4.315, -1.352, 3.788);
v(4.264, -1.346, 3.863);
v(-1.159, -0.661, 0.669);
f2(8, 29, 3);
f2(21, 25, 10);
f2(27, 28, 6);
f2(32, 0, 30);
f2(7, 32, 2);
f2(32, 7, 10);
f2(30, 26, 19);
f2(53, 50, 4);
f2(52, 54, 1);
f2(54, 51, 2);
f2(54, 71, 53);
f2(76, 64, 63);
f2(77, 58, 55);
f2(90, 94, 88);
f2(94, 83, 85);
f2(95, 91, 89);
f2(93, 96, 79);
f2(97, 92, 78);
f2(88, 99, 90);
f2(82, 100, 87);
f2(87, 98, 81);
f2(57, 73, 56);
f2(36, 48, 35);
f2(47, 46, 34);
f2(36, 35, 15);
f2(16, 34, 33);
f2(16, 17, 18);
f2(10, 18, 21);
f2(22, 17, 6);
f2(12, 0, 13);
f2(33, 36, 15);
f2(10, 25, 24);
f2(3, 40, 39);
f2(11, 38, 12);
f2(65, 74, 72);
f2(69, 71, 52);
f2(71, 54, 52);
f2(53, 71, 57);
f2(53, 57, 56);
f2(125, 66, 67);
f2(125, 67, 122);
f2(33, 15, 6);
f2(15, 10, 6);
f2(8, 14, 9);
f2(14, 13, 9);
f2(11, 14, 3);
f2(14, 8, 3);
f2(12, 13, 14);
f2(12, 14, 11);
f2(18, 17, 21);
f2(17, 22, 21);
f2(4, 19, 5);
f2(19, 20, 5);
f2(26, 27, 20);
f2(26, 20, 19);
f2(28, 29, 23);
f2(26, 29, 28);
f2(26, 28, 27);
f2(35, 34, 16);
f2(35, 16, 15);
f2(0, 12, 37);
f2(12, 38, 37);
f2(42, 41, 37);
f2(42, 37, 38);
f2(43, 42, 38);
f2(43, 38, 39);
f2(40, 44, 39);
f2(44, 43, 39);
f2(37, 41, 44);
f2(37, 44, 40);
f2(46, 45, 34);
f2(45, 33, 34);
f2(45, 48, 36);
f2(45, 36, 33);
f2(56, 55, 53);
f2(55, 50, 53);
f2(49, 59, 53);
f2(59, 62, 53);
f2(59, 63, 65);
f2(59, 65, 62);
f2(67, 66, 56);
f2(66, 55, 56);
f2(61, 62, 72);
f2(62, 65, 72);
f2(9, 24, 29);
f2(9, 29, 8);
f2(23, 25, 22);
f2(25, 21, 22);
f2(29, 24, 81);
f2(24, 79, 81);
f2(23, 80, 25);
f2(80, 78, 25);
f2(24, 25, 79);
f2(25, 78, 79);
f2(29, 81, 80);
f2(29, 80, 23);
f2(85, 83, 84);
f2(83, 82, 84);
f2(91, 93, 92);
f2(91, 92, 90);
f2(46, 103, 45);
f2(103, 102, 45);
f2(104, 103, 47);
f2(103, 46, 47);
f2(105, 104, 48);
f2(104, 47, 48);
f2(45, 102, 48);
f2(102, 105, 48);
f2(103, 104, 102);
f2(104, 105, 102);
f2(42, 107, 41);
f2(107, 106, 41);
f2(43, 108, 42);
f2(108, 107, 42);
f2(109, 108, 44);
f2(108, 43, 44);
f2(106, 109, 41);
f2(109, 44, 41);
f2(106, 107, 109);
f2(107, 108, 109);
f2(75, 113, 67);
f2(113, 112, 67);
f2(110, 113, 68);
f2(113, 75, 68);
f2(110, 111, 113);
f2(111, 112, 113);
f2(74, 115, 114);
f2(74, 114, 64);
f2(116, 115, 65);
f2(115, 74, 65);
f2(64, 114, 63);
f2(114, 117, 63);
f2(115, 116, 114);
f2(116, 117, 114);
f2(119, 118, 117);
f2(118, 63, 117);
f2(120, 119, 116);
f2(119, 117, 116);
f2(65, 121, 116);
f2(121, 120, 116);
f2(63, 118, 65);
f2(118, 121, 65);
f2(119, 120, 118);
f2(120, 121, 118);
f2(123, 122, 112);
f2(122, 67, 112);
f2(111, 124, 112);
f2(124, 123, 112);
f2(66, 125, 111);
f2(125, 124, 111);
f2(122, 123, 125);
f2(123, 124, 125);
f2(81, 98, 80);
f2(98, 86, 80);
f2(98, 101, 86);
f2(101, 83, 86);
f2(82, 83, 100);
f2(83, 101, 100);
f2(87, 100, 98);
f2(100, 101, 98);
f2(90, 99, 91);
f2(99, 89, 91);
f2(85, 84, 99);
f2(84, 89, 99);
f2(91, 95, 93);
f2(95, 96, 93);
f2(82, 87, 96);
f2(82, 96, 95);
f2(89, 84, 95);
f2(84, 82, 95);
f2(83, 94, 97);
f2(83, 97, 86);
f2(90, 92, 94);
f2(92, 97, 94);
f2(78, 92, 93);
f2(78, 93, 79);
f2(94, 85, 88);
f2(85, 99, 88);
f2(81, 79, 96);
f2(81, 96, 87);
f2(80, 86, 97);
f2(80, 97, 78);
f2(55, 66, 77);
f2(66, 68, 77);
f2(63, 59, 76);
f2(59, 60, 76);
f2(75, 73, 68);
f2(73, 77, 68);
f2(57, 58, 77);
f2(57, 77, 73);
f2(67, 56, 73);
f2(67, 73, 75);
f2(61, 72, 60);
f2(72, 76, 60);
f2(74, 64, 76);
f2(74, 76, 72);
f2(53, 62, 61);
f2(53, 61, 71);
f2(60, 70, 71);
f2(60, 71, 61);
f2(51, 54, 70);
f2(54, 71, 70);
f2(49, 70, 60);
f2(49, 60, 59);
f2(50, 55, 58);
f2(50, 58, 69);
f2(58, 57, 69);
f2(57, 71, 69);
f2(4, 5, 53);
f2(5, 49, 53);
f2(69, 52, 50);
f2(52, 1, 50);
f2(70, 49, 51);
f2(49, 2, 51);
f2(48, 47, 35);
f2(47, 34, 35);
f2(3, 39, 11);
f2(39, 38, 11);
f2(20, 27, 31);
f2(27, 6, 31);
f2(7, 31, 10);
f2(31, 6, 10);
f2(0, 3, 26);
f2(0, 26, 30);
f2(29, 26, 3);
f2(22, 6, 28);
f2(22, 28, 23);
f2(5, 20, 31);
f2(5, 31, 7);
f2(4, 32, 30);
f2(4, 30, 19);
f2(16, 18, 15);
f2(18, 10, 15);
f2(33, 6, 17);
f2(33, 17, 16);
f2(32, 10, 24);
f2(24, 0, 32);
f2(9, 0, 24);
f2(13, 0, 9);
f2(7, 2, 5);
f2(2, 49, 5);
f2(32, 4, 1);
f2(4, 50, 1);
f2(32, 1, 54);
f2(32, 54, 2);
f2(110, 68, 66);
f2(110, 66, 111);
f2(40, 126, 37);
f2(126, 0, 37);
f2(0, 126, 3);
f2(126, 40, 3);
x = 0;
y = -40;
z = 0;
rotationX = 0;
rotationY = -30;
rotationZ = 0;
break;
case 11:
v(1.57, 0.275, -0.117);
v(1.356, -2.822, -1.579);
v(-1.251, -2.985, -1.04);
v(1.023, 0.025, 0.768);
v(1.141, -3.258, -0.004);
v(-1.202, -2.891, 0.211);
v(1.072, -1.847, -0.655);
v(0.802, 0.815, 0.647);
v(1.076, 0.94, 0.204);
v(-0.08, 0.258, -1.375);
v(1.671, -0.164, 1.28);
v(1.996, 0.04, 0.804);
v(1.542, 0.625, 0.456);
v(1.416, 0.567, 0.663);
v(-0.746, 0.17, -1.562);
v(-1.05, -0.168, -0.941);
v(-0.724, 0.598, -0.704);
v(-0.579, 0.644, -1.014);
v(0.876, -1.718, 0.385);
v(-0.688, -1.455, 0.157);
v(-0.186, 0.969, -0.802);
v(-0.477, 0.663, -0.187);
v(0.889, 1.027, 0.001);
v(0.192, 1.156, -0.413);
v(0.87, -1.262, 1.004);
v(-0.552, -0.94, 0.67);
v(0.033, 0.636, 0.271);
v(0.282, 0.59, 0.419);
v(1.16, -1.012, 0.094);
v(-0.644, -0.173, -0.319);
v(-0.64, -1.541, -0.899);
v(-0.737, -1.133, -1.706);
v(-1.349, -1.012, -2.027);
v(-0.895, -1.01, -2.302);
v(-0.521, -1.023, -2.154);
v(1.768, -1.79, 1.468);
v(1.961, -1.868, 1.762);
v(1.808, -1.436, 1.958);
v(1.479, -1.218, 1.433);
v(0.454, -2, 1.035);
v(0.414, -2.125, 1.318);
v(0.292, -1.608, 1.312);
v(0.392, -1.587, 1.043);
v(-1.286, -3.044, -2.253);
v(-1.496, -2.981, -2.411);
v(-1.165, -2.905, -2.82);
v(-1.031, -3.02, -2.582);
v(-1.024, -3.6, 0.706);
v(1.214, -4.338, -0.554);
v(-1.35, -4.313, -0.68);
v(1.275, -3.687, -1.696);
v(-0.138, -3.87, -0.161);
v(-0.12, -3.67, -1.476);
v(0.48, -6.213, -2.34);
v(-0.282, -6.139, -2.337);
v(-0.233, -5.614, -2.77);
v(0.53, -5.685, -2.774);
v(-0.792, -5.408, 1.487);
v(-0.906, -5.878, 0.462);
v(-0.291, -5.922, 0.465);
v(0.141, -5.483, 1.485);
v(-0.811, -7.954, 0.181);
v(-0.73, -7.514, -0.167);
v(-0.348, -7.965, 0.187);
v(-0.042, -6.443, -4.747);
v(-0.473, -6.389, -4.74);
v(0.037, -5.749, -4.283);
v(0.717, -4.571, -2.143);
v(-1.143, -4.945, 0.028);
v(-0.172, -4.598, -2.253);
v(-0.248, -5.124, 0.151);
v(-0.28, -6.432, -0.005);
v(-0.099, -5.483, -3.468);
v(-0.475, -7.518, -0.163);
v(-0.233, -5.798, -4.29);
v(-0.791, -6.331, 0.002);
v(0.339, -5.525, -3.473);
v(0.116, 1.569, 0.481);
v(0.531, 1.352, -0.237);
v(0.864, 1.198, 0.701);
v(0.911, 1.195, 0.036);
v(1.623, 2.268, 0.082);
v(1.577, 2.271, 0.747);
v(1.435, 2.796, 0.066);
v(1.388, 2.799, 0.731);
v(1.08, 1.331, 0.716);
v(1.126, 1.328, 0.051);
v(0.826, 3.035, 0.776);
v(0.884, 3.032, -0.048);
v(0.422, 2.93, 0.663);
v(0.469, 2.927, -0.002);
v(0.124, 2.131, 0.646);
v(0.17, 2.128, -0.02);
v(0.975, 2.602, 1.062);
v(1.071, 2.596, -0.321);
v(0.805, 1.687, -0.262);
v(0.723, 1.692, 0.911);
v(1.378, 1.125, 0.404);
v(0.899, 3.186, 0.361);
v(1.662, 1.724, 0.254);
v(1.639, 1.725, 0.586);
v(-1.077, -3.911, -2.826);
v(-1.411, -3.575, -2.653);
v(-1.123, -3.452, -3.158);
v(-0.895, -3.938, -3.079);
v(-0.223, -2.334, 0.515);
v(-0.072, -2.458, 1.056);
v(-0.222, -1.891, 1.043);
v(0.086, -2.052, 0.538);
v(0.085, -5.69, -5.1);
v(-0.007, -6.394, -5.104);
v(-0.42, -6.259, -5.086);
v(-0.329, -5.645, -5.093);
v(-0.883, -8.086, -0.43);
v(-0.482, -8.007, -0.619);
v(-0.369, -8.483, 0.2);
v(-0.832, -8.47, 0.209);
v(-1.058, -8.32, 1.004);
v(-1.057, -8.411, 1.009);
v(-0.344, -8.412, 1.324);
v(-0.34, -8.166, 1.309);
v(-0.737, -7.252, -5.073);
v(-0.758, -7.273, -5.317);
v(-0.017, -7.168, -5.379);
v(-0.007, -7.161, -5.289);
v(2.234, -1.263, 1.372);
v(2.217, -1.281, 1.818);
f2(1, 6, 4);
f2(30, 2, 5);
f2(18, 4, 6);
f2(5, 19, 30);
f2(7, 27, 3);
f2(26, 21, 29);
f2(20, 23, 9);
f2(8, 0, 22);
f2(25, 26, 29);
f2(27, 24, 3);
f2(28, 0, 3);
f2(6, 0, 28);
f2(30, 29, 9);
f2(30, 1, 2);
f2(30, 6, 1);
f2(9, 0, 30);
f2(30, 0, 6);
f2(28, 24, 18);
f2(6, 28, 18);
f2(28, 3, 24);
f2(29, 19, 25);
f2(29, 30, 19);
f2(51, 4, 5);
f2(47, 51, 5);
f2(51, 48, 4);
f2(52, 2, 1);
f2(50, 52, 1);
f2(52, 49, 2);
f2(50, 67, 52);
f2(67, 56, 55);
f2(67, 48, 53);
f2(56, 67, 53);
f2(67, 50, 48);
f2(68, 57, 47);
f2(49, 68, 47);
f2(68, 58, 57);
f2(58, 68, 59);
f2(68, 49, 52);
f2(69, 54, 51);
f2(52, 69, 51);
f2(69, 55, 54);
f2(70, 51, 60);
f2(59, 70, 60);
f2(70, 52, 51);
f2(55, 69, 67);
f2(69, 52, 67);
f2(52, 70, 68);
f2(70, 59, 68);
f2(59, 71, 58);
f2(71, 73, 62);
f2(63, 73, 60);
f2(54, 74, 65);
f2(74, 72, 66);
f2(72, 55, 56);
f2(75, 61, 57);
f2(58, 75, 57);
f2(75, 62, 61);
f2(76, 53, 64);
f2(66, 76, 64);
f2(76, 56, 53);
f2(62, 75, 71);
f2(75, 58, 71);
f2(56, 76, 72);
f2(76, 66, 72);
f2(79, 85, 77);
f2(86, 80, 78);
f2(93, 84, 87);
f2(89, 93, 87);
f2(93, 82, 84);
f2(82, 93, 85);
f2(93, 89, 91);
f2(94, 88, 83);
f2(81, 94, 83);
f2(94, 90, 88);
f2(90, 94, 92);
f2(94, 81, 86);
f2(92, 95, 78);
f2(95, 86, 78);
f2(86, 95, 94);
f2(95, 92, 94);
f2(85, 96, 77);
f2(96, 91, 77);
f2(91, 96, 93);
f2(96, 85, 93);
f2(98, 84, 83);
f2(88, 98, 83);
f2(98, 87, 84);
f2(98, 90, 89);
f2(87, 98, 89);
f2(98, 88, 90);
f2(99, 81, 82);
f2(81, 99, 86);
f2(99, 97, 86);
f2(97, 100, 85);
f2(100, 82, 85);
f2(82, 100, 99);
f2(100, 97, 99);
f2(86, 97, 80);
f2(79, 80, 97);
f2(79, 97, 85);
f2(121, 122, 124);
f2(122, 123, 124);
f2(65, 121, 124);
f2(65, 124, 64);
f2(64, 124, 110);
f2(124, 123, 110);
f2(110, 123, 111);
f2(123, 122, 111);
f2(111, 122, 121);
f2(111, 121, 65);
f2(117, 118, 119);
f2(117, 119, 120);
f2(61, 117, 63);
f2(117, 120, 63);
f2(63, 120, 115);
f2(120, 119, 115);
f2(115, 119, 118);
f2(115, 118, 116);
f2(116, 118, 117);
f2(116, 117, 61);
f2(113, 114, 115);
f2(113, 115, 116);
f2(62, 113, 61);
f2(113, 116, 61);
f2(63, 115, 114);
f2(63, 114, 73);
f2(73, 114, 62);
f2(114, 113, 62);
f2(109, 110, 112);
f2(110, 111, 112);
f2(66, 109, 112);
f2(66, 112, 74);
f2(74, 112, 65);
f2(112, 111, 65);
f2(64, 110, 109);
f2(64, 109, 66);
f2(39, 105, 108);
f2(39, 108, 42);
f2(42, 108, 107);
f2(42, 107, 41);
f2(41, 107, 40);
f2(107, 106, 40);
f2(40, 106, 39);
f2(106, 105, 39);
f2(101, 102, 103);
f2(101, 103, 104);
f2(43, 101, 46);
f2(101, 104, 46);
f2(46, 104, 103);
f2(46, 103, 45);
f2(45, 103, 102);
f2(45, 102, 44);
f2(44, 102, 43);
f2(102, 101, 43);
f2(89, 90, 92);
f2(89, 92, 91);
f2(83, 84, 82);
f2(83, 82, 81);
f2(26, 27, 80);
f2(26, 80, 79);
f2(22, 23, 78);
f2(23, 77, 78);
f2(27, 22, 80);
f2(22, 78, 80);
f2(21, 26, 23);
f2(21, 23, 20);
f2(7, 8, 22);
f2(7, 22, 27);
f2(55, 72, 54);
f2(72, 74, 54);
f2(60, 73, 71);
f2(60, 71, 59);
f2(54, 65, 64);
f2(54, 64, 53);
f2(57, 61, 60);
f2(61, 63, 60);
f2(51, 54, 53);
f2(51, 53, 48);
f2(1, 4, 48);
f2(1, 48, 50);
f2(31, 43, 46);
f2(31, 46, 34);
f2(34, 46, 33);
f2(46, 45, 33);
f2(33, 45, 32);
f2(45, 44, 32);
f2(32, 44, 43);
f2(32, 43, 31);
f2(35, 39, 38);
f2(39, 42, 38);
f2(37, 41, 40);
f2(37, 40, 36);
f2(36, 40, 39);
f2(36, 39, 35);
f2(0, 35, 38);
f2(0, 38, 3);
f2(3, 38, 10);
f2(38, 37, 10);
f2(29, 31, 9);
f2(31, 34, 9);
f2(9, 34, 14);
f2(34, 33, 14);
f2(14, 33, 32);
f2(14, 32, 15);
f2(15, 32, 31);
f2(15, 31, 29);
f2(25, 24, 27);
f2(25, 27, 26);
f2(24, 25, 18);
f2(25, 19, 18);
f2(0, 9, 23);
f2(0, 23, 22);
f2(4, 18, 5);
f2(18, 19, 5);
f2(14, 15, 17);
f2(15, 16, 17);
f2(9, 14, 17);
f2(9, 17, 20);
f2(20, 17, 16);
f2(20, 16, 21);
f2(21, 16, 29);
f2(16, 15, 29);
f2(10, 11, 12);
f2(10, 12, 13);
f2(3, 10, 13);
f2(3, 13, 7);
f2(7, 13, 8);
f2(13, 12, 8);
f2(11, 0, 12);
f2(0, 8, 12);
f2(47, 57, 60);
f2(47, 60, 51);
f2(5, 2, 49);
f2(5, 49, 47);
f2(0, 125, 35);
f2(125, 36, 35);
f2(125, 0, 11);
f2(37, 126, 10);
f2(126, 11, 10);
f2(11, 126, 125);
f2(36, 125, 126);
f2(36, 126, 37);
f2(38, 42, 41);
f2(38, 41, 37);
f2(105, 106, 107);
f2(105, 107, 108);
f2(26, 79, 77);
f2(26, 77, 23);
f2(77, 91, 92);
f2(77, 92, 78);
x = 0;
y = 20;
z = 0;
rotationX = 0;
rotationY = 80;
rotationZ = 0;
break;
default:
v(1, 0.102, -1.151);
v(1.39, -3.108, -1.332);
v(-1.302, -3.108, -1.332);
v(1, 0.102, -0.081);
v(1.217, -2.875, 0.294);
v(-1.151, -2.875, 0.294);
v(-1, 0.102, -0.081);
v(0.694, -1.896, -0.536);
v(-0.716, -1.896, -0.536);
v(0.828, 0.895, -0.253);
v(0.828, 0.895, -0.789);
v(-1, 0.102, -1.151);
v(1.665, 0.102, -0.39);
v(1.665, 0.102, -0.946);
v(1.396, 0.802, -0.789);
v(1.398, 0.802, -0.54);
v(-1.676, 0.102, -0.946);
v(-1.676, 0.102, -0.39);
v(-1.2, 0.809, -0.54);
v(-1.212, 0.712, -0.789);
v(0.809, -1.503, 0.26);
v(-0.772, -1.503, 0.26);
v(-0.706, 0.895, -0.789);
v(-0.706, 0.895, -0.253);
v(0.179, 0.719, -0.081);
v(-0.114, 0.719, -0.081);
v(0.414, 1.142, -0.789);
v(-0.407, 1.142, -0.789);
v(0.761, -1.178, 0.685);
v(-0.724, -1.178, 0.685);
v(-0.529, -0.17, 0.244);
v(0.547, -0.17, 0.244);
v(1.027, -0.826, -0.138);
v(-0.991, -0.826, -0.138);
v(-0.011, -1.896, -0.536);
v(-1.177, -1.872, -0.579);
v(-1.815, -1.872, -0.5);
v(-1.676, -2.034, -0.925);
v(-1.192, -2.034, -1.131);
v(1.199, -2.034, -1.131);
v(1.665, -2.034, -0.925);
v(1.871, -1.872, -0.5);
v(1.174, -1.872, -0.579);
v(1.53, -3.91, -0.163);
v(1.818, -3.91, -0.285);
v(1.818, -3.748, 0.221);
v(1.53, -3.748, 0.221);
v(-1.477, -3.749, 0.221);
v(-1.748, -3.749, 0.221);
v(-1.748, -3.91, -0.285);
v(-1.477, -3.91, -0.163);
v(-1.302, -3.482, 0.058);
v(1.39, -3.482, 0.058);
v(-1.302, -3.821, -1.213);
v(1.39, -3.821, -1.213);
v(0, -3.798, 0.058);
v(0, -3.798, -1.272);
v(0.834, -6.114, 0.152);
v(0.068, -6.109, 0.152);
v(0.068, -6.482, -0.712);
v(0.834, -6.486, -0.712);
v(-0.8, -6.114, 0.152);
v(-0.8, -6.486, -0.712);
v(0.016, -6.482, -0.712);
v(0.016, -6.109, 0.152);
v(-0.533, -8.53, -0.105);
v(-0.47, -8.271, -0.605);
v(-0.07, -8.526, -0.105);
v(0.555, -8.53, -0.105);
v(0.12, -8.526, -0.105);
v(0.454, -8.271, -0.605);
v(0.917, -4.798, -0.875);
v(-0.9, -4.798, -0.875);
v(0.034, -4.953, -0.875);
v(0.008, -4.953, -0.875);
v(-0.179, -7.162, -0.924);
v(0.19, -7.162, -0.924);
v(-0.215, -8.267, -0.605);
v(0.18, -8.267, -0.605);
v(-0.701, -7.166, -0.924);
v(0.63, -7.166, -0.924);
v(-0.333, 1.399, -0.591);
v(0.333, 1.399, -0.591);
v(-0.333, 1.244, 0.059);
v(0.333, 1.244, 0.059);
v(0.333, 2.473, 0.449);
v(-0.333, 2.473, 0.449);
v(0.333, 2.928, 0.122);
v(-0.333, 2.928, 0.122);
v(-0.333, 1.431, 0.23);
v(0.333, 1.431, 0.23);
v(-0.418, 3.001, -0.479);
v(0.407, 3.001, -0.479);
v(-0.333, 2.786, -0.845);
v(0.333, 2.786, -0.845);
v(-0.333, 1.936, -0.912);
v(0.333, 1.936, -0.912);
v(-0.692, 2.63, -0.198);
v(0.694, 2.63, -0.198);
v(0.622, 1.684, -0.199);
v(-0.554, 1.684, -0.199);
v(0, 1.311, 0.551);
v(0, 3.16, -0.479);
v(0.167, 1.963, 0.648);
v(-0.167, 1.963, 0.648);
v(-1.448, -4.8, 0.087);
v(-1.685, -4.391, 0.264);
v(-1.785, -4.553, -0.299);
v(-1.448, -4.962, -0.181);
v(1.478, -4.962, -0.181);
v(1.766, -4.553, -0.299);
v(1.766, -4.391, 0.264);
v(1.478, -4.8, 0.087);
v(0.592, -8.905, -0.825);
v(0.55, -8.905, -0.104);
v(0.115, -8.901, -0.104);
v(0.175, -8.901, -0.818);
v(-0.607, -8.905, -0.605);
v(-0.21, -8.901, -0.818);
v(-0.065, -8.901, -0.105);
v(-0.528, -8.905, -0.105);
v(-0.776, -8.815, 0.692);
v(-0.771, -8.906, 0.692);
v(-0.065, -8.902, 1.022);
v(-0.07, -8.656, 1.022);
v(0.12, -8.654, 1.022);
v(0.115, -8.9, 1.023);
v(0.789, -8.905, 0.692);
v(0.793, -8.814, 0.692);
f2(1, 7, 4);
f2(8, 2, 5);
f2(20, 4, 7);
f2(5, 21, 8);
f2(9, 24, 3);
f2(25, 23, 6);
f2(22, 27, 11);
f2(10, 0, 26);
f2(29, 30, 6);
f2(30, 25, 6);
f2(24, 31, 3);
f2(31, 28, 3);
f2(32, 0, 3);
f2(7, 0, 32);
f2(8, 33, 11);
f2(33, 6, 11);
f2(34, 1, 2);
f2(8, 34, 2);
f2(34, 7, 1);
f2(11, 0, 34);
f2(34, 0, 7);
f2(34, 8, 11);
f2(32, 28, 20);
f2(7, 32, 20);
f2(32, 3, 28);
f2(33, 21, 29);
f2(6, 33, 29);
f2(33, 8, 21);
f2(55, 4, 5);
f2(51, 55, 5);
f2(55, 52, 4);
f2(56, 2, 1);
f2(54, 56, 1);
f2(56, 53, 2);
f2(54, 71, 56);
f2(71, 60, 59);
f2(71, 52, 57);
f2(60, 71, 57);
f2(71, 54, 52);
f2(72, 61, 51);
f2(53, 72, 51);
f2(72, 62, 61);
f2(62, 72, 63);
f2(72, 53, 56);
f2(73, 58, 55);
f2(56, 73, 55);
f2(73, 59, 58);
f2(74, 55, 64);
f2(63, 74, 64);
f2(74, 56, 55);
f2(59, 73, 71);
f2(73, 56, 71);
f2(56, 74, 72);
f2(74, 63, 72);
f2(63, 75, 62);
f2(75, 77, 66);
f2(67, 77, 64);
f2(58, 78, 69);
f2(78, 76, 70);
f2(76, 59, 60);
f2(79, 65, 61);
f2(62, 79, 61);
f2(79, 66, 65);
f2(80, 57, 68);
f2(70, 80, 68);
f2(80, 60, 57);
f2(66, 79, 75);
f2(79, 62, 75);
f2(60, 80, 76);
f2(80, 70, 76);
f2(83, 89, 81);
f2(90, 84, 82);
f2(81, 95, 82);
f2(96, 82, 95);
f2(97, 88, 91);
f2(93, 97, 91);
f2(97, 86, 88);
f2(86, 97, 89);
f2(97, 93, 95);
f2(98, 92, 87);
f2(85, 98, 87);
f2(98, 94, 92);
f2(94, 98, 96);
f2(98, 85, 90);
f2(96, 99, 82);
f2(99, 90, 82);
f2(90, 99, 98);
f2(99, 96, 98);
f2(89, 100, 81);
f2(100, 95, 81);
f2(95, 100, 97);
f2(100, 89, 97);
f2(102, 88, 87);
f2(92, 102, 87);
f2(102, 91, 88);
f2(102, 94, 93);
f2(91, 102, 93);
f2(102, 92, 94);
f2(103, 85, 86);
f2(85, 103, 90);
f2(103, 101, 90);
f2(101, 104, 89);
f2(104, 86, 89);
f2(86, 104, 103);
f2(104, 101, 103);
f2(90, 101, 84);
f2(83, 84, 101);
f2(83, 101, 89);
f2(125, 126, 128);
f2(126, 127, 128);
f2(69, 125, 128);
f2(69, 128, 68);
f2(68, 128, 114);
f2(128, 127, 114);
f2(114, 127, 115);
f2(127, 126, 115);
f2(115, 126, 125);
f2(115, 125, 69);
f2(121, 122, 123);
f2(121, 123, 124);
f2(65, 121, 67);
f2(121, 124, 67);
f2(67, 124, 119);
f2(124, 123, 119);
f2(119, 123, 122);
f2(119, 122, 120);
f2(120, 122, 121);
f2(120, 121, 65);
f2(117, 118, 119);
f2(117, 119, 120);
f2(66, 117, 65);
f2(117, 120, 65);
f2(67, 119, 118);
f2(67, 118, 77);
f2(77, 118, 66);
f2(118, 117, 66);
f2(113, 114, 116);
f2(114, 115, 116);
f2(70, 113, 116);
f2(70, 116, 78);
f2(78, 116, 69);
f2(116, 115, 69);
f2(68, 114, 113);
f2(68, 113, 70);
f2(109, 110, 112);
f2(110, 111, 112);
f2(43, 109, 112);
f2(43, 112, 46);
f2(46, 112, 111);
f2(46, 111, 45);
f2(45, 111, 44);
f2(111, 110, 44);
f2(44, 110, 43);
f2(110, 109, 43);
f2(105, 106, 107);
f2(105, 107, 108);
f2(47, 105, 50);
f2(105, 108, 50);
f2(50, 108, 107);
f2(50, 107, 49);
f2(49, 107, 106);
f2(49, 106, 48);
f2(48, 106, 47);
f2(106, 105, 47);
f2(93, 94, 96);
f2(93, 96, 95);
f2(87, 88, 86);
f2(87, 86, 85);
f2(25, 24, 84);
f2(25, 84, 83);
f2(26, 27, 82);
f2(27, 81, 82);
f2(27, 25, 83);
f2(27, 83, 81);
f2(24, 26, 84);
f2(26, 82, 84);
f2(23, 25, 27);
f2(23, 27, 22);
f2(9, 10, 26);
f2(9, 26, 24);
f2(59, 76, 58);
f2(76, 78, 58);
f2(64, 77, 75);
f2(64, 75, 63);
f2(58, 69, 68);
f2(58, 68, 57);
f2(61, 65, 64);
f2(65, 67, 64);
f2(51, 61, 55);
f2(61, 64, 55);
f2(55, 58, 57);
f2(55, 57, 52);
f2(1, 4, 52);
f2(1, 52, 54);
f2(5, 2, 51);
f2(2, 53, 51);
f2(35, 47, 50);
f2(35, 50, 38);
f2(38, 50, 37);
f2(50, 49, 37);
f2(37, 49, 36);
f2(49, 48, 36);
f2(36, 48, 47);
f2(36, 47, 35);
f2(39, 43, 42);
f2(43, 46, 42);
f2(42, 46, 41);
f2(46, 45, 41);
f2(41, 45, 44);
f2(41, 44, 40);
f2(40, 44, 43);
f2(40, 43, 39);
f2(0, 39, 42);
f2(0, 42, 3);
f2(3, 42, 12);
f2(42, 41, 12);
f2(12, 41, 13);
f2(41, 40, 13);
f2(39, 0, 13);
f2(39, 13, 40);
f2(6, 35, 11);
f2(35, 38, 11);
f2(11, 38, 16);
f2(38, 37, 16);
f2(16, 37, 36);
f2(16, 36, 17);
f2(17, 36, 35);
f2(17, 35, 6);
f2(29, 28, 31);
f2(29, 31, 30);
f2(25, 30, 31);
f2(25, 31, 24);
f2(28, 29, 20);
f2(29, 21, 20);
f2(0, 11, 27);
f2(0, 27, 26);
f2(4, 20, 5);
f2(20, 21, 5);
f2(16, 17, 19);
f2(17, 18, 19);
f2(11, 16, 19);
f2(11, 19, 22);
f2(22, 19, 18);
f2(22, 18, 23);
f2(23, 18, 6);
f2(18, 17, 6);
f2(12, 13, 14);
f2(12, 14, 15);
f2(3, 12, 15);
f2(3, 15, 9);
f2(9, 15, 10);
f2(15, 14, 10);
f2(13, 0, 14);
f2(0, 10, 14);
x = 0;
y = 25;
z = 0;
rotationX = 0;
rotationY = 0;
rotationZ = 0;
break;
};
scaleX = 1;
scaleY = 1;
scaleZ = 1;
}
public function f(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number):void{
var _local13:Triangle3D = new Triangle3D(this, [ve[_arg1], ve[_arg2], ve[_arg3]], null, [new NumberUV(_arg4, _arg5), new NumberUV(_arg6, _arg7), new NumberUV(_arg8, _arg9)]);
_local13.faceNormal = new Number3D(_arg10, _arg11, _arg12);
fa.push(_local13);
}
public function v(_arg1:Number, _arg2:Number, _arg3:Number):void{
ve.push(new Vertex3D(_arg1, _arg2, _arg3));
}
public function f2(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:MaterialObject3D=null):void{
var _local5:NumberUV = new NumberUV(1, 1);
var _local6:Triangle3D = new Triangle3D(this, [ve[_arg1], ve[_arg2], ve[_arg3]], _arg4, [_local5, _local5, _local5]);
fa.push(_local6);
}
}
}//package org.ascollada
Section 5
//Camera3D (org.papervision3d.cameras.Camera3D)
package org.papervision3d.cameras {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import flash.utils.*;
import org.papervision3d.core.culling.*;
public class Camera3D extends CameraObject3D {
protected var _focusFix:Matrix3D;
protected var _prevUseProjection:Boolean;
protected var _prevZoom:Number;
protected var _prevOrtho:Boolean;
protected var _prevWidth:Number;
protected var _prevHeight:Number;
protected var _prevFocus:Number;
protected var _projection:Matrix3D;
protected var _prevOrthoProjection:Boolean;
public function Camera3D(_arg1:Number=60, _arg2:Number=10, _arg3:Number=5000, _arg4:Boolean=false, _arg5:Boolean=false){
super(_arg2, 40);
this.fov = _arg1;
_prevFocus = 0;
_prevZoom = 0;
_prevOrtho = false;
_prevUseProjection = false;
_useCulling = _arg4;
_useProjectionMatrix = _arg5;
_far = _arg3;
_focusFix = Matrix3D.IDENTITY;
}
public function update(_arg1:Rectangle):void{
if (!_arg1){
throw (new Error(("Camera3D#update: Invalid viewport rectangle! " + _arg1)));
};
this.viewport = _arg1;
_prevFocus = this.focus;
_prevZoom = this.zoom;
_prevWidth = this.viewport.width;
_prevHeight = this.viewport.height;
if (_prevOrtho != this.ortho){
if (this.ortho){
_prevOrthoProjection = this.useProjectionMatrix;
this.useProjectionMatrix = true;
} else {
this.useProjectionMatrix = _prevOrthoProjection;
};
};
this.useProjectionMatrix = this._useProjectionMatrix;
_prevOrtho = this.ortho;
_prevUseProjection = _useProjectionMatrix;
this.useCulling = _useCulling;
}
public function get projection():Matrix3D{
return (_projection);
}
override public function set near(_arg1:Number):void{
if (_arg1 > 0){
this.focus = _arg1;
this.update(this.viewport);
};
}
override public function orbit(_arg1:Number, _arg2:Number, _arg3:Boolean=true, _arg4:DisplayObject3D=null):void{
var _local8:Number;
var _local11:Number;
_arg4 = ((_arg4) || (_target));
_arg4 = ((_arg4) || (DisplayObject3D.ZERO));
if (_arg3){
_arg1 = (_arg1 * (Math.PI / 180));
_arg2 = (_arg2 * (Math.PI / 180));
};
var _local5:Number = (_arg4.world.n14 - this.x);
var _local6:Number = (_arg4.world.n24 - this.y);
var _local7:Number = (_arg4.world.n34 - this.z);
_local8 = Math.sqrt((((_local5 * _local5) + (_local6 * _local6)) + (_local7 * _local7)));
var _local9:Number = (Math.cos(_arg2) * Math.sin(_arg1));
var _local10:Number = (Math.sin(_arg2) * Math.sin(_arg1));
_local11 = Math.cos(_arg1);
this.x = (_arg4.world.n14 + (_local9 * _local8));
this.y = (_arg4.world.n24 + (_local11 * _local8));
this.z = (_arg4.world.n34 + (_local10 * _local8));
this.lookAt(_arg4);
}
override public function set useCulling(_arg1:Boolean):void{
super.useCulling = _arg1;
if (_useCulling){
if (!this.culler){
this.culler = new FrustumCuller();
};
FrustumCuller(this.culler).initialize(this.fov, (this.viewport.width / this.viewport.height), (this.focus / this.zoom), _far);
} else {
this.culler = null;
};
}
override public function projectFaces(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Vertex3D;
var _local25:Vertex3DInstance;
var _local26:Number;
var _local34:Array;
var _local36:Triangle3D;
var _local4:Matrix3D = _arg2.view;
var _local5:Number = _local4.n11;
var _local6:Number = _local4.n12;
var _local7:Number = _local4.n13;
var _local8:Number = _local4.n21;
var _local9:Number = _local4.n22;
var _local10:Number = _local4.n23;
var _local11:Number = _local4.n31;
var _local12:Number = _local4.n32;
var _local13:Number = _local4.n33;
var _local14:Number = _local4.n41;
var _local15:Number = _local4.n42;
var _local16:Number = _local4.n43;
var _local27:int;
var _local28:Number = _arg3.camera.focus;
var _local29:Number = (_local28 * _arg3.camera.zoom);
var _local30:Number = (viewport.width / 2);
var _local31:Number = (viewport.height / 2);
var _local32:Number = _arg3.camera.far;
var _local33:Number = (_local32 - _local28);
var _local35:Number = getTimer();
for each (_local36 in _arg1) {
_local34 = _local36.vertices;
_local27 = _local34.length;
while ((_local24 = _local34[--_local27])) {
if (_local24.timestamp == _local35){
} else {
_local24.timestamp = _local35;
_local17 = _local24.x;
_local18 = _local24.y;
_local19 = _local24.z;
_local22 = ((((_local17 * _local11) + (_local18 * _local12)) + (_local19 * _local13)) + _local4.n34);
_local25 = _local24.vertex3DInstance;
if (_useProjectionMatrix){
_local23 = ((((_local17 * _local14) + (_local18 * _local15)) + (_local19 * _local16)) + _local4.n44);
_local22 = (_local22 / _local23);
if ((_local25.visible = (((_local22 > 0)) && ((_local22 < 1))))){
_local20 = (((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14) / _local23);
_local21 = (((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24) / _local23);
_local25.x = (_local20 * _local30);
_local25.y = (_local21 * _local31);
_local25.z = (_local22 * _local23);
};
} else {
if ((_local25.visible = ((_local28 + _local22) > 0))){
_local20 = ((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14);
_local21 = ((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24);
_local26 = (_local29 / (_local28 + _local22));
_local25.x = (_local20 * _local26);
_local25.y = (_local21 * _local26);
_local25.z = _local22;
};
};
};
};
};
return (0);
}
override public function set orthoScale(_arg1:Number):void{
super.orthoScale = _arg1;
this.useProjectionMatrix = this.useProjectionMatrix;
_prevOrtho = !(this.ortho);
this.update(this.viewport);
}
override public function transformView(_arg1:Matrix3D=null):void{
if (((((((((((!((ortho == _prevOrtho))) || (!((_prevUseProjection == _useProjectionMatrix))))) || (!((focus == _prevFocus))))) || (!((zoom == _prevZoom))))) || (!((viewport.width == _prevWidth))))) || (!((viewport.height == _prevHeight))))){
update(viewport);
};
if (_target){
lookAt(_target);
} else {
if (_transformDirty){
updateTransform();
};
};
if (_useProjectionMatrix){
super.transformView();
this.eye.calculateMultiply4x4(_projection, this.eye);
} else {
_focusFix.copy(this.transform);
_focusFix.n14 = (_focusFix.n14 + (focus * this.transform.n13));
_focusFix.n24 = (_focusFix.n24 + (focus * this.transform.n23));
_focusFix.n34 = (_focusFix.n34 + (focus * this.transform.n33));
super.transformView(_focusFix);
};
if ((culler is FrustumCuller)){
FrustumCuller(culler).transform.copy(this.transform);
};
}
override public function set far(_arg1:Number):void{
if (_arg1 > this.focus){
_far = _arg1;
this.update(this.viewport);
};
}
override public function projectVertices(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Vertex3D;
var _local25:Vertex3DInstance;
var _local26:Number;
var _local4:Matrix3D = _arg2.view;
var _local5:Number = _local4.n11;
var _local6:Number = _local4.n12;
var _local7:Number = _local4.n13;
var _local8:Number = _local4.n21;
var _local9:Number = _local4.n22;
var _local10:Number = _local4.n23;
var _local11:Number = _local4.n31;
var _local12:Number = _local4.n32;
var _local13:Number = _local4.n33;
var _local14:Number = _local4.n41;
var _local15:Number = _local4.n42;
var _local16:Number = _local4.n43;
var _local27:int = _arg1.length;
var _local28:Number = _arg3.camera.focus;
var _local29:Number = (_local28 * _arg3.camera.zoom);
var _local30:Number = (viewport.width / 2);
var _local31:Number = (viewport.height / 2);
var _local32:Number = _arg3.camera.far;
var _local33:Number = (_local32 - _local28);
while ((_local24 = _arg1[--_local27])) {
_local17 = _local24.x;
_local18 = _local24.y;
_local19 = _local24.z;
_local22 = ((((_local17 * _local11) + (_local18 * _local12)) + (_local19 * _local13)) + _local4.n34);
_local25 = _local24.vertex3DInstance;
if (_useProjectionMatrix){
_local23 = ((((_local17 * _local14) + (_local18 * _local15)) + (_local19 * _local16)) + _local4.n44);
_local22 = (_local22 / _local23);
if ((_local25.visible = (((_local22 > 0)) && ((_local22 < 1))))){
_local20 = (((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14) / _local23);
_local21 = (((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24) / _local23);
_local25.x = (_local20 * _local30);
_local25.y = (_local21 * _local31);
_local25.z = (_local22 * _local23);
};
} else {
if ((_local25.visible = ((_local28 + _local22) > 0))){
_local20 = ((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14);
_local21 = ((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24);
_local26 = (_local29 / (_local28 + _local22));
_local25.x = (_local20 * _local26);
_local25.y = (_local21 * _local26);
_local25.z = _local22;
};
};
};
return (0);
}
override public function set useProjectionMatrix(_arg1:Boolean):void{
var _local2:Number;
var _local3:Number;
if (_arg1){
if (this.ortho){
_local2 = (viewport.width / 2);
_local3 = (viewport.height / 2);
_projection = createOrthoMatrix(-(_local2), _local2, -(_local3), _local3, -(_far), _far);
_projection = Matrix3D.multiply(_orthoScaleMatrix, _projection);
} else {
_projection = createPerspectiveMatrix(fov, (viewport.width / viewport.height), this.focus, this.far);
};
} else {
if (this.ortho){
_arg1 = true;
};
};
super.useProjectionMatrix = _arg1;
}
public static function createPerspectiveMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Matrix3D{
var _local5:Number = ((_arg1 / 2) * (Math.PI / 180));
var _local6:Number = Math.tan(_local5);
var _local7:Number = (1 / _local6);
return (new Matrix3D([(_local7 / _arg2), 0, 0, 0, 0, _local7, 0, 0, 0, 0, -(((_arg3 + _arg4) / (_arg3 - _arg4))), (((2 * _arg4) * _arg3) / (_arg3 - _arg4)), 0, 0, 1, 0]));
}
public static function createOrthoMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Matrix3D{
var _local7:Number = ((_arg2 + _arg1) / (_arg2 - _arg1));
var _local8:Number = ((_arg4 + _arg3) / (_arg4 - _arg3));
var _local9:Number = ((_arg6 + _arg5) / (_arg6 - _arg5));
var _local10:Matrix3D = new Matrix3D([(2 / (_arg2 - _arg1)), 0, 0, _local7, 0, (2 / (_arg4 - _arg3)), 0, _local8, 0, 0, (-2 / (_arg6 - _arg5)), _local9, 0, 0, 0, 1]);
_local10.calculateMultiply(Matrix3D.scaleMatrix(1, 1, -1), _local10);
return (_local10);
}
}
}//package org.papervision3d.cameras
Section 6
//CameraType (org.papervision3d.cameras.CameraType)
package org.papervision3d.cameras {
public class CameraType {
public static var TARGET:String = "Target";
public static var DEBUG:String = "Debug";
public static var FREE:String = "Free";
public static var SPRING:String = "Spring";
}
}//package org.papervision3d.cameras
Section 7
//DebugCamera3D (org.papervision3d.cameras.DebugCamera3D)
package org.papervision3d.cameras {
import org.papervision3d.view.*;
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.ui.*;
public class DebugCamera3D extends Camera3D {
protected var keyLeft:Boolean;// = false
protected var targetRotationX:Number;// = 0
protected var targetRotationY:Number;// = 0
protected var sideFactor:Number;// = 0
protected var _propertiesDisplay:Sprite;
protected var viewport3D:Viewport3D;
protected var fovText:TextField;
protected var xText:TextField;
protected var yText:TextField;
protected var zText:TextField;
protected var startPoint:Point;
protected var startRotationX:Number;
protected var startRotationY:Number;
protected var keyBackward:Boolean;// = false
protected var farText:TextField;
protected var keyForward:Boolean;// = false
protected var rotationXText:TextField;
protected var rotationZText:TextField;
protected var rotationYText:TextField;
protected var forwardFactor:Number;// = 0
protected var nearText:TextField;
protected var viewportStage:Stage;
protected var _inertia:Number;// = 3
protected var keyRight:Boolean;// = false
public function DebugCamera3D(_arg1:Viewport3D, _arg2:Number=90, _arg3:Number=10, _arg4:Number=5000){
super(_arg2, _arg3, _arg4, true);
this.viewport3D = _arg1;
this.viewport = _arg1.sizeRectangle;
this.focus = ((this.viewport.height / 2) / Math.tan(((_arg2 / 2) * (Math.PI / 180))));
this.zoom = (this.focus / _arg3);
this.focus = _arg3;
this.far = _arg4;
displayProperties();
checkStageReady();
}
protected function keyDownHandler(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case "W".charCodeAt():
case Keyboard.UP:
keyForward = true;
keyBackward = false;
break;
case "S".charCodeAt():
case Keyboard.DOWN:
keyBackward = true;
keyForward = false;
break;
case "A".charCodeAt():
case Keyboard.LEFT:
keyLeft = true;
keyRight = false;
break;
case "D".charCodeAt():
case Keyboard.RIGHT:
keyRight = true;
keyLeft = false;
break;
case "Q".charCodeAt():
rotationZ--;
break;
case "E".charCodeAt():
rotationZ++;
break;
case "F".charCodeAt():
fov--;
break;
case "R".charCodeAt():
fov++;
break;
case "G".charCodeAt():
near = (near - 10);
break;
case "T".charCodeAt():
near = (near + 10);
break;
case "H".charCodeAt():
far = (far - 10);
break;
case "Y".charCodeAt():
far = (far + 10);
break;
};
}
public function set inertia(_arg1:Number):void{
_inertia = _arg1;
}
protected function setupEvents():void{
viewportStage = viewport3D.containerSprite.stage;
viewportStage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
viewportStage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
viewportStage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
viewportStage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
viewportStage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
protected function displayProperties():void{
_propertiesDisplay = new Sprite();
_propertiesDisplay.graphics.beginFill(0);
_propertiesDisplay.graphics.drawRect(0, 0, 100, 100);
_propertiesDisplay.graphics.endFill();
_propertiesDisplay.x = 0;
_propertiesDisplay.y = 0;
var _local1:TextFormat = new TextFormat("_sans", 9);
xText = new TextField();
yText = new TextField();
zText = new TextField();
rotationXText = new TextField();
rotationYText = new TextField();
rotationZText = new TextField();
fovText = new TextField();
nearText = new TextField();
farText = new TextField();
var _local2:Array = [xText, yText, zText, rotationXText, rotationYText, rotationZText, fovText, nearText, farText];
var _local3 = 10;
var _local4:Number = 0;
while (_local4 < _local2.length) {
_local2[_local4].width = 100;
_local2[_local4].selectable = false;
_local2[_local4].textColor = 0xFFFF00;
_local2[_local4].text = "";
_local2[_local4].defaultTextFormat = _local1;
_local2[_local4].y = (_local3 * _local4);
_propertiesDisplay.addChild(_local2[_local4]);
_local4++;
};
viewport3D.addChild(_propertiesDisplay);
}
protected function onEnterFrameHandler(_arg1:Event):void{
if (keyForward){
forwardFactor = (forwardFactor + 50);
};
if (keyBackward){
forwardFactor = (forwardFactor + -50);
};
if (keyLeft){
sideFactor = (sideFactor + -50);
};
if (keyRight){
sideFactor = (sideFactor + 50);
};
var _local2:Number = (this.rotationX + ((targetRotationX - this.rotationX) / _inertia));
var _local3:Number = (this.rotationY + ((targetRotationY - this.rotationY) / _inertia));
this.rotationX = (Math.round((_local2 * 10)) / 10);
this.rotationY = (Math.round((_local3 * 10)) / 10);
forwardFactor = (forwardFactor + ((0 - forwardFactor) / _inertia));
sideFactor = (sideFactor + ((0 - sideFactor) / _inertia));
if (forwardFactor > 0){
this.moveForward(forwardFactor);
} else {
this.moveBackward(-(forwardFactor));
};
if (sideFactor > 0){
this.moveRight(sideFactor);
} else {
this.moveLeft(-(sideFactor));
};
xText.text = ("x:" + int(x));
yText.text = ("y:" + int(y));
zText.text = ("z:" + int(z));
rotationXText.text = ("rotationX:" + int(_local2));
rotationYText.text = ("rotationY:" + int(_local3));
rotationZText.text = ("rotationZ:" + int(rotationZ));
fovText.text = ("fov:" + Math.round(fov));
nearText.text = ("near:" + Math.round(near));
farText.text = ("far:" + Math.round(far));
}
protected function mouseUpHandler(_arg1:MouseEvent):void{
viewportStage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
protected function keyUpHandler(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case "W".charCodeAt():
case Keyboard.UP:
keyForward = false;
break;
case "S".charCodeAt():
case Keyboard.DOWN:
keyBackward = false;
break;
case "A".charCodeAt():
case Keyboard.LEFT:
keyLeft = false;
break;
case "D".charCodeAt():
case Keyboard.RIGHT:
keyRight = false;
break;
};
}
public function get propsDisplay():Sprite{
return (_propertiesDisplay);
}
public function get inertia():Number{
return (_inertia);
}
protected function onAddedToStageHandler(_arg1:Event):void{
setupEvents();
}
protected function mouseMoveHandler(_arg1:MouseEvent):void{
targetRotationY = (startRotationY - ((startPoint.x - viewportStage.mouseX) / 2));
targetRotationX = (startRotationX + ((startPoint.y - viewportStage.mouseY) / 2));
}
protected function mouseDownHandler(_arg1:MouseEvent):void{
viewportStage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
startPoint = new Point(viewportStage.mouseX, viewportStage.mouseY);
startRotationY = this.rotationY;
startRotationX = this.rotationX;
}
public function set propsDisplay(_arg1:Sprite):void{
_propertiesDisplay = _arg1;
}
private function checkStageReady():void{
if (viewport3D.containerSprite.stage == null){
viewport3D.containerSprite.addEventListener(Event.ADDED_TO_STAGE, onAddedToStageHandler);
} else {
setupEvents();
};
}
}
}//package org.papervision3d.cameras
Section 8
//SpringCamera3D (org.papervision3d.cameras.SpringCamera3D)
package org.papervision3d.cameras {
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
public class SpringCamera3D extends Camera3D {
public var _camTarget:DisplayObject3D;
private var _velocity:Number3D;
private var _stretch:Number3D;
public var damping:Number;// = 4
public var stiffness:Number;// = 1
public var lookOffset:Number3D;
private var _lookAtPosition:Number3D;
public var positionOffset:Number3D;
private var _acceleration:Number3D;
private var _targetTransform:Matrix3D;
private var _desiredPosition:Number3D;
private var _force:Number3D;
private var _xPosition:Number3D;
private var _dv:Number3D;
private var _xLookOffset:Number3D;
public var mass:Number;// = 40
private var _xPositionOffset:Number3D;
private var _xLookAtObject:DisplayObject3D;
private var _zrot:Number;// = 0
public function SpringCamera3D(_arg1:Number=60, _arg2:Number=10, _arg3:Number=5000, _arg4:Boolean=false, _arg5:Boolean=false){
positionOffset = new Number3D(0, 5, -50);
lookOffset = new Number3D(0, 2, 10);
_velocity = new Number3D();
_dv = new Number3D();
_stretch = new Number3D();
_force = new Number3D();
_acceleration = new Number3D();
_desiredPosition = new Number3D();
_lookAtPosition = new Number3D();
_targetTransform = new Matrix3D();
_xPositionOffset = new Number3D();
_xLookOffset = new Number3D();
_xPosition = new Number3D();
_xLookAtObject = new DisplayObject3D();
super(_arg1, _arg2, _arg3, _arg4, _arg5);
}
override public function transformView(_arg1:Matrix3D=null):void{
super.transformView(_arg1);
if (_camTarget != null){
_targetTransform.n31 = _camTarget.transform.n31;
_targetTransform.n32 = _camTarget.transform.n32;
_targetTransform.n33 = _camTarget.transform.n33;
_targetTransform.n21 = _camTarget.transform.n21;
_targetTransform.n22 = _camTarget.transform.n22;
_targetTransform.n23 = _camTarget.transform.n23;
_targetTransform.n11 = _camTarget.transform.n11;
_targetTransform.n12 = _camTarget.transform.n12;
_targetTransform.n13 = _camTarget.transform.n13;
_xPositionOffset.x = positionOffset.x;
_xPositionOffset.y = positionOffset.y;
_xPositionOffset.z = positionOffset.z;
Matrix3D.multiplyVector(_targetTransform, _xPositionOffset);
_xLookOffset.x = lookOffset.x;
_xLookOffset.y = lookOffset.y;
_xLookOffset.z = lookOffset.z;
Matrix3D.multiplyVector(_targetTransform, _xLookOffset);
_desiredPosition.x = (_camTarget.x + _xPositionOffset.x);
_desiredPosition.y = (_camTarget.y + _xPositionOffset.y);
_desiredPosition.z = (_camTarget.z + _xPositionOffset.z);
_lookAtPosition.x = (_camTarget.x + _xLookOffset.x);
_lookAtPosition.y = (_camTarget.y + _xLookOffset.y);
_lookAtPosition.z = (_camTarget.z + _xLookOffset.z);
_stretch.x = ((x - _desiredPosition.x) * -(stiffness));
_stretch.y = ((y - _desiredPosition.y) * -(stiffness));
_stretch.z = ((z - _desiredPosition.z) * -(stiffness));
_dv.x = (_velocity.x * damping);
_dv.y = (_velocity.y * damping);
_dv.z = (_velocity.z * damping);
_force.x = (_stretch.x - _dv.x);
_force.y = (_stretch.y - _dv.y);
_force.z = (_stretch.z - _dv.z);
_acceleration.x = (_force.x * (1 / mass));
_acceleration.y = (_force.y * (1 / mass));
_acceleration.z = (_force.z * (1 / mass));
_velocity.plusEq(_acceleration);
_xPosition.x = (x + _velocity.x);
_xPosition.y = (y + _velocity.y);
_xPosition.z = (z + _velocity.z);
x = _xPosition.x;
y = _xPosition.y;
z = _xPosition.z;
_xLookAtObject.x = _lookAtPosition.x;
_xLookAtObject.y = _lookAtPosition.y;
_xLookAtObject.z = _lookAtPosition.z;
lookAt(_xLookAtObject);
if (Math.abs(_zrot) > 0){
this.rotationZ = _zrot;
};
};
}
override public function get target():DisplayObject3D{
return (_camTarget);
}
public function get zrot():Number{
return (_zrot);
}
override public function set target(_arg1:DisplayObject3D):void{
_camTarget = _arg1;
}
public function set zrot(_arg1:Number):void{
_zrot = _arg1;
if (_zrot < 0.001){
_arg1 = 0;
};
}
}
}//package org.papervision3d.cameras
Section 9
//Clipping (org.papervision3d.core.clipping.draw.Clipping)
package org.papervision3d.core.clipping.draw {
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
public class Clipping {
public var minX:Number;// = -1000000
public var minY:Number;// = -1000000
private var zeroPoint:Point;
private var globalPoint:Point;
private var rectangleClipping:RectangleClipping;
public var maxX:Number;// = 1000000
public var maxY:Number;// = 1000000
public function Clipping(){
zeroPoint = new Point(0, 0);
super();
}
public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{
return (true);
}
public function screen(_arg1:Sprite):Clipping{
if (!rectangleClipping){
rectangleClipping = new RectangleClipping();
};
switch (_arg1.stage.align){
case StageAlign.TOP_LEFT:
zeroPoint.x = 0;
zeroPoint.y = 0;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth);
rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight);
break;
case StageAlign.TOP_RIGHT:
zeroPoint.x = _arg1.stage.stageWidth;
zeroPoint.y = 0;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth);
rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight);
break;
case StageAlign.BOTTOM_LEFT:
zeroPoint.x = 0;
zeroPoint.y = _arg1.stage.stageHeight;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth);
rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight);
break;
case StageAlign.BOTTOM_RIGHT:
zeroPoint.x = _arg1.stage.stageWidth;
zeroPoint.y = _arg1.stage.stageHeight;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth);
rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight);
break;
case StageAlign.TOP:
zeroPoint.x = (_arg1.stage.stageWidth / 2);
zeroPoint.y = 0;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2));
rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2));
rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight);
break;
case StageAlign.BOTTOM:
zeroPoint.x = (_arg1.stage.stageWidth / 2);
zeroPoint.y = _arg1.stage.stageHeight;
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2));
rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2));
rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight);
break;
case StageAlign.LEFT:
zeroPoint.x = 0;
zeroPoint.y = (_arg1.stage.stageHeight / 2);
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth);
rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2));
rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2));
break;
case StageAlign.RIGHT:
zeroPoint.x = _arg1.stage.stageWidth;
zeroPoint.y = (_arg1.stage.stageHeight / 2);
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth);
rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2));
rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2));
break;
default:
zeroPoint.x = (_arg1.stage.stageWidth / 2);
zeroPoint.y = (_arg1.stage.stageHeight / 2);
globalPoint = _arg1.globalToLocal(zeroPoint);
rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2));
rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2));
rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2));
rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2));
};
return (rectangleClipping);
}
public function check(_arg1:RenderableListItem):Boolean{
return (true);
}
public function asRectangleClipping():RectangleClipping{
if (!rectangleClipping){
rectangleClipping = new RectangleClipping();
};
rectangleClipping.minX = -1000000;
rectangleClipping.minY = -1000000;
rectangleClipping.maxX = 1000000;
rectangleClipping.maxY = 1000000;
return (rectangleClipping);
}
}
}//package org.papervision3d.core.clipping.draw
Section 10
//RectangleClipping (org.papervision3d.core.clipping.draw.RectangleClipping)
package org.papervision3d.core.clipping.draw {
import org.papervision3d.core.render.command.*;
public class RectangleClipping extends Clipping {
public function RectangleClipping(_arg1:Number=-1000000, _arg2:Number=-1000000, _arg3:Number=1000000, _arg4:Number=1000000){
this.minX = _arg1;
this.maxX = _arg3;
this.minY = _arg2;
this.maxY = _arg4;
}
override public function check(_arg1:RenderableListItem):Boolean{
if (_arg1.maxX < minX){
return (false);
};
if (_arg1.minX > maxX){
return (false);
};
if (_arg1.maxY < minY){
return (false);
};
if (_arg1.minY > maxY){
return (false);
};
return (true);
}
override public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{
if (this.maxX < _arg1){
return (false);
};
if (this.minX > _arg3){
return (false);
};
if (this.maxY < _arg2){
return (false);
};
if (this.minY > _arg4){
return (false);
};
return (true);
}
public function toString():String{
return ((((((((("{minX:" + minX) + " maxX:") + maxX) + " minY:") + minY) + " maxY:") + maxY) + "}"));
}
override public function asRectangleClipping():RectangleClipping{
return (this);
}
}
}//package org.papervision3d.core.clipping.draw
Section 11
//DefaultClipping (org.papervision3d.core.clipping.DefaultClipping)
package org.papervision3d.core.clipping {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
public class DefaultClipping {
public function testFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:RenderSessionData):Boolean{
return (false);
}
public function clipFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:MaterialObject3D, _arg4:RenderSessionData, _arg5:Array):Number{
return (0);
}
public function setDisplayObject(_arg1:DisplayObject3D, _arg2:RenderSessionData):void{
}
public function reset(_arg1:RenderSessionData):void{
}
}
}//package org.papervision3d.core.clipping
Section 12
//FrustumClipping (org.papervision3d.core.clipping.FrustumClipping)
package org.papervision3d.core.clipping {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.dyn.*;
import org.papervision3d.core.math.util.*;
public class FrustumClipping extends DefaultClipping {
private var _wleft:Plane3D;
private var _cnear:Plane3D;
private var _cbottom:Plane3D;
private var _world:Matrix3D;
private var _ftl:Number3D;
private var _wnear:Plane3D;
private var _wbottom:Plane3D;
private var _wright:Plane3D;
private var _ftr:Number3D;
private var _wfar:Plane3D;
private var _ntl:Number3D;
private var _camPos:Number3D;
private var _ntr:Number3D;
private var _planePoints:Array;
private var _wplanes:Array;
private var _planes:int;
private var _cright:Plane3D;
private var _cfar:Plane3D;
private var _dynTriangles:DynamicTriangles;
private var _nc:Number3D;
private var _axisX:Number3D;
private var _axisY:Number3D;
private var _fc:Number3D;
private var _wtop:Plane3D;
private var _axisZi:Number3D;
private var _matrix:Matrix3D;
private var _axisZ:Number3D;
private var _cleft:Plane3D;
private var _ctop:Plane3D;
private var _fbr:Number3D;
private var _fbl:Number3D;
private var _nbl:Number3D;
private var _cplanes:Array;
private var _nbr:Number3D;
public static const ALL:int = 63;
public static const RIGHT:int = 4;
private static const OUTSIDE:uint = 0;
public static const LEFT:int = 2;
private static const TO_DEGREES:Number = 57.2957795130823;
private static const IN_OUT:uint = 3;
private static const TO_RADIANS:Number = 0.0174532925199433;
private static const OUT_IN:uint = 2;
public static const DEFAULT:int = 31;
public static const NEAR:int = 1;
public static const BOTTOM:int = 16;
public static const TOP:int = 8;
public static const FAR:int = 32;
public static const NONE:int = 0;
private static const INSIDE:uint = 1;
public function FrustumClipping(_arg1:int=-1){
_cleft = Plane3D.fromCoefficients(0, 1, 0, 0);
_cright = Plane3D.fromCoefficients(0, 1, 0, 0);
_ctop = Plane3D.fromCoefficients(0, 1, 0, 0);
_cbottom = Plane3D.fromCoefficients(0, 1, 0, 0);
_cnear = Plane3D.fromCoefficients(0, 1, 0, 0);
_cfar = Plane3D.fromCoefficients(0, 1, 0, 0);
_wleft = Plane3D.fromCoefficients(0, 1, 0, 0);
_wright = Plane3D.fromCoefficients(0, 1, 0, 0);
_wtop = Plane3D.fromCoefficients(0, 1, 0, 0);
_wbottom = Plane3D.fromCoefficients(0, 1, 0, 0);
_wnear = Plane3D.fromCoefficients(0, 1, 0, 0);
_wfar = Plane3D.fromCoefficients(0, 1, 0, 0);
_nc = new Number3D();
_fc = new Number3D();
_ntl = new Number3D();
_ntr = new Number3D();
_nbr = new Number3D();
_nbl = new Number3D();
_ftl = new Number3D();
_ftr = new Number3D();
_fbr = new Number3D();
_fbl = new Number3D();
_camPos = new Number3D();
_axisX = new Number3D();
_axisY = new Number3D();
_axisZ = new Number3D();
_axisZi = new Number3D();
_matrix = Matrix3D.IDENTITY;
_world = Matrix3D.IDENTITY;
_dynTriangles = new DynamicTriangles();
this.planes = ((_arg1 < 0)) ? DEFAULT : _arg1;
}
override public function testFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:RenderSessionData):Boolean{
var _local5:Plane3D;
var _local6:int;
var _local4:int;
while (_local4 < _wplanes.length) {
_local5 = _wplanes[_local4];
_local6 = ClassificationUtil.classifyTriangle(_arg1, _local5);
if ((((_local6 == ClassificationUtil.BACK)) || ((_local6 == ClassificationUtil.COINCIDING)))){
return (false);
};
if (_local6 == ClassificationUtil.STRADDLE){
return (true);
};
_local4++;
};
return (false);
}
public function get planes():int{
return (_planes);
}
public function set planes(_arg1:int):void{
_planes = _arg1;
_cplanes = new Array();
_wplanes = new Array();
_planePoints = new Array();
if ((_planes & NEAR)){
_cplanes.push(_cnear);
_wplanes.push(_wnear);
_planePoints.push(_nc);
};
if ((_planes & FAR)){
_cplanes.push(_cfar);
_wplanes.push(_wfar);
_planePoints.push(_fc);
};
if ((_planes & LEFT)){
_cplanes.push(_cleft);
_wplanes.push(_wleft);
_planePoints.push(_camPos);
};
if ((_planes & RIGHT)){
_cplanes.push(_cright);
_wplanes.push(_wright);
_planePoints.push(_camPos);
};
if ((_planes & TOP)){
_cplanes.push(_ctop);
_wplanes.push(_wtop);
_planePoints.push(_camPos);
};
if ((_planes & BOTTOM)){
_cplanes.push(_cbottom);
_wplanes.push(_wbottom);
_planePoints.push(_camPos);
};
}
private function compareDistances(_arg1:Number, _arg2:Number):uint{
if ((((_arg1 < 0)) && ((_arg2 < 0)))){
return (OUTSIDE);
};
if ((((_arg1 > 0)) && ((_arg2 > 0)))){
return (INSIDE);
};
if ((((_arg1 > 0)) && ((_arg2 < 0)))){
return (IN_OUT);
};
return (OUT_IN);
}
override public function clipFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:MaterialObject3D, _arg4:RenderSessionData, _arg5:Array):Number{
var plane:Plane3D;
var side:int;
var k:int;
var v1:Vertex3D;
var v2:Vertex3D;
var t1:NumberUV;
var t2:NumberUV;
var tri:Triangle3D;
var triangle = _arg1;
var object = _arg2;
var material = _arg3;
var renderSessionData = _arg4;
var outputArray = _arg5;
var points:Array = [triangle.v0, triangle.v1, triangle.v2];
var uvs:Array = [triangle.uv0, triangle.uv1, triangle.uv2];
var clipped:Boolean;
var i:int;
while (i < _wplanes.length) {
plane = _wplanes[i];
side = ClassificationUtil.classifyPoints(points, plane);
try {
if (side == ClassificationUtil.STRADDLE){
points = clipPointsToPlane(triangle.instance, points, uvs, plane);
clipped = true;
};
} catch(e:Error) {
PaperLogger.error(("FrustumClipping#clipFace : " + e.message));
};
i = (i + 1);
};
if (!clipped){
outputArray.push(triangle);
return (1);
};
var v0:Vertex3D = points[0];
var t0:NumberUV = uvs[0];
var j = 1;
while (j < points.length) {
k = ((j + 1) % points.length);
v1 = points[j];
v2 = points[k];
t1 = uvs[j];
t2 = uvs[k];
tri = _dynTriangles.getTriangle(triangle.instance, triangle.material, v0, v1, v2, t0, t1, t2);
if (tri.faceNormal.modulo){
outputArray.push(tri);
};
j = (j + 1);
};
return (outputArray.length);
}
public function clipPointsToPlane(_arg1:DisplayObject3D, _arg2:Array, _arg3:Array, _arg4:Plane3D):Array{
var _local10:int;
var _local11:Vertex3D;
var _local12:Vertex3D;
var _local13:NumberUV;
var _local14:NumberUV;
var _local15:Number;
var _local16:Number;
var _local17:Vertex3D;
var _local18:NumberUV;
var _local19:uint;
var _local5:Array = new Array();
var _local6:Array = new Array();
var _local7:Number = _arg4.distance(_arg2[0]);
var _local8:int;
while (_local8 < _arg2.length) {
_local10 = ((_local8 + 1) % _arg2.length);
_local11 = _arg2[_local8];
_local12 = _arg2[_local10];
_local13 = _arg3[_local8];
_local14 = _arg3[_local10];
_local15 = _arg4.distance(_local12);
_local16 = (_local7 / (_local7 - _local15));
_local19 = compareDistances(_local7, _local15);
switch (_local19){
case INSIDE:
_local5.push(_local12);
_local6.push(_local14);
break;
case IN_OUT:
_local17 = new Vertex3D();
_local17.x = (_local11.x + ((_local12.x - _local11.x) * _local16));
_local17.y = (_local11.y + ((_local12.y - _local11.y) * _local16));
_local17.z = (_local11.z + ((_local12.z - _local11.z) * _local16));
_local18 = new NumberUV();
_local18.u = (_local13.u + ((_local14.u - _local13.u) * _local16));
_local18.v = (_local13.v + ((_local14.v - _local13.v) * _local16));
_local6.push(_local18);
_local5.push(_local17);
_arg1.geometry.vertices.push(_local17);
break;
case OUT_IN:
_local18 = new NumberUV();
_local18.u = (_local13.u + ((_local14.u - _local13.u) * _local16));
_local18.v = (_local13.v + ((_local14.v - _local13.v) * _local16));
_local6.push(_local18);
_local6.push(_local14);
_local17 = new Vertex3D();
_local17.x = (_local11.x + ((_local12.x - _local11.x) * _local16));
_local17.y = (_local11.y + ((_local12.y - _local11.y) * _local16));
_local17.z = (_local11.z + ((_local12.z - _local11.z) * _local16));
_local5.push(_local17);
_local5.push(_local12);
_arg1.geometry.vertices.push(_local17);
break;
default:
break;
};
_local7 = _local15;
_local8++;
};
var _local9:int;
while (_local9 < _local6.length) {
_arg3[_local9] = _local6[_local9];
_local9++;
};
return (_local5);
}
override public function reset(_arg1:RenderSessionData):void{
var _local2:CameraObject3D = _arg1.camera;
var _local3:Number = _arg1.viewPort.viewportWidth;
var _local4:Number = _arg1.viewPort.viewportHeight;
var _local5:Number = Math.tan(((_local2.fov / 2) * TO_RADIANS));
var _local6:Number = _local2.focus;
_matrix.copy(_arg1.camera.transform);
_axisX.reset(_matrix.n11, _matrix.n21, _matrix.n31);
_axisY.reset(_matrix.n12, _matrix.n22, _matrix.n32);
_axisZ.reset(_matrix.n13, _matrix.n23, _matrix.n33);
_axisZi.reset(-(_axisZ.x), -(_axisZ.y), -(_axisZ.z));
var _local7:Number = ((2 * _local5) * _local6);
var _local8:Number = (_local7 * (_local3 / _local4));
_camPos.reset(_local2.x, _local2.y, _local2.z);
_nc.x = (_camPos.x + (_local6 * _axisZ.x));
_nc.y = (_camPos.y + (_local6 * _axisZ.y));
_nc.z = (_camPos.z + (_local6 * _axisZ.z));
_fc.x = (_camPos.x + (_local2.far * _axisZ.x));
_fc.y = (_camPos.y + (_local2.far * _axisZ.y));
_fc.z = (_camPos.z + (_local2.far * _axisZ.z));
_ntl.copyFrom(_nc);
_nbl.copyFrom(_nc);
_ntr.copyFrom(_nc);
_nbr.copyFrom(_nc);
_local7 = (_local7 / 2);
_local8 = (_local8 / 2);
_ntl.x = (_ntl.x - (_local8 * _axisX.x));
_ntl.y = (_ntl.y - (_local8 * _axisX.y));
_ntl.z = (_ntl.z - (_local8 * _axisX.z));
_ntl.x = (_ntl.x + (_local7 * _axisY.x));
_ntl.y = (_ntl.y + (_local7 * _axisY.y));
_ntl.z = (_ntl.z + (_local7 * _axisY.z));
_nbl.x = (_nbl.x - (_local8 * _axisX.x));
_nbl.y = (_nbl.y - (_local8 * _axisX.y));
_nbl.z = (_nbl.z - (_local8 * _axisX.z));
_nbl.x = (_nbl.x - (_local7 * _axisY.x));
_nbl.y = (_nbl.y - (_local7 * _axisY.y));
_nbl.z = (_nbl.z - (_local7 * _axisY.z));
_nbr.x = (_nbr.x + (_local8 * _axisX.x));
_nbr.y = (_nbr.y + (_local8 * _axisX.y));
_nbr.z = (_nbr.z + (_local8 * _axisX.z));
_nbr.x = (_nbr.x - (_local7 * _axisY.x));
_nbr.y = (_nbr.y - (_local7 * _axisY.y));
_nbr.z = (_nbr.z - (_local7 * _axisY.z));
_ntr.x = (_ntr.x + (_local8 * _axisX.x));
_ntr.y = (_ntr.y + (_local8 * _axisX.y));
_ntr.z = (_ntr.z + (_local8 * _axisX.z));
_ntr.x = (_ntr.x + (_local7 * _axisY.x));
_ntr.y = (_ntr.y + (_local7 * _axisY.y));
_ntr.z = (_ntr.z + (_local7 * _axisY.z));
if ((_planes & NEAR)){
_cnear.setNormalAndPoint(_axisZ, _nc);
};
if ((_planes & FAR)){
_cfar.setNormalAndPoint(_axisZi, _fc);
};
if ((_planes & LEFT)){
_cleft.setThreePoints(_camPos, _nbl, _ntl);
};
if ((_planes & RIGHT)){
_cright.setThreePoints(_camPos, _ntr, _nbr);
};
if ((_planes & TOP)){
_ctop.setThreePoints(_camPos, _ntl, _ntr);
};
if ((_planes & BOTTOM)){
_cbottom.setThreePoints(_camPos, _nbr, _nbl);
};
_dynTriangles.releaseAll();
}
override public function setDisplayObject(_arg1:DisplayObject3D, _arg2:RenderSessionData):void{
var _local5:Plane3D;
var _local6:Plane3D;
_world.copy(_arg1.world);
_world.invert();
var _local3:Number3D = new Number3D();
var _local4:int;
while (_local4 < _cplanes.length) {
_local5 = _cplanes[_local4];
_local6 = _wplanes[_local4];
_local3.copyFrom(_planePoints[_local4]);
_local6.normal.copyFrom(_local5.normal);
Matrix3D.multiplyVector3x3(_world, _local6.normal);
Matrix3D.multiplyVector(_world, _local3);
_local6.setNormalAndPoint(_local6.normal, _local3);
_local4++;
};
}
}
}//package org.papervision3d.core.clipping
Section 13
//DefaultLineCuller (org.papervision3d.core.culling.DefaultLineCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.geom.renderables.*;
public class DefaultLineCuller implements ILineCuller {
public function testLine(_arg1:Line3D):Boolean{
return (((_arg1.v0.vertex3DInstance.visible) && (_arg1.v1.vertex3DInstance.visible)));
}
}
}//package org.papervision3d.core.culling
Section 14
//DefaultParticleCuller (org.papervision3d.core.culling.DefaultParticleCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.geom.renderables.*;
public class DefaultParticleCuller implements IParticleCuller {
public function testParticle(_arg1:Particle):Boolean{
if (_arg1.material.invisible == false){
if (_arg1.vertex3D.vertex3DInstance.visible == true){
return (true);
};
};
return (false);
}
}
}//package org.papervision3d.core.culling
Section 15
//DefaultTriangleCuller (org.papervision3d.core.culling.DefaultTriangleCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.geom.renderables.*;
public class DefaultTriangleCuller implements ITriangleCuller {
protected static var y2:Number;
protected static var y1:Number;
protected static var y0:Number;
protected static var x0:Number;
protected static var x1:Number;
protected static var x2:Number;
public function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{
var _local5:MaterialObject3D;
if (((((_arg2.visible) && (_arg3.visible))) && (_arg4.visible))){
_local5 = (_arg1.material) ? _arg1.material : _arg1.instance.material;
if (_local5.invisible){
return (false);
};
x0 = _arg2.x;
y0 = _arg2.y;
x1 = _arg3.x;
y1 = _arg3.y;
x2 = _arg4.x;
y2 = _arg4.y;
if (_local5.oneSide){
if (_local5.opposite){
if ((((x2 - x0) * (y1 - y0)) - ((y2 - y0) * (x1 - x0))) > 0){
return (false);
};
} else {
if ((((x2 - x0) * (y1 - y0)) - ((y2 - y0) * (x1 - x0))) < 0){
return (false);
};
};
};
return (true);
};
return (false);
}
}
}//package org.papervision3d.core.culling
Section 16
//FrustumCuller (org.papervision3d.core.culling.FrustumCuller)
package org.papervision3d.core.culling {
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
public class FrustumCuller implements IObjectCuller {
private var _tang:Number;
private var _near:Number;
private var _ratio:Number;
private var _fov:Number;
private var _far:Number;
private var _nh:Number;
private var _fh:Number;
private var _nw:Number;
public var transform:Matrix3D;
private var _sphereY:Number;
private var _sphereX:Number;
private var _fw:Number;
public static const OUTSIDE:int = -1;
public static const INSIDE:int = 1;
public static const INTERSECT:int = 0;
public function FrustumCuller(){
this.transform = Matrix3D.IDENTITY;
this.initialize();
}
public function get ratio():Number{
return (_ratio);
}
public function pointInFrustum(_arg1:Number, _arg2:Number, _arg3:Number):int{
var _local4:Matrix3D = this.transform;
var _local5:Number = (_arg1 - _local4.n14);
var _local6:Number = (_arg2 - _local4.n24);
var _local7:Number = (_arg3 - _local4.n34);
var _local8:Number = (((_local5 * _local4.n13) + (_local6 * _local4.n23)) + (_local7 * _local4.n33));
if ((((_local8 > _far)) || ((_local8 < _near)))){
return (OUTSIDE);
};
var _local9:Number = (((_local5 * _local4.n12) + (_local6 * _local4.n22)) + (_local7 * _local4.n32));
var _local10:Number = (_local8 * _tang);
if ((((_local9 > _local10)) || ((_local9 < -(_local10))))){
return (OUTSIDE);
};
var _local11:Number = (((_local5 * _local4.n11) + (_local6 * _local4.n21)) + (_local7 * _local4.n31));
_local10 = (_local10 * _ratio);
if ((((_local11 > _local10)) || ((_local11 < -(_local10))))){
return (OUTSIDE);
};
return (INSIDE);
}
public function get fov():Number{
return (_fov);
}
public function set ratio(_arg1:Number):void{
this.initialize(_fov, _arg1, _near, _far);
}
public function set near(_arg1:Number):void{
this.initialize(_fov, _ratio, _arg1, _far);
}
public function set fov(_arg1:Number):void{
this.initialize(_arg1, _ratio, _near, _far);
}
public function get far():Number{
return (_far);
}
public function initialize(_arg1:Number=60, _arg2:Number=1.333, _arg3:Number=1, _arg4:Number=5000):void{
_fov = _arg1;
_ratio = _arg2;
_near = _arg3;
_far = _arg4;
var _local5:Number = (((Math.PI / 180) * _fov) * 0.5);
_tang = Math.tan(_local5);
_nh = (_near * _tang);
_nw = (_nh * _ratio);
_fh = (_far * _tang);
_fw = (_fh * _ratio);
var _local6:Number = Math.atan((_tang * _ratio));
_sphereX = (1 / Math.cos(_local6));
_sphereY = (1 / Math.cos(_local5));
}
public function set far(_arg1:Number):void{
this.initialize(_fov, _ratio, _near, _arg1);
}
public function get near():Number{
return (_near);
}
public function sphereInFrustum(_arg1:DisplayObject3D, _arg2:BoundingSphere):int{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local3:Number = (_arg2.radius * Math.max(_arg1.scaleX, Math.max(_arg1.scaleY, _arg1.scaleZ)));
var _local8:int = INSIDE;
var _local9:Matrix3D = this.transform;
var _local10:Number = (_arg1.world.n14 - _local9.n14);
var _local11:Number = (_arg1.world.n24 - _local9.n24);
var _local12:Number = (_arg1.world.n34 - _local9.n34);
_local7 = (((_local10 * _local9.n13) + (_local11 * _local9.n23)) + (_local12 * _local9.n33));
if ((((_local7 > (_far + _local3))) || ((_local7 < (_near - _local3))))){
return (OUTSIDE);
};
if ((((_local7 > (_far - _local3))) || ((_local7 < (_near + _local3))))){
_local8 = INTERSECT;
};
_local6 = (((_local10 * _local9.n12) + (_local11 * _local9.n22)) + (_local12 * _local9.n32));
_local4 = (_sphereY * _local3);
_local7 = (_local7 * _tang);
if ((((_local6 > (_local7 + _local4))) || ((_local6 < (-(_local7) - _local4))))){
return (OUTSIDE);
};
if ((((_local6 > (_local7 - _local4))) || ((_local6 < (-(_local7) + _local4))))){
_local8 = INTERSECT;
};
_local5 = (((_local10 * _local9.n11) + (_local11 * _local9.n21)) + (_local12 * _local9.n31));
_local7 = (_local7 * _ratio);
_local4 = (_sphereX * _local3);
if ((((_local5 > (_local7 + _local4))) || ((_local5 < (-(_local7) - _local4))))){
return (OUTSIDE);
};
if ((((_local5 > (_local7 - _local4))) || ((_local5 < (-(_local7) + _local4))))){
_local8 = INTERSECT;
};
return (_local8);
}
public function testObject(_arg1:DisplayObject3D):int{
var _local2:int = INSIDE;
if (((((!(_arg1.geometry)) || (!(_arg1.geometry.vertices)))) || (!(_arg1.geometry.vertices.length)))){
return (_local2);
};
switch (_arg1.frustumTestMethod){
case FrustumTestMethod.BOUNDING_SPHERE:
_local2 = sphereInFrustum(_arg1, _arg1.geometry.boundingSphere);
break;
case FrustumTestMethod.BOUNDING_BOX:
_local2 = aabbInFrustum(_arg1, _arg1.geometry.aabb);
break;
case FrustumTestMethod.NO_TESTING:
break;
default:
break;
};
return (_local2);
}
public function aabbInFrustum(_arg1:DisplayObject3D, _arg2:AxisAlignedBoundingBox, _arg3:Boolean=true):int{
var _local4:Vertex3D;
var _local5:Number3D;
var _local6:int;
var _local7:int;
var _local8:Array = _arg2.getBoxVertices();
for each (_local4 in _local8) {
_local5 = _local4.toNumber3D();
Matrix3D.multiplyVector(_arg1.world, _local5);
if (pointInFrustum(_local5.x, _local5.y, _local5.z) == INSIDE){
_local6++;
if (_arg3){
return (INSIDE);
};
} else {
_local7++;
};
if (((_local6) && (_local7))){
return (INTERSECT);
};
};
if (_local6){
return (((_local6 < 8)) ? INTERSECT : INSIDE);
//unresolved jump
};
return (OUTSIDE);
}
}
}//package org.papervision3d.core.culling
Section 17
//FrustumTestMethod (org.papervision3d.core.culling.FrustumTestMethod)
package org.papervision3d.core.culling {
public class FrustumTestMethod {
public static const BOUNDING_BOX:int = 1;
public static const NO_TESTING:int = -1;
public static const BOUNDING_SPHERE:int = 0;
}
}//package org.papervision3d.core.culling
Section 18
//ILineCuller (org.papervision3d.core.culling.ILineCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.geom.renderables.*;
public interface ILineCuller {
function testLine(_arg1:Line3D):Boolean;
}
}//package org.papervision3d.core.culling
Section 19
//IObjectCuller (org.papervision3d.core.culling.IObjectCuller)
package org.papervision3d.core.culling {
import org.papervision3d.objects.*;
public interface IObjectCuller {
function testObject(_arg1:DisplayObject3D):int;
}
}//package org.papervision3d.core.culling
Section 20
//IParticleCuller (org.papervision3d.core.culling.IParticleCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.geom.renderables.*;
public interface IParticleCuller {
function testParticle(_arg1:Particle):Boolean;
}
}//package org.papervision3d.core.culling
Section 21
//ITriangleCuller (org.papervision3d.core.culling.ITriangleCuller)
package org.papervision3d.core.culling {
import org.papervision3d.core.geom.renderables.*;
public interface ITriangleCuller {
function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean;
}
}//package org.papervision3d.core.culling
Section 22
//RectangleLineCuller (org.papervision3d.core.culling.RectangleLineCuller)
package org.papervision3d.core.culling {
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.util.*;
public class RectangleLineCuller implements ILineCuller {
private var lineBoundsRect:Rectangle;
private var rectIntersection:Rectangle;
private var cullingRectangle:Rectangle;
public function RectangleLineCuller(_arg1:Rectangle=null):void{
if (_arg1){
this.cullingRectangle = _arg1;
};
lineBoundsRect = new Rectangle();
rectIntersection = new Rectangle();
}
public function testLine(_arg1:Line3D):Boolean{
if (((!(_arg1.v0.vertex3DInstance.visible)) || (!(_arg1.v1.vertex3DInstance.visible)))){
return (false);
};
var _local2:Number = _arg1.v0.vertex3DInstance.x;
var _local3:Number = _arg1.v0.vertex3DInstance.y;
var _local4:Number = _arg1.v1.vertex3DInstance.x;
var _local5:Number = _arg1.v1.vertex3DInstance.y;
lineBoundsRect.width = Math.abs((_local4 - _local2));
lineBoundsRect.height = Math.abs((_local5 - _local3));
if (_local2 < _local4){
lineBoundsRect.x = _local2;
} else {
lineBoundsRect.x = _local4;
};
if (_local3 < _local5){
lineBoundsRect.y = _local3;
} else {
lineBoundsRect.y = _local5;
};
if (cullingRectangle.containsRect(lineBoundsRect)){
return (true);
};
if (!FastRectangleTools.intersects(lineBoundsRect, cullingRectangle)){
return (false);
};
rectIntersection = FastRectangleTools.intersection(lineBoundsRect, cullingRectangle);
var _local6:Number = ((_local5 - _local3) / (_local4 - _local2));
var _local7:Number = (_local3 - (_local6 * _local2));
var _local8:Number = ((cullingRectangle.top - _local7) / _local6);
if ((((_local8 > rectIntersection.left)) && ((_local8 < rectIntersection.right)))){
return (true);
};
_local8 = ((cullingRectangle.bottom - _local7) / _local6);
if ((((_local8 > rectIntersection.left)) && ((_local8 < rectIntersection.right)))){
return (true);
};
var _local9:Number = ((_local6 * cullingRectangle.left) + _local7);
if ((((_local9 > rectIntersection.top)) && ((_local9 < rectIntersection.bottom)))){
return (true);
};
_local9 = ((_local6 * cullingRectangle.right) + _local7);
if ((((_local9 > rectIntersection.top)) && ((_local9 < rectIntersection.bottom)))){
return (true);
};
return (false);
}
}
}//package org.papervision3d.core.culling
Section 23
//RectangleParticleCuller (org.papervision3d.core.culling.RectangleParticleCuller)
package org.papervision3d.core.culling {
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.util.*;
public class RectangleParticleCuller implements IParticleCuller {
public var cullingRectangle:Rectangle;
private static var vInstance:Vertex3DInstance;
private static var testPoint:Point;
public function RectangleParticleCuller(_arg1:Rectangle=null){
this.cullingRectangle = _arg1;
testPoint = new Point();
}
public function testParticle(_arg1:Particle):Boolean{
vInstance = _arg1.vertex3D.vertex3DInstance;
if (_arg1.material.invisible == false){
if (vInstance.visible){
if (FastRectangleTools.intersects(_arg1.renderRect, cullingRectangle)){
return (true);
};
};
};
return (false);
}
}
}//package org.papervision3d.core.culling
Section 24
//RectangleTriangleCuller (org.papervision3d.core.culling.RectangleTriangleCuller)
package org.papervision3d.core.culling {
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.util.*;
public class RectangleTriangleCuller extends DefaultTriangleCuller implements ITriangleCuller {
public var cullingRectangle:Rectangle;
private static const DEFAULT_RECT_X:Number = -((DEFAULT_RECT_W / 2));
private static const DEFAULT_RECT_W:Number = 640;
private static const DEFAULT_RECT_H:Number = 480;
private static const DEFAULT_RECT_Y:Number = -((DEFAULT_RECT_H / 2));
private static var hitRect:Rectangle = new Rectangle();
public function RectangleTriangleCuller(_arg1:Rectangle=null):void{
cullingRectangle = new Rectangle(DEFAULT_RECT_X, DEFAULT_RECT_Y, DEFAULT_RECT_W, DEFAULT_RECT_H);
super();
if (_arg1){
this.cullingRectangle = _arg1;
};
}
override public function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{
if (super.testFace(_arg1, _arg2, _arg3, _arg4)){
hitRect.x = Math.min(_arg4.x, Math.min(_arg3.x, _arg2.x));
hitRect.width = (Math.max(_arg4.x, Math.max(_arg3.x, _arg2.x)) + Math.abs(hitRect.x));
hitRect.y = Math.min(_arg4.y, Math.min(_arg3.y, _arg2.y));
hitRect.height = (Math.max(_arg4.y, Math.max(_arg3.y, _arg2.y)) + Math.abs(hitRect.y));
return (FastRectangleTools.intersects(cullingRectangle, hitRect));
};
return (false);
}
}
}//package org.papervision3d.core.culling
Section 25
//ViewportObjectFilter (org.papervision3d.core.culling.ViewportObjectFilter)
package org.papervision3d.core.culling {
import org.papervision3d.objects.*;
import flash.utils.*;
public class ViewportObjectFilter implements IObjectCuller {
protected var _mode:int;
protected var objects:Dictionary;
public function ViewportObjectFilter(_arg1:int):void{
this.mode = _arg1;
init();
}
public function addObject(_arg1:DisplayObject3D):void{
objects[_arg1] = _arg1;
}
public function get mode():int{
return (_mode);
}
public function set mode(_arg1:int):void{
_mode = _arg1;
}
public function removeObject(_arg1:DisplayObject3D):void{
delete objects[_arg1];
}
private function init():void{
objects = new Dictionary(true);
}
public function testObject(_arg1:DisplayObject3D):int{
if (objects[_arg1]){
return ((1 - _mode));
};
return (mode);
}
public function destroy():void{
objects = null;
}
}
}//package org.papervision3d.core.culling
Section 26
//UserData (org.papervision3d.core.data.UserData)
package org.papervision3d.core.data {
public class UserData {
public var data;
public function UserData(_arg1=null){
this.data = _arg1;
}
}
}//package org.papervision3d.core.data
Section 27
//DynamicTriangles (org.papervision3d.core.dyn.DynamicTriangles)
package org.papervision3d.core.dyn {
import org.papervision3d.core.proto.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
public class DynamicTriangles {
private static const INIT_SIZE:int = 100;
private static const GROW_SIZE:int = 300;
private static var triangleCounter:int;
private static var trianglePool:Array;
public function DynamicTriangles(){
init();
}
public function returnTriangle(_arg1:Triangle3D):void{
var _local2 = triangleCounter++;
trianglePool[_local2] = _arg1;
}
public function returnAllTriangles():void{
triangleCounter = trianglePool.length;
}
public function releaseAll():void{
returnAllTriangles();
}
public function getTriangle(_arg1:DisplayObject3D=null, _arg2:MaterialObject3D=null, _arg3:Vertex3D=null, _arg4:Vertex3D=null, _arg5:Vertex3D=null, _arg6:NumberUV=null, _arg7:NumberUV=null, _arg8:NumberUV=null):Triangle3D{
var _local9:int;
var _local10:Triangle3D;
var _local11:MaterialObject3D;
if (triangleCounter == 0){
_local9 = GROW_SIZE;
while (--_local9 > -1) {
trianglePool.unshift(new Triangle3D(null, null, null, null));
};
triangleCounter = GROW_SIZE;
return (getTriangle(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8));
//unresolved jump
};
_local10 = Triangle3D(trianglePool[--triangleCounter]);
if (_local10.material){
if ((((_local10.material is BitmapMaterial)) && (BitmapMaterial(_local10.material).uvMatrices))){
BitmapMaterial(_local10.material).uvMatrices[_local10.renderCommand] = null;
};
if ((_local10.material is CompositeMaterial)){
for each (_local11 in CompositeMaterial(_local10.material).materials) {
if ((((_local11 is BitmapMaterial)) && (BitmapMaterial(_local11).uvMatrices))){
BitmapMaterial(_local11).uvMatrices[_local10.renderCommand] = null;
};
};
};
};
_local10.instance = _arg1;
_local10.vertices = [_arg3, _arg4, _arg5];
_local10.uv = [_arg6, _arg7, _arg8];
_local10.updateVertices();
_local10.createNormal();
_local10.material = _arg2;
return (_local10);
}
private static function init():void{
trianglePool = new Array(INIT_SIZE);
var _local1:int = INIT_SIZE;
while (--_local1 > -1) {
trianglePool[_local1] = new Triangle3D(null, null, null, null);
};
triangleCounter = INIT_SIZE;
}
}
}//package org.papervision3d.core.dyn
Section 28
//AbstractRenderable (org.papervision3d.core.geom.renderables.AbstractRenderable)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.data.*;
public class AbstractRenderable implements IRenderable {
public var _userData:UserData;
public var instance:DisplayObject3D;
public function set userData(_arg1:UserData):void{
_userData = _arg1;
}
public function get userData():UserData{
return (_userData);
}
public function getRenderListItem():IRenderListItem{
return (null);
}
}
}//package org.papervision3d.core.geom.renderables
Section 29
//IRenderable (org.papervision3d.core.geom.renderables.IRenderable)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
public interface IRenderable {
function getRenderListItem():IRenderListItem;
}
}//package org.papervision3d.core.geom.renderables
Section 30
//Line3D (org.papervision3d.core.geom.renderables.Line3D)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.core.geom.*;
public class Line3D extends AbstractRenderable implements IRenderable {
public var size:Number;
public var material:LineMaterial;
public var cV:Vertex3D;
public var renderCommand:RenderLine;
public var v0:Vertex3D;
public var v1:Vertex3D;
public function Line3D(_arg1:Lines3D, _arg2:LineMaterial, _arg3:Number, _arg4:Vertex3D, _arg5:Vertex3D){
this.size = _arg3;
this.material = _arg2;
this.v0 = _arg4;
this.v1 = _arg5;
this.cV = _arg5;
this.instance = _arg1;
this.renderCommand = new RenderLine(this);
}
public function addControlVertex(_arg1:Number, _arg2:Number, _arg3:Number):void{
cV = new Vertex3D(_arg1, _arg2, _arg3);
if (instance.geometry.vertices.indexOf(cV) == -1){
instance.geometry.vertices.push(cV);
};
renderCommand.cV = cV.vertex3DInstance;
}
override public function getRenderListItem():IRenderListItem{
return (this.renderCommand);
}
}
}//package org.papervision3d.core.geom.renderables
Section 31
//Particle (org.papervision3d.core.geom.renderables.Particle)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
import flash.geom.*;
import org.papervision3d.materials.special.*;
public class Particle extends AbstractRenderable implements IRenderable {
public var size:Number;
public var renderScale:Number;
public var vertex3D:Vertex3D;
public var renderRect:Rectangle;
public var rotationZ:Number;// = 0
public var renderCommand:RenderParticle;
public var drawMatrix:Matrix;
public var material:ParticleMaterial;
public function Particle(_arg1:ParticleMaterial, _arg2:Number=1, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0){
this.material = _arg1;
this.size = _arg2;
this.renderCommand = new RenderParticle(this);
this.renderRect = new Rectangle();
vertex3D = new Vertex3D(_arg3, _arg4, _arg5);
drawMatrix = new Matrix();
}
public function updateRenderRect():void{
material.updateRenderRect(this);
}
public function set x(_arg1:Number):void{
vertex3D.x = _arg1;
}
public function set y(_arg1:Number):void{
vertex3D.y = _arg1;
}
public function set z(_arg1:Number):void{
vertex3D.z = _arg1;
}
public function get y():Number{
return (vertex3D.y);
}
public function get z():Number{
return (vertex3D.z);
}
override public function getRenderListItem():IRenderListItem{
return (renderCommand);
}
public function get x():Number{
return (vertex3D.x);
}
}
}//package org.papervision3d.core.geom.renderables
Section 32
//Triangle3D (org.papervision3d.core.geom.renderables.Triangle3D)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
public class Triangle3D extends AbstractRenderable implements IRenderable {
public var _uvArray:Array;
public var renderCommand:RenderTriangle;
public var id:Number;
public var material:MaterialObject3D;
public var faceNormal:Number3D;
public var screenZ:Number;
public var uv0:NumberUV;
public var uv1:NumberUV;
public var _materialName:String;
public var visible:Boolean;
public var uv2:NumberUV;
public var vertices:Array;
public var v0:Vertex3D;
public var v1:Vertex3D;
public var v2:Vertex3D;
private static var _totalFaces:Number = 0;
public function Triangle3D(_arg1:DisplayObject3D, _arg2:Array, _arg3:MaterialObject3D=null, _arg4:Array=null){
this.instance = _arg1;
faceNormal = new Number3D();
if (((_arg2) && ((_arg2.length == 3)))){
this.vertices = _arg2;
v0 = _arg2[0];
v1 = _arg2[1];
v2 = _arg2[2];
createNormal();
} else {
_arg2 = new Array();
v0 = (_arg2[0] = new Vertex3D());
v1 = (_arg2[1] = new Vertex3D());
v2 = (_arg2[2] = new Vertex3D());
};
this.material = _arg3;
this.uv = _arg4;
this.id = _totalFaces++;
this.renderCommand = new RenderTriangle(this);
}
public function set uv(_arg1:Array):void{
if (((_arg1) && ((_arg1.length == 3)))){
uv0 = NumberUV(_arg1[0]);
uv1 = NumberUV(_arg1[1]);
uv2 = NumberUV(_arg1[2]);
};
_uvArray = _arg1;
}
public function createNormal():void{
var _local1:Number3D = v0.getPosition();
var _local2:Number3D = v1.getPosition();
var _local3:Number3D = v2.getPosition();
_local2.minusEq(_local1);
_local3.minusEq(_local1);
faceNormal = Number3D.cross(_local2, _local3, faceNormal);
faceNormal.normalize();
}
override public function getRenderListItem():IRenderListItem{
return (renderCommand);
}
public function reset(_arg1:DisplayObject3D, _arg2:Array, _arg3:MaterialObject3D, _arg4:Array):void{
var _local5:MaterialObject3D;
this.instance = _arg1;
this.renderCommand.instance = _arg1;
this.renderCommand.renderer = _arg3;
this.vertices = _arg2;
updateVertices();
this.material = _arg3;
this.uv = _arg4;
if ((_arg3 is BitmapMaterial)){
BitmapMaterial(_arg3).uvMatrices[this.renderCommand] = null;
};
if ((_arg3 is CompositeMaterial)){
for each (_local5 in CompositeMaterial(_arg3).materials) {
if ((_local5 is BitmapMaterial)){
BitmapMaterial(_local5).uvMatrices[this.renderCommand] = null;
};
};
};
}
public function get uv():Array{
return (_uvArray);
}
public function updateVertices():void{
v0 = vertices[0];
v1 = vertices[1];
v2 = vertices[2];
}
}
}//package org.papervision3d.core.geom.renderables
Section 33
//Triangle3DInstance (org.papervision3d.core.geom.renderables.Triangle3DInstance)
package org.papervision3d.core.geom.renderables {
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
public class Triangle3DInstance {
public var container:Sprite;
public var instance:DisplayObject3D;
public var visible:Boolean;// = false
public var faceNormal:Number3D;
public var screenZ:Number;
public function Triangle3DInstance(_arg1:Triangle3D, _arg2:DisplayObject3D){
this.instance = _arg2;
faceNormal = new Number3D();
}
}
}//package org.papervision3d.core.geom.renderables
Section 34
//VectorShapeRenderable (org.papervision3d.core.geom.renderables.VectorShapeRenderable)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.materials.special.*;
public class VectorShapeRenderable extends AbstractRenderable implements IRenderable {
public var renderCommand:RenderVectorShape;
public var material:VectorShapeMaterial;
public function VectorShapeRenderable(_arg1:VectorShape3D, _arg2:RenderVectorShape){
this.instance = _arg1;
this.renderCommand = _arg2;
}
override public function getRenderListItem():IRenderListItem{
return (this.renderCommand);
}
}
}//package org.papervision3d.core.geom.renderables
Section 35
//Vertex3D (org.papervision3d.core.geom.renderables.Vertex3D)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.render.command.*;
import org.papervision3d.core.math.*;
import flash.utils.*;
public class Vertex3D extends AbstractRenderable implements IRenderable {
public var z:Number;
public var vertex3DInstance:Vertex3DInstance;
public var extra:Object;
public var timestamp:Number;
public var normal:Number3D;
protected var position:Number3D;
public var connectedFaces:Dictionary;
public var x:Number;
public var y:Number;
private var persp:Number;// = 0
public function Vertex3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
position = new Number3D();
super();
this.x = (position.x = _arg1);
this.y = (position.y = _arg2);
this.z = (position.z = _arg3);
this.vertex3DInstance = new Vertex3DInstance();
this.normal = new Number3D();
this.connectedFaces = new Dictionary();
}
public function perspective(_arg1:Number):Vertex3DInstance{
persp = (1 / (1 + (z / _arg1)));
return (new Vertex3DInstance((x * persp), (y * persp), z));
}
public function toNumber3D():Number3D{
return (new Number3D(x, y, z));
}
public function clone():Vertex3D{
var _local1:Vertex3D = new Vertex3D(x, y, z);
_local1.extra = extra;
_local1.vertex3DInstance = vertex3DInstance.clone();
_local1.normal = normal.clone();
return (_local1);
}
public function getPosition():Number3D{
position.x = x;
position.y = y;
position.z = z;
return (position);
}
public function calculateNormal():void{
var _local1:Triangle3D;
var _local2:Number;
var _local3:Number3D;
_local2 = 0;
normal.reset();
for each (_local1 in connectedFaces) {
if (_local1.faceNormal){
_local2++;
normal.plusEq(_local1.faceNormal);
};
};
_local3 = getPosition();
_local3.x = (_local3.x / _local2);
_local3.y = (_local3.y / _local2);
_local3.z = (_local3.z / _local2);
_local3.normalize();
normal.plusEq(_local3);
normal.normalize();
}
override public function getRenderListItem():IRenderListItem{
return (null);
}
public static function weighted(_arg1:Vertex3D, _arg2:Vertex3D, _arg3:Number, _arg4:Number):Vertex3D{
var _local5:Number = (_arg3 + _arg4);
var _local6:Number = (_arg3 / _local5);
var _local7:Number = (_arg4 / _local5);
return (new Vertex3D(((_arg1.x * _local6) + (_arg2.x * _local7)), ((_arg1.y * _local6) + (_arg2.y * _local7)), ((_arg1.z * _local6) + (_arg2.z * _local7))));
}
}
}//package org.papervision3d.core.geom.renderables
Section 36
//Vertex3DInstance (org.papervision3d.core.geom.renderables.Vertex3DInstance)
package org.papervision3d.core.geom.renderables {
import org.papervision3d.core.math.*;
public class Vertex3DInstance {
public var y:Number;
private var persp:Number;// = 0
public var normal:Number3D;
public var visible:Boolean;
public var extra:Object;
public var x:Number;
public var z:Number;
public function Vertex3DInstance(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
this.visible = false;
this.normal = new Number3D();
}
public function deperspective(_arg1:Number):Vertex3D{
persp = (1 + (z / _arg1));
return (new Vertex3D((x * persp), (y * persp), z));
}
public function distance(_arg1:Vertex3DInstance):Number{
return (Math.sqrt((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y)))));
}
public function clone():Vertex3DInstance{
var _local1:Vertex3DInstance = new Vertex3DInstance(x, y, z);
_local1.visible = visible;
_local1.extra = extra;
return (_local1);
}
public function distanceSqr(_arg1:Vertex3DInstance):Number{
return ((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y))));
}
public static function cross(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Number{
return (((_arg1.x * _arg2.y) - (_arg2.x * _arg1.y)));
}
public static function dot(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function subTo(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance):void{
_arg3.x = (_arg2.x - _arg1.x);
_arg3.y = (_arg2.y - _arg1.y);
}
public static function median(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Number):Vertex3DInstance{
var _local4:Number = ((_arg1.z + _arg2.z) / 2);
var _local5:Number = (_arg3 + _arg1.z);
var _local6:Number = (_arg3 + _arg2.z);
var _local7:Number = ((1 / (_arg3 + _local4)) / 2);
return (new Vertex3DInstance((((_arg1.x * _local5) + (_arg2.x * _local6)) * _local7), (((_arg1.y * _local5) + (_arg2.y * _local6)) * _local7), _local4));
}
public static function sub(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Vertex3DInstance{
return (new Vertex3DInstance((_arg2.x - _arg1.x), (_arg2.y - _arg1.y)));
}
}
}//package org.papervision3d.core.geom.renderables
Section 37
//Lines3D (org.papervision3d.core.geom.Lines3D)
package org.papervision3d.core.geom {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.log.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.core.render.draw.*;
public class Lines3D extends Vertices3D {
private var _material:ILineDrawer;
public var lines:Array;
public function Lines3D(_arg1:LineMaterial=null, _arg2:String=null){
super(null, _arg2);
if (!_arg1){
this.material = new LineMaterial();
} else {
this.material = _arg1;
};
init();
}
private function init():void{
this.lines = new Array();
}
public function removeAllLines():void{
while (lines.length > 0) {
removeLine(lines[0]);
};
}
public function addLine(_arg1:Line3D):void{
lines.push(_arg1);
_arg1.instance = this;
if (geometry.vertices.indexOf(_arg1.v0) == -1){
geometry.vertices.push(_arg1.v0);
};
if (geometry.vertices.indexOf(_arg1.v1) == -1){
geometry.vertices.push(_arg1.v1);
};
if (_arg1.cV){
if (geometry.vertices.indexOf(_arg1.cV) == -1){
geometry.vertices.push(_arg1.cV);
};
};
}
public function addNewSegmentedLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number):Array{
var _local13:Line3D;
var _local15:Vertex3D;
var _local9:Number = ((_arg6 - _arg3) / _arg2);
var _local10:Number = ((_arg7 - _arg4) / _arg2);
var _local11:Number = ((_arg8 - _arg5) / _arg2);
var _local12:Array = new Array();
var _local14:Vertex3D = new Vertex3D(_arg3, _arg4, _arg5);
var _local16:Number = 0;
while (_local16 <= _arg2) {
_local15 = new Vertex3D((_arg3 + (_local9 * _local16)), (_arg4 + (_local10 * _local16)), (_arg5 + (_local11 * _local16)));
_local13 = new Line3D(this, (material as LineMaterial), _arg1, _local14, _local15);
addLine(_local13);
_local12.push(_local13);
_local14 = _local15;
_local16++;
};
return (_local12);
}
public function removeLine(_arg1:Line3D):void{
var _local2:int = lines.indexOf(_arg1);
if (_local2 > -1){
lines.splice(_local2, 1);
} else {
PaperLogger.warning("Papervision3D Lines3D.removeLine : WARNING removal of non-existant line attempted. ");
};
}
override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
var _local3:Line3D;
var _local4:Number;
var _local5:RenderLine;
super.project(_arg1, _arg2);
for each (_local3 in lines) {
if (_arg2.viewPort.lineCuller.testLine(_local3)){
_local5 = _local3.renderCommand;
_local5.renderer = _local3.material;
_local5.size = _local3.size;
_local4 = (_local4 + (_local5.screenZ = ((_local3.v0.vertex3DInstance.z + _local3.v1.vertex3DInstance.z) / 2)));
_local5.v0 = _local3.v0.vertex3DInstance;
_local5.v1 = _local3.v1.vertex3DInstance;
_arg2.renderer.addToRenderList(_local5);
};
};
return ((_local4 / (lines.length + 1)));
}
public function addNewLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number):Line3D{
var _local8:Line3D = new Line3D(this, (material as LineMaterial), _arg1, new Vertex3D(_arg2, _arg3, _arg4), new Vertex3D(_arg5, _arg6, _arg7));
addLine(_local8);
return (_local8);
}
}
}//package org.papervision3d.core.geom
Section 38
//TriangleMesh3D (org.papervision3d.core.geom.TriangleMesh3D)
package org.papervision3d.core.geom {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import flash.utils.*;
import org.papervision3d.core.culling.*;
import org.papervision3d.core.render.draw.*;
public class TriangleMesh3D extends Vertices3D {
private var _tri:RenderTriangle;
private var _dtStore:Array;
private var _dtActive:Array;
public function TriangleMesh3D(_arg1:MaterialObject3D, _arg2:Array, _arg3:Array, _arg4:String=null){
_dtStore = new Array();
_dtActive = new Array();
super(_arg2, _arg4);
this.geometry.faces = ((_arg3) || (new Array()));
this.material = ((_arg1) || (MaterialObject3D.DEFAULT));
}
public function projectTexture(_arg1:String="x", _arg2:String="y"):void{
var _local10:String;
var _local11:Triangle3D;
var _local12:Array;
var _local13:Vertex3D;
var _local14:Vertex3D;
var _local15:Vertex3D;
var _local16:NumberUV;
var _local17:NumberUV;
var _local18:NumberUV;
var _local3:Array = this.geometry.faces;
var _local4:Object = this.boundingBox();
var _local5:Number = _local4.min[_arg1];
var _local6:Number = _local4.size[_arg1];
var _local7:Number = _local4.min[_arg2];
var _local8:Number = _local4.size[_arg2];
var _local9:MaterialObject3D = this.material;
for (_local10 in _local3) {
_local11 = _local3[Number(_local10)];
_local12 = _local11.vertices;
_local13 = _local12[0];
_local14 = _local12[1];
_local15 = _local12[2];
_local16 = new NumberUV(((_local13[_arg1] - _local5) / _local6), ((_local13[_arg2] - _local7) / _local8));
_local17 = new NumberUV(((_local14[_arg1] - _local5) / _local6), ((_local14[_arg2] - _local7) / _local8));
_local18 = new NumberUV(((_local15[_arg1] - _local5) / _local6), ((_local15[_arg2] - _local7) / _local8));
_local11.uv = [_local16, _local17, _local18];
};
}
public function quarterFaces():void{
var _local4:Triangle3D;
var _local6:Vertex3D;
var _local7:Vertex3D;
var _local8:Vertex3D;
var _local9:Vertex3D;
var _local10:Vertex3D;
var _local11:Vertex3D;
var _local12:NumberUV;
var _local13:NumberUV;
var _local14:NumberUV;
var _local15:NumberUV;
var _local16:NumberUV;
var _local17:NumberUV;
var _local18:Triangle3D;
var _local19:Triangle3D;
var _local20:Triangle3D;
var _local21:Triangle3D;
var _local1:Array = new Array();
var _local2:Array = new Array();
var _local3:Array = this.geometry.faces;
var _local5:int = _local3.length;
while ((_local4 = _local3[--_local5])) {
_local6 = _local4.v0;
_local7 = _local4.v1;
_local8 = _local4.v2;
_local9 = new Vertex3D(((_local6.x + _local7.x) / 2), ((_local6.y + _local7.y) / 2), ((_local6.z + _local7.z) / 2));
_local10 = new Vertex3D(((_local7.x + _local8.x) / 2), ((_local7.y + _local8.y) / 2), ((_local7.z + _local8.z) / 2));
_local11 = new Vertex3D(((_local8.x + _local6.x) / 2), ((_local8.y + _local6.y) / 2), ((_local8.z + _local6.z) / 2));
this.geometry.vertices.push(_local9, _local10, _local11);
_local12 = _local4.uv[0];
_local13 = _local4.uv[1];
_local14 = _local4.uv[2];
_local15 = new NumberUV(((_local12.u + _local13.u) / 2), ((_local12.v + _local13.v) / 2));
_local16 = new NumberUV(((_local13.u + _local14.u) / 2), ((_local13.v + _local14.v) / 2));
_local17 = new NumberUV(((_local14.u + _local12.u) / 2), ((_local14.v + _local12.v) / 2));
_local18 = new Triangle3D(this, [_local6, _local9, _local11], _local4.material, [_local12, _local15, _local17]);
_local19 = new Triangle3D(this, [_local9, _local7, _local10], _local4.material, [_local15, _local13, _local16]);
_local20 = new Triangle3D(this, [_local11, _local10, _local8], _local4.material, [_local17, _local16, _local14]);
_local21 = new Triangle3D(this, [_local9, _local10, _local11], _local4.material, [_local15, _local16, _local17]);
_local2.push(_local18, _local19, _local20, _local21);
};
this.geometry.faces = _local2;
this.mergeVertices();
this.geometry.ready = true;
}
override public function set material(_arg1:MaterialObject3D):void{
var _local2:Triangle3D;
super.material = _arg1;
for each (_local2 in geometry.faces) {
_local2.material = _arg1;
};
}
public function mergeVertices():void{
var _local3:Vertex3D;
var _local4:Triangle3D;
var _local5:Vertex3D;
var _local1:Dictionary = new Dictionary();
var _local2:Array = new Array();
for each (_local3 in this.geometry.vertices) {
for each (_local5 in _local1) {
if ((((((_local3.x == _local5.x)) && ((_local3.y == _local5.y)))) && ((_local3.z == _local5.z)))){
_local1[_local3] = _local5;
break;
};
};
if (!_local1[_local3]){
_local1[_local3] = _local3;
_local2.push(_local3);
};
};
this.geometry.vertices = _local2;
for each (_local4 in geometry.faces) {
_local4.v0 = (_local4.vertices[0] = _local1[_local4.v0]);
_local4.v1 = (_local4.vertices[1] = _local1[_local4.v1]);
_local4.v2 = (_local4.vertices[2] = _local1[_local4.v2]);
};
}
override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
var _local5:Triangle3D;
var _local6:Array;
var _local7:Number;
var _local8:Number;
var _local9:ITriangleCuller;
var _local10:Vertex3DInstance;
var _local11:Vertex3DInstance;
var _local12:Vertex3DInstance;
var _local13:Triangle3DInstance;
var _local14:Triangle3D;
var _local15:MaterialObject3D;
var _local16:RenderTriangle;
_dtStore = [];
_dtActive = new Array();
var _local3:int = this.geometry.vertices.length;
var _local4:Array = [];
if (((((((_arg2.clipping) && (this.useClipping))) && (!(this.culled)))) && ((_arg2.camera.useCulling) ? (cullTest == 0) : true))){
super.projectEmpty(_arg1, _arg2);
_arg2.clipping.setDisplayObject(this, _arg2);
for each (_local5 in this.geometry.faces) {
if (_arg2.clipping.testFace(_local5, this, _arg2)){
_arg2.clipping.clipFace(_local5, this, _local15, _arg2, _local4);
} else {
_local4.push(_local5);
};
};
super.project(_arg1, _arg2);
_arg2.camera.projectFaces(_local4, this, _arg2);
} else {
super.project(_arg1, _arg2);
_local4 = this.geometry.faces;
};
if (!this.culled){
_local6 = this.geometry.faces;
_local7 = 0;
_local8 = 0;
_local9 = _arg2.triangleCuller;
for each (_local14 in _local4) {
_local15 = (_local14.material) ? _local14.material : material;
_local10 = _local14.v0.vertex3DInstance;
_local11 = _local14.v1.vertex3DInstance;
_local12 = _local14.v2.vertex3DInstance;
if (_local9.testFace(_local14, _local10, _local11, _local12)){
_local16 = _local14.renderCommand;
_local7 = (_local7 + (_local16.screenZ = setScreenZ(meshSort, _local10, _local11, _local12)));
_local8++;
_local16.renderer = (_local15 as ITriangleDrawer);
_local16.v0 = _local10;
_local16.v1 = _local11;
_local16.v2 = _local12;
_local16.uv0 = _local14.uv0;
_local16.uv1 = _local14.uv1;
_local16.uv2 = _local14.uv2;
if (_arg2.quadrantTree){
if (_local16.create == null){
_local16.create = createRenderTriangle;
};
_local16.update();
if ((((_local16.area < 0)) && (((_local14.material.doubleSided) || (((_local14.material.oneSide) && (_local14.material.opposite))))))){
_local16.area = -(_local16.area);
};
};
_arg2.renderer.addToRenderList(_local16);
} else {
_arg2.renderStatistics.culledTriangles++;
};
};
if (_local3){
while (this.geometry.vertices.length > _local3) {
this.geometry.vertices.pop();
};
};
return ((this.screenZ = (_local7 / _local8)));
} else {
_arg2.renderStatistics.culledObjects++;
};
return (!NULL!);
}
public function createRenderTriangle(_arg1:Triangle3D, _arg2:MaterialObject3D, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Vertex3DInstance, _arg6:NumberUV, _arg7:NumberUV, _arg8:NumberUV):RenderTriangle{
if (_dtStore.length){
_dtActive.push((_tri = _dtStore.pop()));
} else {
_dtActive.push((_tri = new RenderTriangle(_arg1)));
};
_tri.instance = this;
_tri.triangle = _arg1;
_tri.renderableInstance = _arg1;
_tri.renderer = _arg2;
_tri.create = createRenderTriangle;
_tri.v0 = _arg3;
_tri.v1 = _arg4;
_tri.v2 = _arg5;
_tri.uv0 = _arg6;
_tri.uv1 = _arg7;
_tri.uv2 = _arg8;
_tri.update();
return (_tri);
}
protected function setScreenZ(_arg1:uint, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Number{
switch (_arg1){
case DisplayObject3D.MESH_SORT_CENTER:
return ((((_arg2.z + _arg3.z) + _arg4.z) / 3));
case DisplayObject3D.MESH_SORT_FAR:
return (Math.max(_arg2.z, _arg3.z, _arg4.z));
case DisplayObject3D.MESH_SORT_CLOSE:
return (Math.min(_arg2.z, _arg3.z, _arg4.z));
};
return (0);
}
override public function clone():DisplayObject3D{
var _local1:DisplayObject3D = super.clone();
var _local2:TriangleMesh3D = new TriangleMesh3D(this.material, [], [], _local1.name);
if (this.materials){
_local2.materials = this.materials.clone();
};
if (_local1.geometry){
_local2.geometry = _local1.geometry.clone(_local2);
};
_local2.copyTransform(this);
return (_local2);
}
}
}//package org.papervision3d.core.geom
Section 39
//Vertices3D (org.papervision3d.core.geom.Vertices3D)
package org.papervision3d.core.geom {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.culling.*;
public class Vertices3D extends DisplayObject3D {
public function Vertices3D(_arg1:Array, _arg2:String=null){
super(_arg2, new GeometryObject3D());
this.geometry.vertices = ((_arg1) || (new Array()));
}
override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
super.project(_arg1, _arg2);
if (this.culled){
return (0);
};
if ((_arg2.camera is IObjectCuller)){
return (projectFrustum(_arg1, _arg2));
};
if (((!(this.geometry)) || (!(this.geometry.vertices)))){
return (0);
};
return (_arg2.camera.projectVertices(this.geometry.vertices, this, _arg2));
}
public function projectEmpty(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
return (super.project(_arg1, _arg2));
}
public function worldBoundingBox():Object{
var _local3:Number3D;
var _local4:Vertex3D;
var _local1:Array = this.geometry.vertices;
var _local2:Object = new Object();
_local2.min = new Number3D(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
_local2.max = new Number3D(-(Number.MAX_VALUE), -(Number.MAX_VALUE), -(Number.MAX_VALUE));
_local2.size = new Number3D();
for each (_local4 in _local1) {
_local3 = _local4.getPosition();
Matrix3D.multiplyVector(this.world, _local3);
_local2.min.x = Math.min(_local3.x, _local2.min.x);
_local2.min.y = Math.min(_local3.y, _local2.min.y);
_local2.min.z = Math.min(_local3.z, _local2.min.z);
_local2.max.x = Math.max(_local3.x, _local2.max.x);
_local2.max.y = Math.max(_local3.y, _local2.max.y);
_local2.max.z = Math.max(_local3.z, _local2.max.z);
};
_local2.size.x = (_local2.max.x - _local2.min.x);
_local2.size.y = (_local2.max.y - _local2.min.y);
_local2.size.z = (_local2.max.z - _local2.min.z);
return (_local2);
}
public function boundingBox():Object{
var _local3:Vertex3D;
var _local1:Array = this.geometry.vertices;
var _local2:Object = new Object();
_local2.min = new Number3D(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
_local2.max = new Number3D(-(Number.MAX_VALUE), -(Number.MAX_VALUE), -(Number.MAX_VALUE));
_local2.size = new Number3D();
for each (_local3 in _local1) {
_local2.min.x = Math.min(_local3.x, _local2.min.x);
_local2.min.y = Math.min(_local3.y, _local2.min.y);
_local2.min.z = Math.min(_local3.z, _local2.min.z);
_local2.max.x = Math.max(_local3.x, _local2.max.x);
_local2.max.y = Math.max(_local3.y, _local2.max.y);
_local2.max.z = Math.max(_local3.z, _local2.max.z);
};
_local2.size.x = (_local2.max.x - _local2.min.x);
_local2.size.y = (_local2.max.y - _local2.min.y);
_local2.size.z = (_local2.max.z - _local2.min.z);
return (_local2);
}
public function projectFrustum(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
return (0);
}
public function transformVertices(_arg1:Matrix3D):void{
geometry.transformVertices(_arg1);
}
override public function clone():DisplayObject3D{
var _local1:DisplayObject3D = super.clone();
var _local2:Vertices3D = new Vertices3D(null, _local1.name);
_local2.material = _local1.material;
if (_local1.materials){
_local2.materials = _local1.materials.clone();
};
if (this.geometry){
_local2.geometry = this.geometry.clone(_local2);
};
_local2.copyTransform(this);
return (_local2);
}
}
}//package org.papervision3d.core.geom
Section 40
//PaperLoggerEvent (org.papervision3d.core.log.event.PaperLoggerEvent)
package org.papervision3d.core.log.event {
import flash.events.*;
import org.papervision3d.core.log.*;
public class PaperLoggerEvent extends Event {
public var paperLogVO:PaperLogVO;
public static const TYPE_LOGEVENT:String = "logEvent";
public function PaperLoggerEvent(_arg1:PaperLogVO){
super(TYPE_LOGEVENT);
this.paperLogVO = _arg1;
}
}
}//package org.papervision3d.core.log.event
Section 41
//AbstractPaperLogger (org.papervision3d.core.log.AbstractPaperLogger)
package org.papervision3d.core.log {
import org.papervision3d.core.log.event.*;
public class AbstractPaperLogger implements IPaperLogger {
public function registerWithPaperLogger(_arg1:PaperLogger):void{
_arg1.addEventListener(PaperLoggerEvent.TYPE_LOGEVENT, onLogEvent);
}
public function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
public function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
public function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
public function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
public function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
protected function onLogEvent(_arg1:PaperLoggerEvent):void{
var _local2:PaperLogVO = _arg1.paperLogVO;
switch (_local2.level){
case LogLevel.LOG:
log(_local2.msg, _local2.object, _local2.arg);
break;
case LogLevel.INFO:
info(_local2.msg, _local2.object, _local2.arg);
break;
case LogLevel.ERROR:
error(_local2.msg, _local2.object, _local2.arg);
break;
case LogLevel.DEBUG:
debug(_local2.msg, _local2.object, _local2.arg);
break;
case LogLevel.WARNING:
warning(_local2.msg, _local2.object, _local2.arg);
break;
case LogLevel.FATAL:
fatal(_local2.msg, _local2.object, _local2.arg);
break;
default:
log(_local2.msg, _local2.object, _local2.arg);
break;
};
}
public function unregisterFromPaperLogger(_arg1:PaperLogger):void{
_arg1.removeEventListener(PaperLoggerEvent.TYPE_LOGEVENT, onLogEvent);
}
public function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
}
}
}//package org.papervision3d.core.log
Section 42
//IPaperLogger (org.papervision3d.core.log.IPaperLogger)
package org.papervision3d.core.log {
public interface IPaperLogger {
function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void;
}
}//package org.papervision3d.core.log
Section 43
//LogLevel (org.papervision3d.core.log.LogLevel)
package org.papervision3d.core.log {
public class LogLevel {
public static const FATAL:int = 5;
public static const ERROR:int = 4;
public static const LOG:int = 0;
public static const INFO:int = 1;
public static const DEBUG:int = 2;
public static const WARNING:int = 3;
}
}//package org.papervision3d.core.log
Section 44
//PaperLogger (org.papervision3d.core.log.PaperLogger)
package org.papervision3d.core.log {
import flash.events.*;
import org.papervision3d.core.log.event.*;
public class PaperLogger extends EventDispatcher {
public var traceLogger:PaperTraceLogger;
private static var instance:PaperLogger;
public function PaperLogger(){
if (instance){
throw (new Error("Don't call the PaperLogger constructor directly"));
};
traceLogger = new PaperTraceLogger();
registerLogger(traceLogger);
}
public function registerLogger(_arg1:AbstractPaperLogger):void{
_arg1.registerWithPaperLogger(this);
}
public function _debug(_arg1:String, _arg2:Object=null, ... _args):void{
var _local4:PaperLogVO = new PaperLogVO(LogLevel.DEBUG, _arg1, _arg2, _args);
var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4);
dispatchEvent(_local5);
}
public function _log(_arg1:String, _arg2:Object=null, ... _args):void{
var _local4:PaperLogVO = new PaperLogVO(LogLevel.LOG, _arg1, _arg2, _args);
var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4);
dispatchEvent(_local5);
}
public function _error(_arg1:String, _arg2:Object=null, ... _args):void{
var _local4:PaperLogVO = new PaperLogVO(LogLevel.ERROR, _arg1, _arg2, _args);
var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4);
dispatchEvent(_local5);
}
public function unregisterLogger(_arg1:AbstractPaperLogger):void{
_arg1.unregisterFromPaperLogger(this);
}
public function _info(_arg1:String, _arg2:Object=null, ... _args):void{
var _local4:PaperLogVO = new PaperLogVO(LogLevel.INFO, _arg1, _arg2, _args);
var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4);
dispatchEvent(_local5);
}
public function _warning(_arg1:String, _arg2:Object=null, ... _args):void{
var _local4:PaperLogVO = new PaperLogVO(LogLevel.WARNING, _arg1, _arg2, _args);
var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4);
dispatchEvent(_local5);
}
public static function debug(_arg1:String, _arg2:Object=null, ... _args):void{
getInstance()._debug(_arg1);
}
public static function log(_arg1:String, _arg2:Object=null, ... _args):void{
getInstance()._log(_arg1);
}
public static function error(_arg1:String, _arg2:Object=null, ... _args):void{
getInstance()._error(_arg1);
}
public static function getInstance():PaperLogger{
if (!instance){
instance = new (PaperLogger);
};
return (instance);
}
public static function warning(_arg1:String, _arg2:Object=null, ... _args):void{
getInstance()._warning(_arg1);
}
public static function info(_arg1:String, _arg2:Object=null, ... _args):void{
getInstance()._info(_arg1);
}
}
}//package org.papervision3d.core.log
Section 45
//PaperLogVO (org.papervision3d.core.log.PaperLogVO)
package org.papervision3d.core.log {
public class PaperLogVO {
public var msg:String;
public var level:int;
public var arg:Array;
public var object:Object;
public function PaperLogVO(_arg1:int, _arg2:String, _arg3:Object, _arg4:Array){
this.level = _arg1;
this.msg = _arg2;
this.object = _arg3;
this.arg = _arg4;
}
}
}//package org.papervision3d.core.log
Section 46
//PaperTraceLogger (org.papervision3d.core.log.PaperTraceLogger)
package org.papervision3d.core.log {
public class PaperTraceLogger extends AbstractPaperLogger implements IPaperLogger {
override public function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("WARNING:", _arg1, _arg3);
}
override public function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("LOG:", _arg1, _arg3);
}
override public function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("ERROR:", _arg1, _arg3);
}
override public function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("FATAL:", _arg1, _arg3);
}
override public function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("INFO:", _arg1, _arg3);
}
override public function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{
trace("DEBUG:", _arg1, _arg3);
}
}
}//package org.papervision3d.core.log
Section 47
//AbstractLightShadeMaterial (org.papervision3d.core.material.AbstractLightShadeMaterial)
package org.papervision3d.core.material {
import org.papervision3d.core.proto.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.render.material.*;
import flash.utils.*;
import org.papervision3d.core.render.draw.*;
public class AbstractLightShadeMaterial extends TriangleMaterial implements ITriangleDrawer, IUpdateBeforeMaterial {
public var lightMatrices:Dictionary;
private var _light:LightObject3D;
protected static var lightMatrix:Matrix3D;
public function AbstractLightShadeMaterial(){
init();
}
public function updateBeforeRender(_arg1:RenderSessionData):void{
var _local2:Object;
var _local3:DisplayObject3D;
for (_local2 in objects) {
_local3 = (_local2 as DisplayObject3D);
lightMatrices[_local2] = LightMatrix.getLightMatrix(light, _local3, _arg1, lightMatrices[_local2]);
};
}
protected function init():void{
lightMatrices = new Dictionary();
}
public function get light():LightObject3D{
return (_light);
}
public function set light(_arg1:LightObject3D):void{
_light = _arg1;
}
}
}//package org.papervision3d.core.material
Section 48
//TriangleMaterial (org.papervision3d.core.material.TriangleMaterial)
package org.papervision3d.core.material {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.render.draw.*;
public class TriangleMaterial extends MaterialObject3D implements ITriangleDrawer {
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
}
override public function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void{
}
}
}//package org.papervision3d.core.material
Section 49
//ClassificationUtil (org.papervision3d.core.math.util.ClassificationUtil)
package org.papervision3d.core.math.util {
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
public class ClassificationUtil {
public static const BACK:uint = 1;
public static const STRADDLE:uint = 3;
public static const FRONT:uint = 0;
public static const COINCIDING:uint = 2;
protected static var point:Vertex3D;
public static function classifyPoint(_arg1:Vertex3D, _arg2:Plane3D, _arg3:Number=0.01):uint{
var _local4:Number = _arg2.vertDistance(_arg1);
if (_local4 < -(_arg3)){
return (BACK);
};
if (_local4 > _arg3){
return (FRONT);
};
return (COINCIDING);
}
public static function classifyTriangle(_arg1:Triangle3D, _arg2:Plane3D, _arg3:Number=0.01):uint{
if (!_arg1){
return (null);
};
return (classifyPoints(_arg1.vertices, _arg2, _arg3));
}
public static function classifyPoints(_arg1:Array, _arg2:Plane3D, _arg3:Number=0.01):uint{
var _local6:uint;
var _local4:uint;
var _local5:uint;
for each (point in _arg1) {
_local6 = classifyPoint(point, _arg2, _arg3);
if (_local6 == FRONT){
_local4++;
} else {
if (_local6 == BACK){
_local5++;
};
};
};
if ((((_local4 > 0)) && ((_local5 == 0)))){
return (FRONT);
};
if ((((_local4 == 0)) && ((_local5 > 0)))){
return (BACK);
};
if ((((_local4 > 0)) && ((_local5 > 0)))){
return (STRADDLE);
};
return (COINCIDING);
}
}
}//package org.papervision3d.core.math.util
Section 50
//FastRectangleTools (org.papervision3d.core.math.util.FastRectangleTools)
package org.papervision3d.core.math.util {
import flash.geom.*;
import org.papervision3d.core.math.*;
public class FastRectangleTools {
public static function getRotatedBounds(_arg1:Rectangle, _arg2:Number, _arg3:Rectangle=null):Rectangle{
if (!_arg3){
_arg3 = new Rectangle();
};
_arg2 = (_arg2 * Number3D.toRADIANS);
var _local4:Number = _arg1.width;
var _local5:Number = _arg1.height;
var _local6:Number = Math.abs(Math.sin(_arg2));
var _local7:Number = Math.abs(Math.cos(_arg2));
_arg3.left = (_arg1.x - (0.5 * ((_local4 * _local7) + (_local5 * _local6))));
_arg3.right = (_arg1.x + (0.5 * ((_local4 * _local7) + (_local5 * _local6))));
_arg3.top = (_arg1.y - (0.5 * ((_local4 * _local6) + (_local5 * _local7))));
_arg3.bottom = (_arg1.y + (0.5 * ((_local4 * _local6) + (_local5 * _local7))));
return (_arg3);
}
public static function intersection(_arg1:Rectangle, _arg2:Rectangle, _arg3:Rectangle=null):Rectangle{
if (!_arg3){
_arg3 = new Rectangle();
};
if (!intersects(_arg1, _arg2)){
_arg3.x = (_arg3.y = (_arg3.width = (_arg3.height = 0)));
return (_arg3);
};
_arg3.left = ((_arg1.left)>_arg2.left) ? _arg1.left : _arg2.left;
_arg3.right = ((_arg1.right)<_arg2.right) ? _arg1.right : _arg2.right;
_arg3.top = ((_arg1.top)>_arg2.top) ? _arg1.top : _arg2.top;
_arg3.bottom = ((_arg1.bottom)<_arg2.bottom) ? _arg1.bottom : _arg2.bottom;
return (_arg3);
}
public static function intersects(_arg1:Rectangle, _arg2:Rectangle):Boolean{
if (((!((((_arg1.right < _arg2.left)) || ((_arg1.left > _arg2.right))))) && (!((((_arg1.bottom < _arg2.top)) || ((_arg1.top > _arg2.bottom))))))){
return (true);
};
return (false);
}
}
}//package org.papervision3d.core.math.util
Section 51
//GLU (org.papervision3d.core.math.util.GLU)
package org.papervision3d.core.math.util {
public class GLU {
public static function unProject(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:Array):Boolean{
var _local8:Array = new Array(16);
var _local9:Array = new Array(4);
multMatrices(_arg4, _arg5, _local8);
if (!invertMatrix(_local8, _local8)){
return (false);
};
_local9[0] = _arg1;
_local9[1] = _arg2;
_local9[2] = _arg3;
_local9[3] = 1;
_local9[0] = ((_local9[0] - _arg6[0]) / _arg6[2]);
_local9[1] = ((_local9[1] - _arg6[1]) / _arg6[3]);
_local9[0] = ((_local9[0] * 2) - 1);
_local9[1] = ((_local9[1] * 2) - 1);
_local9[2] = ((_local9[2] * 2) - 1);
multMatrixVec(_local8, _local9, _arg7);
if (_arg7[3] == 0){
return (false);
};
_arg7[0] = (_arg7[0] / _arg7[3]);
_arg7[1] = (_arg7[1] / _arg7[3]);
_arg7[2] = (_arg7[2] / _arg7[3]);
return (true);
}
public static function scale(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number):void{
makeIdentity(_arg1);
_arg1[0] = _arg2;
_arg1[5] = _arg3;
_arg1[10] = _arg4;
}
public static function multMatrixVec(_arg1:Array, _arg2:Array, _arg3:Array):void{
var _local4:int;
_local4 = 0;
while (_local4 < 4) {
_arg3[_local4] = ((((_arg2[0] * _arg1[int(((0 * 4) + _local4))]) + (_arg2[1] * _arg1[int(((1 * 4) + _local4))])) + (_arg2[2] * _arg1[int(((2 * 4) + _local4))])) + (_arg2[3] * _arg1[int(((3 * 4) + _local4))]));
_local4++;
};
}
public static function invertMatrix(_arg1:Array, _arg2:Array):Boolean{
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:Number;
var _local8:Array = new Array(4);
_local3 = 0;
while (_local3 < 4) {
_local8[_local3] = new Array(4);
_local4 = 0;
while (_local4 < 4) {
_local8[_local3][_local4] = _arg1[((_local3 * 4) + _local4)];
_local4++;
};
_local3++;
};
makeIdentity(_arg2);
_local3 = 0;
while (_local3 < 4) {
_local6 = _local3;
_local4 = (_local3 + 1);
while (_local4 < 4) {
if (Math.abs(_local8[_local4][_local3]) > Math.abs(_local8[_local3][_local3])){
_local6 = _local4;
};
_local4++;
};
if (_local6 != _local3){
_local5 = 0;
while (_local5 < 4) {
_local7 = _local8[_local3][_local5];
_local8[_local3][_local5] = _local8[_local6][_local5];
_local8[_local6][_local5] = _local7;
_local7 = _arg2[((_local3 * 4) + _local5)];
_arg2[((_local3 * 4) + _local5)] = _arg2[((_local6 * 4) + _local5)];
_arg2[((_local6 * 4) + _local5)] = _local7;
_local5++;
};
};
if (_local8[_local3][_local3] == 0){
return (false);
};
_local7 = _local8[_local3][_local3];
_local5 = 0;
while (_local5 < 4) {
_local8[_local3][_local5] = (_local8[_local3][_local5] / _local7);
_arg2[((_local3 * 4) + _local5)] = (_arg2[((_local3 * 4) + _local5)] / _local7);
_local5++;
};
_local4 = 0;
while (_local4 < 4) {
if (_local4 != _local3){
_local7 = _local8[_local4][_local3];
_local5 = 0;
while (_local5 < 4) {
_local8[_local4][_local5] = (_local8[_local4][_local5] - (_local8[_local3][_local5] * _local7));
_arg2[((_local4 * 4) + _local5)] = (_arg2[((_local4 * 4) + _local5)] - (_arg2[((_local3 * 4) + _local5)] * _local7));
_local5++;
};
};
_local4++;
};
_local3++;
};
return (true);
}
public static function ortho(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number):Boolean{
var _local8:Number = ((_arg3 + _arg2) / (_arg3 - _arg2));
var _local9:Number = ((_arg4 + _arg5) / (_arg4 - _arg5));
var _local10:Number = ((_arg7 + _arg6) / (_arg7 - _arg6));
makeIdentity(_arg1);
_arg1[0] = (2 / (_arg3 - _arg2));
_arg1[5] = (2 / (_arg4 - _arg5));
_arg1[10] = (-2 / (_arg7 - _arg6));
_arg1[12] = _local8;
_arg1[13] = _local9;
_arg1[14] = _local10;
return (true);
}
public static function multMatrices(_arg1:Array, _arg2:Array, _arg3:Array):void{
var _local4:int;
var _local5:int;
_local4 = 0;
while (_local4 < 4) {
_local5 = 0;
while (_local5 < 4) {
_arg3[int(((_local4 * 4) + _local5))] = ((((_arg1[int(((_local4 * 4) + 0))] * _arg2[int(((0 * 4) + _local5))]) + (_arg1[int(((_local4 * 4) + 1))] * _arg2[int(((1 * 4) + _local5))])) + (_arg1[int(((_local4 * 4) + 2))] * _arg2[int(((2 * 4) + _local5))])) + (_arg1[int(((_local4 * 4) + 3))] * _arg2[int(((3 * 4) + _local5))]));
_local5++;
};
_local4++;
};
}
public static function perspective(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):Boolean{
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number = ((_arg2 / 2) * (Math.PI / 180));
_local8 = (_arg5 - _arg4);
_local6 = Math.sin(_local9);
if ((((((_local8 == 0)) || ((_local6 == 0)))) || ((_arg3 == 0)))){
return (false);
};
_local7 = (Math.cos(_local9) / _local6);
makeIdentity(_arg1);
_arg1[0] = (_local7 / _arg3);
_arg1[5] = _local7;
_arg1[10] = (-((_arg5 + _arg4)) / _local8);
_arg1[11] = -1;
_arg1[14] = (-(((2 * _arg4) * _arg5)) / _local8);
_arg1[15] = 0;
return (true);
}
public static function makeIdentity(_arg1:Array):void{
_arg1[(0 + (4 * 0))] = 1;
_arg1[(0 + (4 * 1))] = 0;
_arg1[(0 + (4 * 2))] = 0;
_arg1[(0 + (4 * 3))] = 0;
_arg1[(1 + (4 * 0))] = 0;
_arg1[(1 + (4 * 1))] = 1;
_arg1[(1 + (4 * 2))] = 0;
_arg1[(1 + (4 * 3))] = 0;
_arg1[(2 + (4 * 0))] = 0;
_arg1[(2 + (4 * 1))] = 0;
_arg1[(2 + (4 * 2))] = 1;
_arg1[(2 + (4 * 3))] = 0;
_arg1[(3 + (4 * 0))] = 0;
_arg1[(3 + (4 * 1))] = 0;
_arg1[(3 + (4 * 2))] = 0;
_arg1[(3 + (4 * 3))] = 1;
}
}
}//package org.papervision3d.core.math.util
Section 52
//AxisAlignedBoundingBox (org.papervision3d.core.math.AxisAlignedBoundingBox)
package org.papervision3d.core.math {
import org.papervision3d.core.geom.renderables.*;
public class AxisAlignedBoundingBox {
public var minX:Number;
public var minY:Number;
public var minZ:Number;
public var maxX:Number;
public var maxY:Number;
public var maxZ:Number;
protected var _vertices:Array;
public function AxisAlignedBoundingBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){
this.minX = _arg1;
this.minY = _arg2;
this.minZ = _arg3;
this.maxX = _arg4;
this.maxY = _arg5;
this.maxZ = _arg6;
createBoxVertices();
}
protected function createBoxVertices():void{
_vertices = new Array();
_vertices.push(new Vertex3D(minX, minY, minZ));
_vertices.push(new Vertex3D(minX, minY, maxZ));
_vertices.push(new Vertex3D(minX, maxY, minZ));
_vertices.push(new Vertex3D(minX, maxY, maxZ));
_vertices.push(new Vertex3D(maxX, minY, minZ));
_vertices.push(new Vertex3D(maxX, minY, maxZ));
_vertices.push(new Vertex3D(maxX, maxY, minZ));
_vertices.push(new Vertex3D(maxX, maxY, maxZ));
}
public function getBoxVertices():Array{
return (_vertices);
}
public function merge(_arg1:AxisAlignedBoundingBox):void{
this.minX = Math.min(this.minX, _arg1.minX);
this.minY = Math.min(this.minY, _arg1.minY);
this.minZ = Math.min(this.minZ, _arg1.minZ);
this.maxX = Math.max(this.maxX, _arg1.maxX);
this.maxY = Math.max(this.maxY, _arg1.maxY);
this.maxZ = Math.max(this.maxZ, _arg1.maxZ);
createBoxVertices();
}
public static function createFromVertices(_arg1:Array):AxisAlignedBoundingBox{
var _local8:Vertex3D;
var _local2:Number = Number.MAX_VALUE;
var _local3:Number = Number.MAX_VALUE;
var _local4:Number = Number.MAX_VALUE;
var _local5:Number = -(_local2);
var _local6:Number = -(_local3);
var _local7:Number = -(_local4);
for each (_local8 in _arg1) {
_local2 = Math.min(_local2, _local8.x);
_local3 = Math.min(_local3, _local8.y);
_local4 = Math.min(_local4, _local8.z);
_local5 = Math.max(_local5, _local8.x);
_local6 = Math.max(_local6, _local8.y);
_local7 = Math.max(_local7, _local8.z);
};
return (new AxisAlignedBoundingBox(_local2, _local3, _local4, _local5, _local6, _local7));
}
}
}//package org.papervision3d.core.math
Section 53
//BoundingSphere (org.papervision3d.core.math.BoundingSphere)
package org.papervision3d.core.math {
import org.papervision3d.core.geom.renderables.*;
public class BoundingSphere {
public var maxDistance:Number;
public var radius:Number;
public function BoundingSphere(_arg1:Number){
this.maxDistance = _arg1;
this.radius = Math.sqrt(_arg1);
}
public static function getFromVertices(_arg1:Array):BoundingSphere{
var _local3:Number;
var _local4:Vertex3D;
var _local2:Number = 0;
for each (_local4 in _arg1) {
_local3 = (((_local4.x * _local4.x) + (_local4.y * _local4.y)) + (_local4.z * _local4.z));
_local2 = ((_local3)>_local2) ? _local3 : _local2;
};
return (new BoundingSphere(_local2));
}
}
}//package org.papervision3d.core.math
Section 54
//Matrix3D (org.papervision3d.core.math.Matrix3D)
package org.papervision3d.core.math {
import org.papervision3d.*;
public class Matrix3D {
public var n31:Number;
public var n32:Number;
public var n11:Number;
public var n34:Number;
public var n13:Number;
public var n14:Number;
public var n33:Number;
public var n12:Number;
public var n41:Number;
public var n42:Number;
public var n21:Number;
public var n22:Number;
public var n23:Number;
public var n24:Number;
public var n44:Number;
public var n43:Number;
private static var _cos:Function = Math.cos;
private static var _sin:Function = Math.sin;
private static var temp:Matrix3D = Matrix3D.IDENTITY;
private static var n3Di:Number3D = Number3D.ZERO;
private static var n3Dj:Number3D = Number3D.ZERO;
private static var n3Dk:Number3D = Number3D.ZERO;
private static var toDEGREES:Number = 57.2957795130823;
private static var toRADIANS:Number = 0.0174532925199433;
public function Matrix3D(_arg1:Array=null){
reset(_arg1);
}
public function calculateMultiply3x3(_arg1:Matrix3D, _arg2:Matrix3D):void{
var _local3:Number = _arg1.n11;
var _local4:Number = _arg2.n11;
var _local5:Number = _arg1.n21;
var _local6:Number = _arg2.n21;
var _local7:Number = _arg1.n31;
var _local8:Number = _arg2.n31;
var _local9:Number = _arg1.n12;
var _local10:Number = _arg2.n12;
var _local11:Number = _arg1.n22;
var _local12:Number = _arg2.n22;
var _local13:Number = _arg1.n32;
var _local14:Number = _arg2.n32;
var _local15:Number = _arg1.n13;
var _local16:Number = _arg2.n13;
var _local17:Number = _arg1.n23;
var _local18:Number = _arg2.n23;
var _local19:Number = _arg1.n33;
var _local20:Number = _arg2.n33;
this.n11 = (((_local3 * _local4) + (_local9 * _local6)) + (_local15 * _local8));
this.n12 = (((_local3 * _local10) + (_local9 * _local12)) + (_local15 * _local14));
this.n13 = (((_local3 * _local16) + (_local9 * _local18)) + (_local15 * _local20));
this.n21 = (((_local5 * _local4) + (_local11 * _local6)) + (_local17 * _local8));
this.n22 = (((_local5 * _local10) + (_local11 * _local12)) + (_local17 * _local14));
this.n23 = (((_local5 * _local16) + (_local11 * _local18)) + (_local17 * _local20));
this.n31 = (((_local7 * _local4) + (_local13 * _local6)) + (_local19 * _local8));
this.n32 = (((_local7 * _local10) + (_local13 * _local12)) + (_local19 * _local14));
this.n33 = (((_local7 * _local16) + (_local13 * _local18)) + (_local19 * _local20));
}
public function calculateMultiply4x4(_arg1:Matrix3D, _arg2:Matrix3D):void{
var _local3:Number = _arg1.n11;
var _local4:Number = _arg2.n11;
var _local5:Number = _arg1.n21;
var _local6:Number = _arg2.n21;
var _local7:Number = _arg1.n31;
var _local8:Number = _arg2.n31;
var _local9:Number = _arg1.n41;
var _local10:Number = _arg2.n41;
var _local11:Number = _arg1.n12;
var _local12:Number = _arg2.n12;
var _local13:Number = _arg1.n22;
var _local14:Number = _arg2.n22;
var _local15:Number = _arg1.n32;
var _local16:Number = _arg2.n32;
var _local17:Number = _arg1.n42;
var _local18:Number = _arg2.n42;
var _local19:Number = _arg1.n13;
var _local20:Number = _arg2.n13;
var _local21:Number = _arg1.n23;
var _local22:Number = _arg2.n23;
var _local23:Number = _arg1.n33;
var _local24:Number = _arg2.n33;
var _local25:Number = _arg1.n43;
var _local26:Number = _arg2.n43;
var _local27:Number = _arg1.n14;
var _local28:Number = _arg2.n14;
var _local29:Number = _arg1.n24;
var _local30:Number = _arg2.n24;
var _local31:Number = _arg1.n34;
var _local32:Number = _arg2.n34;
var _local33:Number = _arg1.n44;
var _local34:Number = _arg2.n44;
this.n11 = (((_local3 * _local4) + (_local11 * _local6)) + (_local19 * _local8));
this.n12 = (((_local3 * _local12) + (_local11 * _local14)) + (_local19 * _local16));
this.n13 = (((_local3 * _local20) + (_local11 * _local22)) + (_local19 * _local24));
this.n14 = ((((_local3 * _local28) + (_local11 * _local30)) + (_local19 * _local32)) + _local27);
this.n21 = (((_local5 * _local4) + (_local13 * _local6)) + (_local21 * _local8));
this.n22 = (((_local5 * _local12) + (_local13 * _local14)) + (_local21 * _local16));
this.n23 = (((_local5 * _local20) + (_local13 * _local22)) + (_local21 * _local24));
this.n24 = ((((_local5 * _local28) + (_local13 * _local30)) + (_local21 * _local32)) + _local29);
this.n31 = (((_local7 * _local4) + (_local15 * _local6)) + (_local23 * _local8));
this.n32 = (((_local7 * _local12) + (_local15 * _local14)) + (_local23 * _local16));
this.n33 = (((_local7 * _local20) + (_local15 * _local22)) + (_local23 * _local24));
this.n34 = ((((_local7 * _local28) + (_local15 * _local30)) + (_local23 * _local32)) + _local31);
this.n41 = (((_local9 * _local4) + (_local17 * _local6)) + (_local25 * _local8));
this.n42 = (((_local9 * _local12) + (_local17 * _local14)) + (_local25 * _local16));
this.n43 = (((_local9 * _local20) + (_local17 * _local22)) + (_local25 * _local24));
this.n44 = ((((_local9 * _local28) + (_local17 * _local30)) + (_local25 * _local32)) + _local33);
}
public function calculateSkewSymmetric(_arg1:Number3D):void{
this.n11 = 0;
this.n12 = -(_arg1.z);
this.n13 = _arg1.y;
this.n21 = _arg1.z;
this.n22 = 0;
this.n23 = -(_arg1.x);
this.n31 = -(_arg1.y);
this.n32 = _arg1.x;
this.n33 = 0;
}
public function get det():Number{
return ((((((this.n11 * this.n22) - (this.n21 * this.n12)) * this.n33) - (((this.n11 * this.n32) - (this.n31 * this.n12)) * this.n23)) + (((this.n21 * this.n32) - (this.n31 * this.n22)) * this.n13)));
}
public function copy(_arg1:Matrix3D):Matrix3D{
this.n11 = _arg1.n11;
this.n12 = _arg1.n12;
this.n13 = _arg1.n13;
this.n14 = _arg1.n14;
this.n21 = _arg1.n21;
this.n22 = _arg1.n22;
this.n23 = _arg1.n23;
this.n24 = _arg1.n24;
this.n31 = _arg1.n31;
this.n32 = _arg1.n32;
this.n33 = _arg1.n33;
this.n34 = _arg1.n34;
return (this);
}
public function copy3x3(_arg1:Matrix3D):Matrix3D{
this.n11 = _arg1.n11;
this.n12 = _arg1.n12;
this.n13 = _arg1.n13;
this.n21 = _arg1.n21;
this.n22 = _arg1.n22;
this.n23 = _arg1.n23;
this.n31 = _arg1.n31;
this.n32 = _arg1.n32;
this.n33 = _arg1.n33;
return (this);
}
public function calculateAdd(_arg1:Matrix3D, _arg2:Matrix3D):void{
this.n11 = (_arg1.n11 + _arg2.n11);
this.n12 = (_arg1.n12 + _arg2.n12);
this.n13 = (_arg1.n13 + _arg2.n13);
this.n14 = (_arg1.n14 + _arg2.n14);
this.n21 = (_arg1.n21 + _arg2.n21);
this.n22 = (_arg1.n22 + _arg2.n22);
this.n23 = (_arg1.n23 + _arg2.n23);
this.n24 = (_arg1.n24 + _arg2.n24);
this.n31 = (_arg1.n31 + _arg2.n31);
this.n32 = (_arg1.n32 + _arg2.n32);
this.n33 = (_arg1.n33 + _arg2.n33);
this.n34 = (_arg1.n34 + _arg2.n34);
}
public function calculateMultiply(_arg1:Matrix3D, _arg2:Matrix3D):void{
var _local3:Number = _arg1.n11;
var _local4:Number = _arg2.n11;
var _local5:Number = _arg1.n21;
var _local6:Number = _arg2.n21;
var _local7:Number = _arg1.n31;
var _local8:Number = _arg2.n31;
var _local9:Number = _arg1.n12;
var _local10:Number = _arg2.n12;
var _local11:Number = _arg1.n22;
var _local12:Number = _arg2.n22;
var _local13:Number = _arg1.n32;
var _local14:Number = _arg2.n32;
var _local15:Number = _arg1.n13;
var _local16:Number = _arg2.n13;
var _local17:Number = _arg1.n23;
var _local18:Number = _arg2.n23;
var _local19:Number = _arg1.n33;
var _local20:Number = _arg2.n33;
var _local21:Number = _arg1.n14;
var _local22:Number = _arg2.n14;
var _local23:Number = _arg1.n24;
var _local24:Number = _arg2.n24;
var _local25:Number = _arg1.n34;
var _local26:Number = _arg2.n34;
this.n11 = (((_local3 * _local4) + (_local9 * _local6)) + (_local15 * _local8));
this.n12 = (((_local3 * _local10) + (_local9 * _local12)) + (_local15 * _local14));
this.n13 = (((_local3 * _local16) + (_local9 * _local18)) + (_local15 * _local20));
this.n14 = ((((_local3 * _local22) + (_local9 * _local24)) + (_local15 * _local26)) + _local21);
this.n21 = (((_local5 * _local4) + (_local11 * _local6)) + (_local17 * _local8));
this.n22 = (((_local5 * _local10) + (_local11 * _local12)) + (_local17 * _local14));
this.n23 = (((_local5 * _local16) + (_local11 * _local18)) + (_local17 * _local20));
this.n24 = ((((_local5 * _local22) + (_local11 * _local24)) + (_local17 * _local26)) + _local23);
this.n31 = (((_local7 * _local4) + (_local13 * _local6)) + (_local19 * _local8));
this.n32 = (((_local7 * _local10) + (_local13 * _local12)) + (_local19 * _local14));
this.n33 = (((_local7 * _local16) + (_local13 * _local18)) + (_local19 * _local20));
this.n34 = ((((_local7 * _local22) + (_local13 * _local24)) + (_local19 * _local26)) + _local25);
}
public function reset(_arg1:Array=null):void{
if (((!(_arg1)) || ((_arg1.length < 12)))){
n11 = (n22 = (n33 = (n44 = 1)));
n12 = (n13 = (n14 = (n21 = (n23 = (n24 = (n31 = (n32 = (n34 = (n41 = (n42 = (n43 = 0)))))))))));
} else {
n11 = _arg1[0];
n12 = _arg1[1];
n13 = _arg1[2];
n14 = _arg1[3];
n21 = _arg1[4];
n22 = _arg1[5];
n23 = _arg1[6];
n24 = _arg1[7];
n31 = _arg1[8];
n32 = _arg1[9];
n33 = _arg1[10];
n34 = _arg1[11];
if (_arg1.length == 16){
n41 = _arg1[12];
n42 = _arg1[13];
n43 = _arg1[14];
n44 = _arg1[15];
} else {
n41 = (n42 = (n43 = 0));
n44 = 1;
};
};
}
public function invert():void{
temp.copy(this);
calculateInverse(temp);
}
public function calculateInverse(_arg1:Matrix3D):void{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local2:Number = _arg1.det;
if (Math.abs(_local2) > 0.001){
_local2 = (1 / _local2);
_local3 = _arg1.n11;
_local4 = _arg1.n21;
_local5 = _arg1.n31;
_local6 = _arg1.n12;
_local7 = _arg1.n22;
_local8 = _arg1.n32;
_local9 = _arg1.n13;
_local10 = _arg1.n23;
_local11 = _arg1.n33;
_local12 = _arg1.n14;
_local13 = _arg1.n24;
_local14 = _arg1.n34;
this.n11 = (_local2 * ((_local7 * _local11) - (_local8 * _local10)));
this.n12 = (-(_local2) * ((_local6 * _local11) - (_local8 * _local9)));
this.n13 = (_local2 * ((_local6 * _local10) - (_local7 * _local9)));
this.n14 = (-(_local2) * (((_local6 * ((_local10 * _local14) - (_local11 * _local13))) - (_local7 * ((_local9 * _local14) - (_local11 * _local12)))) + (_local8 * ((_local9 * _local13) - (_local10 * _local12)))));
this.n21 = (-(_local2) * ((_local4 * _local11) - (_local5 * _local10)));
this.n22 = (_local2 * ((_local3 * _local11) - (_local5 * _local9)));
this.n23 = (-(_local2) * ((_local3 * _local10) - (_local4 * _local9)));
this.n24 = (_local2 * (((_local3 * ((_local10 * _local14) - (_local11 * _local13))) - (_local4 * ((_local9 * _local14) - (_local11 * _local12)))) + (_local5 * ((_local9 * _local13) - (_local10 * _local12)))));
this.n31 = (_local2 * ((_local4 * _local8) - (_local5 * _local7)));
this.n32 = (-(_local2) * ((_local3 * _local8) - (_local5 * _local6)));
this.n33 = (_local2 * ((_local3 * _local7) - (_local4 * _local6)));
this.n34 = (-(_local2) * (((_local3 * ((_local7 * _local14) - (_local8 * _local13))) - (_local4 * ((_local6 * _local14) - (_local8 * _local12)))) + (_local5 * ((_local6 * _local13) - (_local7 * _local12)))));
};
}
public function calculateTranspose():void{
var _local1:Number = this.n11;
var _local2:Number = this.n21;
var _local3:Number = this.n31;
var _local4:Number = this.n41;
var _local5:Number = this.n12;
var _local6:Number = this.n22;
var _local7:Number = this.n32;
var _local8:Number = this.n42;
var _local9:Number = this.n13;
var _local10:Number = this.n23;
var _local11:Number = this.n33;
var _local12:Number = this.n43;
var _local13:Number = this.n14;
var _local14:Number = this.n24;
var _local15:Number = this.n34;
var _local16:Number = this.n44;
this.n11 = _local1;
this.n12 = _local2;
this.n13 = _local3;
this.n14 = _local4;
this.n21 = _local5;
this.n22 = _local6;
this.n23 = _local7;
this.n24 = _local8;
this.n31 = _local9;
this.n32 = _local10;
this.n33 = _local11;
this.n34 = _local12;
this.n41 = _local13;
this.n42 = _local14;
this.n43 = _local15;
this.n44 = _local16;
}
public function toString():String{
var _local1 = "";
_local1 = (_local1 + ((((((((int((n11 * 1000)) / 1000) + "\t\t") + (int((n12 * 1000)) / 1000)) + "\t\t") + (int((n13 * 1000)) / 1000)) + "\t\t") + (int((n14 * 1000)) / 1000)) + "\n"));
_local1 = (_local1 + ((((((((int((n21 * 1000)) / 1000) + "\t\t") + (int((n22 * 1000)) / 1000)) + "\t\t") + (int((n23 * 1000)) / 1000)) + "\t\t") + (int((n24 * 1000)) / 1000)) + "\n"));
_local1 = (_local1 + ((((((((int((n31 * 1000)) / 1000) + "\t\t") + (int((n32 * 1000)) / 1000)) + "\t\t") + (int((n33 * 1000)) / 1000)) + "\t\t") + (int((n34 * 1000)) / 1000)) + "\n"));
_local1 = (_local1 + ((((((((int((n41 * 1000)) / 1000) + "\t\t") + (int((n42 * 1000)) / 1000)) + "\t\t") + (int((n43 * 1000)) / 1000)) + "\t\t") + (int((n44 * 1000)) / 1000)) + "\n"));
return (_local1);
}
public static function rotationMatrixWithReference(_arg1:Number3D, _arg2:Number, _arg3:Number3D):Matrix3D{
var _local4:Matrix3D = Matrix3D.translationMatrix(_arg3.x, -(_arg3.y), _arg3.z);
Matrix3D.translationMatrix(_arg3.x, -(_arg3.y), _arg3.z).calculateMultiply(_local4, Matrix3D.rotationMatrix(_arg1.x, _arg1.y, _arg1.z, _arg2));
_local4.calculateMultiply(_local4, Matrix3D.translationMatrix(-(_arg3.x), _arg3.y, -(_arg3.z)));
return (_local4);
}
public static function multiplyVector(_arg1:Matrix3D, _arg2:Number3D):void{
var _local4:Number;
var _local5:Number;
var _local3:Number = _arg2.x;
_local4 = _arg2.y;
_local5 = _arg2.z;
_arg2.x = ((((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)) + _arg1.n14);
_arg2.y = ((((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)) + _arg1.n24);
_arg2.z = ((((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)) + _arg1.n34);
}
public static function multiplyVector4x4(_arg1:Matrix3D, _arg2:Number3D):void{
var _local3:Number;
var _local4:Number;
var _local6:Number;
_local3 = _arg2.x;
_local4 = _arg2.y;
var _local5:Number = _arg2.z;
_local6 = (1 / ((((_local3 * _arg1.n41) + (_local4 * _arg1.n42)) + (_local5 * _arg1.n43)) + _arg1.n44));
_arg2.x = ((((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)) + _arg1.n14);
_arg2.y = ((((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)) + _arg1.n24);
_arg2.z = ((((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)) + _arg1.n34);
_arg2.x = (_arg2.x * _local6);
_arg2.y = (_arg2.y * _local6);
_arg2.z = (_arg2.z * _local6);
}
public static function multiply3x3(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{
var _local3:Matrix3D = new (Matrix3D);
_local3.calculateMultiply3x3(_arg1, _arg2);
return (_local3);
}
public static function normalizeQuaternion(_arg1:Object):Object{
var _local2:Number = magnitudeQuaternion(_arg1);
_arg1.x = (_arg1.x / _local2);
_arg1.y = (_arg1.y / _local2);
_arg1.z = (_arg1.z / _local2);
_arg1.w = (_arg1.w / _local2);
return (_arg1);
}
public static function multiplyVector3x3(_arg1:Matrix3D, _arg2:Number3D):void{
var _local3:Number = _arg2.x;
var _local4:Number = _arg2.y;
var _local5:Number = _arg2.z;
_arg2.x = (((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13));
_arg2.y = (((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23));
_arg2.z = (((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33));
}
public static function axis2quaternion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Object{
var _local5:Number = Math.sin((_arg4 / 2));
var _local6:Number = Math.cos((_arg4 / 2));
var _local7:Object = new Object();
_local7.x = (_arg1 * _local5);
_local7.y = (_arg2 * _local5);
_local7.z = (_arg3 * _local5);
_local7.w = _local6;
return (normalizeQuaternion(_local7));
}
public static function translationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
var _local4:Matrix3D = IDENTITY;
_local4.n14 = _arg1;
_local4.n24 = _arg2;
_local4.n34 = _arg3;
return (_local4);
}
public static function magnitudeQuaternion(_arg1:Object):Number{
return (Math.sqrt(((((_arg1.w * _arg1.w) + (_arg1.x * _arg1.x)) + (_arg1.y * _arg1.y)) + (_arg1.z * _arg1.z))));
}
public static function rotationX(_arg1:Number):Matrix3D{
var _local2:Matrix3D = IDENTITY;
var _local3:Number = Math.cos(_arg1);
var _local4:Number = Math.sin(_arg1);
_local2.n22 = _local3;
_local2.n23 = -(_local4);
_local2.n32 = _local4;
_local2.n33 = _local3;
return (_local2);
}
public static function rotationY(_arg1:Number):Matrix3D{
var _local2:Matrix3D = IDENTITY;
var _local3:Number = Math.cos(_arg1);
var _local4:Number = Math.sin(_arg1);
_local2.n11 = _local3;
_local2.n13 = -(_local4);
_local2.n31 = _local4;
_local2.n33 = _local3;
return (_local2);
}
public static function rotationZ(_arg1:Number):Matrix3D{
var _local2:Matrix3D = IDENTITY;
var _local3:Number = Math.cos(_arg1);
var _local4:Number = Math.sin(_arg1);
_local2.n11 = _local3;
_local2.n12 = -(_local4);
_local2.n21 = _local4;
_local2.n22 = _local3;
return (_local2);
}
public static function clone(_arg1:Matrix3D):Matrix3D{
return (new Matrix3D([_arg1.n11, _arg1.n12, _arg1.n13, _arg1.n14, _arg1.n21, _arg1.n22, _arg1.n23, _arg1.n24, _arg1.n31, _arg1.n32, _arg1.n33, _arg1.n34]));
}
public static function rotationMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Matrix3D=null):Matrix3D{
var _local6:Matrix3D;
if (!_arg5){
_local6 = IDENTITY;
} else {
_local6 = _arg5;
};
var _local7:Number = Math.cos(_arg4);
var _local8:Number = Math.sin(_arg4);
var _local9:Number = (1 - _local7);
var _local10:Number = ((_arg1 * _arg2) * _local9);
var _local11:Number = ((_arg2 * _arg3) * _local9);
var _local12:Number = ((_arg1 * _arg3) * _local9);
var _local13:Number = (_local8 * _arg3);
var _local14:Number = (_local8 * _arg2);
var _local15:Number = (_local8 * _arg1);
_local6.n11 = (_local7 + ((_arg1 * _arg1) * _local9));
_local6.n12 = (-(_local13) + _local10);
_local6.n13 = (_local14 + _local12);
_local6.n14 = 0;
_local6.n21 = (_local13 + _local10);
_local6.n22 = (_local7 + ((_arg2 * _arg2) * _local9));
_local6.n23 = (-(_local15) + _local11);
_local6.n24 = 0;
_local6.n31 = (-(_local14) + _local12);
_local6.n32 = (_local15 + _local11);
_local6.n33 = (_local7 + ((_arg3 * _arg3) * _local9));
_local6.n34 = 0;
return (_local6);
}
public static function add(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{
var _local3:Matrix3D = new (Matrix3D);
_local3.calculateAdd(_arg1, _arg2);
return (_local3);
}
public static function multiply(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{
var _local3:Matrix3D = new (Matrix3D);
_local3.calculateMultiply(_arg1, _arg2);
return (_local3);
}
public static function euler2quaternion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Quaternion=null):Quaternion{
var _local13:Quaternion;
var _local5:Number = Math.sin((_arg1 * 0.5));
var _local6:Number = Math.cos((_arg1 * 0.5));
var _local7:Number = Math.sin((_arg2 * 0.5));
var _local8:Number = Math.cos((_arg2 * 0.5));
var _local9:Number = Math.sin((_arg3 * 0.5));
var _local10:Number = Math.cos((_arg3 * 0.5));
var _local11:Number = (_local6 * _local8);
var _local12:Number = (_local5 * _local7);
if (!_arg4){
_local13 = new Quaternion();
} else {
_local13 = _arg4;
};
_local13.x = ((_local9 * _local11) - (_local10 * _local12));
_local13.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7));
_local13.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8));
_local13.w = ((_local10 * _local11) + (_local9 * _local12));
return (_local13);
}
public static function quaternion2matrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Matrix3D=null):Matrix3D{
var _local15:Matrix3D;
var _local6:Number = (_arg1 * _arg1);
var _local7:Number = (_arg1 * _arg2);
var _local8:Number = (_arg1 * _arg3);
var _local9:Number = (_arg1 * _arg4);
var _local10:Number = (_arg2 * _arg2);
var _local11:Number = (_arg2 * _arg3);
var _local12:Number = (_arg2 * _arg4);
var _local13:Number = (_arg3 * _arg3);
var _local14:Number = (_arg3 * _arg4);
if (!_arg5){
_local15 = IDENTITY;
} else {
_local15 = _arg5;
};
_local15.n11 = (1 - (2 * (_local10 + _local13)));
_local15.n12 = (2 * (_local7 - _local14));
_local15.n13 = (2 * (_local8 + _local12));
_local15.n21 = (2 * (_local7 + _local14));
_local15.n22 = (1 - (2 * (_local6 + _local13)));
_local15.n23 = (2 * (_local11 - _local9));
_local15.n31 = (2 * (_local8 - _local12));
_local15.n32 = (2 * (_local11 + _local9));
_local15.n33 = (1 - (2 * (_local6 + _local10)));
return (_local15);
}
public static function inverse(_arg1:Matrix3D):Matrix3D{
var _local2:Matrix3D = new (Matrix3D);
_local2.calculateInverse(_arg1);
return (_local2);
}
public static function euler2matrix(_arg1:Number3D):Matrix3D{
temp.reset();
var _local2:Matrix3D = temp;
_local2 = temp;
var _local3:Number = (_arg1.x * toRADIANS);
var _local4:Number = (_arg1.y * toRADIANS);
var _local5:Number = (_arg1.z * toRADIANS);
var _local6:Number = Math.cos(_local3);
var _local7:Number = Math.sin(_local3);
var _local8:Number = Math.cos(_local4);
var _local9:Number = Math.sin(_local4);
var _local10:Number = Math.cos(_local5);
var _local11:Number = Math.sin(_local5);
var _local12:Number = (_local6 * _local9);
var _local13:Number = (_local7 * _local9);
_local2.n11 = (_local8 * _local10);
_local2.n12 = (-(_local8) * _local11);
_local2.n13 = _local9;
_local2.n21 = ((_local13 * _local10) + (_local6 * _local11));
_local2.n22 = ((-(_local13) * _local11) + (_local6 * _local10));
_local2.n23 = (-(_local7) * _local8);
_local2.n31 = ((-(_local12) * _local10) + (_local7 * _local11));
_local2.n32 = ((_local12 * _local11) + (_local7 * _local10));
_local2.n33 = (_local6 * _local8);
return (_local2);
}
public static function scaleMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{
var _local4:Matrix3D = IDENTITY;
_local4.n11 = _arg1;
_local4.n22 = _arg2;
_local4.n33 = _arg3;
return (_local4);
}
public static function rotateAxis(_arg1:Matrix3D, _arg2:Number3D):void{
var _local3:Number = _arg2.x;
var _local4:Number = _arg2.y;
var _local5:Number = _arg2.z;
_arg2.x = (((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13));
_arg2.y = (((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23));
_arg2.z = (((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33));
_arg2.normalize();
}
public static function matrix2euler(_arg1:Matrix3D, _arg2:Number3D=null, _arg3:Number3D=null):Number3D{
_arg2 = ((_arg2) || (new Number3D()));
var _local4:Number = (((_arg3) && ((_arg3.x == 1)))) ? 1 : Math.sqrt((((_arg1.n11 * _arg1.n11) + (_arg1.n21 * _arg1.n21)) + (_arg1.n31 * _arg1.n31)));
var _local5:Number = (((_arg3) && ((_arg3.y == 1)))) ? 1 : Math.sqrt((((_arg1.n12 * _arg1.n12) + (_arg1.n22 * _arg1.n22)) + (_arg1.n32 * _arg1.n32)));
var _local6:Number = (((_arg3) && ((_arg3.z == 1)))) ? 1 : Math.sqrt((((_arg1.n13 * _arg1.n13) + (_arg1.n23 * _arg1.n23)) + (_arg1.n33 * _arg1.n33)));
var _local7:Number = (_arg1.n11 / _local4);
var _local8:Number = (_arg1.n21 / _local5);
var _local9:Number = (_arg1.n31 / _local6);
var _local10:Number = (_arg1.n32 / _local6);
var _local11:Number = (_arg1.n33 / _local6);
_local9 = ((_local9 > 1)) ? 1 : _local9;
_local9 = ((_local9 < -1)) ? -1 : _local9;
_arg2.y = Math.asin(-(_local9));
_arg2.z = Math.atan2(_local8, _local7);
_arg2.x = Math.atan2(_local10, _local11);
if (Papervision3D.useDEGREES){
_arg2.x = (_arg2.x * toDEGREES);
_arg2.y = (_arg2.y * toDEGREES);
_arg2.z = (_arg2.z * toDEGREES);
};
return (_arg2);
}
public static function multiplyQuaternion(_arg1:Object, _arg2:Object):Object{
var _local3:Number = _arg1.x;
var _local4:Number = _arg1.y;
var _local5:Number = _arg1.z;
var _local6:Number = _arg1.w;
var _local7:Number = _arg2.x;
var _local8:Number = _arg2.y;
var _local9:Number = _arg2.z;
var _local10:Number = _arg2.w;
var _local11:Object = new Object();
_local11.x = ((((_local6 * _local7) + (_local3 * _local10)) + (_local4 * _local9)) - (_local5 * _local8));
_local11.y = ((((_local6 * _local8) + (_local4 * _local10)) + (_local5 * _local7)) - (_local3 * _local9));
_local11.z = ((((_local6 * _local9) + (_local5 * _local10)) + (_local3 * _local8)) - (_local4 * _local7));
_local11.w = ((((_local6 * _local10) - (_local3 * _local7)) - (_local4 * _local8)) - (_local5 * _local9));
return (_local11);
}
public static function get IDENTITY():Matrix3D{
return (new Matrix3D([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));
}
}
}//package org.papervision3d.core.math
Section 55
//Number2D (org.papervision3d.core.math.Number2D)
package org.papervision3d.core.math {
import org.papervision3d.*;
public class Number2D {
public var x:Number;
public var y:Number;
public static const DEGTORAD:Number = 0.0174532925199433;
public static const RADTODEG:Number = 57.2957795130823;
public function Number2D(_arg1:Number=0, _arg2:Number=0){
this.x = _arg1;
this.y = _arg2;
}
public function isModuloLessThan(_arg1:Number):Boolean{
return ((moduloSquared < (_arg1 * _arg1)));
}
public function reverse():void{
this.x = -(this.x);
this.y = -(this.y);
}
public function divideEq(_arg1:Number):void{
x = (x / _arg1);
y = (y / _arg1);
}
public function plusEq(_arg1:Number2D):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
}
public function multiplyEq(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
}
public function isModuloGreaterThan(_arg1:Number):Boolean{
return ((moduloSquared > (_arg1 * _arg1)));
}
public function toString():String{
var _local1:Number = (Math.round((this.x * 1000)) / 1000);
var _local2:Number = (Math.round((this.y * 1000)) / 1000);
return ((((("[" + _local1) + ", ") + _local2) + "]"));
}
public function reset(_arg1:Number=0, _arg2:Number=0):void{
this.x = _arg1;
this.y = _arg2;
}
public function get moduloSquared():Number{
return (((this.x * this.x) + (this.y * this.y)));
}
public function normalise():void{
var _local1:Number = this.modulo;
this.x = (this.x / _local1);
this.y = (this.y / _local1);
}
public function get modulo():Number{
return (Math.sqrt(((x * x) + (y * y))));
}
public function copyTo(_arg1:Number2D):void{
_arg1.x = this.x;
_arg1.y = this.y;
}
public function angle():Number{
if (Papervision3D.useDEGREES){
return ((RADTODEG * Math.atan2(y, x)));
};
return (Math.atan2(y, x));
}
public function rotate(_arg1:Number):void{
var _local4:Number2D;
if (Papervision3D.useDEGREES){
_arg1 = (_arg1 * DEGTORAD);
};
var _local2:Number = Math.cos(_arg1);
var _local3:Number = Math.sin(_arg1);
_local4 = clone();
this.x = ((_local4.x * _local2) - (_local4.y * _local3));
this.y = ((_local4.x * _local3) + (_local4.y * _local2));
}
public function minusEq(_arg1:Number2D):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
}
public function clone():Number2D{
return (new Number2D(this.x, this.y));
}
public function isModuloEqualTo(_arg1:Number):Boolean{
return ((moduloSquared == (_arg1 * _arg1)));
}
public function copyFrom(_arg1:Number2D):void{
this.x = _arg1.x;
this.y = _arg1.y;
}
public static function multiplyScalar(_arg1:Number2D, _arg2:Number):Number2D{
return (new Number2D((_arg1.x * _arg2), (_arg1.y * _arg2)));
}
public static function add(_arg1:Number2D, _arg2:Number2D):Number2D{
return (new Number2D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y)));
}
public static function dot(_arg1:Number2D, _arg2:Number2D):Number{
return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)));
}
public static function subtract(_arg1:Number2D, _arg2:Number2D):Number2D{
return (new Number2D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y)));
}
}
}//package org.papervision3d.core.math
Section 56
//Number3D (org.papervision3d.core.math.Number3D)
package org.papervision3d.core.math {
import org.papervision3d.*;
public class Number3D {
public var x:Number;
public var y:Number;
public var z:Number;
public static var toDEGREES:Number = 57.2957795130823;
private static var temp:Number3D = Number3D.ZERO;
public static var toRADIANS:Number = 0.0174532925199433;
public function Number3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
}
public function isModuloLessThan(_arg1:Number):Boolean{
return ((moduloSquared < (_arg1 * _arg1)));
}
public function rotateX(_arg1:Number):void{
if (Papervision3D.useDEGREES){
_arg1 = (_arg1 * toRADIANS);
};
var _local2:Number = Math.cos(_arg1);
var _local3:Number = Math.sin(_arg1);
temp.copyFrom(this);
this.y = ((temp.y * _local2) - (temp.z * _local3));
this.z = ((temp.y * _local3) + (temp.z * _local2));
}
public function rotateY(_arg1:Number):void{
if (Papervision3D.useDEGREES){
_arg1 = (_arg1 * toRADIANS);
};
var _local2:Number = Math.cos(_arg1);
var _local3:Number = Math.sin(_arg1);
temp.copyFrom(this);
this.x = ((temp.x * _local2) + (temp.z * _local3));
this.z = ((temp.x * -(_local3)) + (temp.z * _local2));
}
public function plusEq(_arg1:Number3D):void{
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
}
public function multiplyEq(_arg1:Number):void{
x = (x * _arg1);
y = (y * _arg1);
z = (z * _arg1);
}
public function toString():String{
return (((((("x:" + (Math.round((x * 100)) / 100)) + " y:") + (Math.round((y * 100)) / 100)) + " z:") + (Math.round((z * 100)) / 100)));
}
public function normalize():void{
var _local1:Number = Math.sqrt((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z)));
if (((!((_local1 == 0))) && (!((_local1 == 1))))){
_local1 = (1 / _local1);
this.x = (this.x * _local1);
this.y = (this.y * _local1);
this.z = (this.z * _local1);
};
}
public function rotateZ(_arg1:Number):void{
if (Papervision3D.useDEGREES){
_arg1 = (_arg1 * toRADIANS);
};
var _local2:Number = Math.cos(_arg1);
var _local3:Number = Math.sin(_arg1);
temp.copyFrom(this);
this.x = ((temp.x * _local2) - (temp.y * _local3));
this.y = ((temp.x * _local3) + (temp.y * _local2));
}
public function reset(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):void{
x = _arg1;
y = _arg2;
z = _arg3;
}
public function get moduloSquared():Number{
return ((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z)));
}
public function get modulo():Number{
return (Math.sqrt((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z))));
}
public function copyTo(_arg1:Number3D):void{
_arg1.x = x;
_arg1.y = y;
_arg1.z = z;
}
public function isModuloGreaterThan(_arg1:Number):Boolean{
return ((moduloSquared > (_arg1 * _arg1)));
}
public function minusEq(_arg1:Number3D):void{
x = (x - _arg1.x);
y = (y - _arg1.y);
z = (z - _arg1.z);
}
public function clone():Number3D{
return (new Number3D(this.x, this.y, this.z));
}
public function isModuloEqualTo(_arg1:Number):Boolean{
return ((moduloSquared == (_arg1 * _arg1)));
}
public function copyFrom(_arg1:Number3D):void{
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
public static function sub(_arg1:Number3D, _arg2:Number3D):Number3D{
return (new Number3D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z)));
}
public static function add(_arg1:Number3D, _arg2:Number3D):Number3D{
return (new Number3D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z)));
}
public static function cross(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D=null):Number3D{
if (!_arg3){
_arg3 = ZERO;
};
_arg3.reset(((_arg2.y * _arg1.z) - (_arg2.z * _arg1.y)), ((_arg2.z * _arg1.x) - (_arg2.x * _arg1.z)), ((_arg2.x * _arg1.y) - (_arg2.y * _arg1.x)));
return (_arg3);
}
public static function dot(_arg1:Number3D, _arg2:Number3D):Number{
return ((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg2.z * _arg1.z)));
}
public static function get ZERO():Number3D{
return (new Number3D(0, 0, 0));
}
}
}//package org.papervision3d.core.math
Section 57
//NumberUV (org.papervision3d.core.math.NumberUV)
package org.papervision3d.core.math {
public class NumberUV {
public var u:Number;
public var v:Number;
public function NumberUV(_arg1:Number=0, _arg2:Number=0){
this.u = _arg1;
this.v = _arg2;
}
public function toString():String{
return (((("u:" + u) + " v:") + v));
}
public function clone():NumberUV{
return (new NumberUV(this.u, this.v));
}
public static function get ZERO():NumberUV{
return (new NumberUV(0, 0));
}
public static function median(_arg1:NumberUV, _arg2:NumberUV):NumberUV{
if (_arg1 == null){
return (null);
};
if (_arg2 == null){
return (null);
};
return (new NumberUV(((_arg1.u + _arg2.u) / 2), ((_arg1.v + _arg2.v) / 2)));
}
public static function weighted(_arg1:NumberUV, _arg2:NumberUV, _arg3:Number, _arg4:Number):NumberUV{
if (_arg1 == null){
return (null);
};
if (_arg2 == null){
return (null);
};
var _local5:Number = (_arg3 + _arg4);
var _local6:Number = (_arg3 / _local5);
var _local7:Number = (_arg4 / _local5);
return (new NumberUV(((_arg1.u * _local6) + (_arg2.u * _local7)), ((_arg1.v * _local6) + (_arg2.v * _local7))));
}
}
}//package org.papervision3d.core.math
Section 58
//Plane3D (org.papervision3d.core.math.Plane3D)
package org.papervision3d.core.math {
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.util.*;
public class Plane3D {
public var d:Number;
public var normal:Number3D;
var eps:Number;// = 0.01
private static var _yUP:Number3D = new Number3D(0, 1, 0);
private static var _zUP:Number3D = new Number3D(0, 0, 1);
protected static var flipPlane:Plane3D = new (Plane3D);
;
public function Plane3D(_arg1:Number3D=null, _arg2:Number3D=null){
if (((_arg1) && (_arg2))){
this.normal = _arg1;
this.d = -(Number3D.dot(_arg1, _arg2));
} else {
this.normal = new Number3D();
this.d = 0;
};
}
public function setCoefficients(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
this.normal.x = _arg1;
this.normal.y = _arg2;
this.normal.z = _arg3;
this.d = _arg4;
normalize();
}
public function setThreePoints(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D):void{
var _local4:Number3D = Number3D.sub(_arg2, _arg1);
var _local5:Number3D = Number3D.sub(_arg3, _arg1);
this.normal = Number3D.cross(_local4, _local5);
this.normal.normalize();
this.d = -(Number3D.dot(normal, _arg1));
}
public function setNormalAndPoint(_arg1:Number3D, _arg2:Number3D):void{
this.normal = _arg1;
this.d = -(Number3D.dot(_arg1, _arg2));
}
public function getFlip():Plane3D{
var _local1:Plane3D = Plane3D.fromThreePoints(new Number3D(), new Number3D(), new Number3D());
_local1.normal.z = -(normal.z);
_local1.normal.y = -(normal.y);
_local1.normal.x = -(normal.x);
_local1.d = d;
return (_local1);
}
public function getTempFlip():Plane3D{
flipPlane.normal.z = -(normal.z);
flipPlane.normal.y = -(normal.y);
flipPlane.normal.x = -(normal.x);
flipPlane.d = d;
return (flipPlane);
}
public function pointOnSide(_arg1:Number3D):int{
var _local2:Number = distance(_arg1);
if (_local2 < 0){
return (ClassificationUtil.BACK);
};
if (_local2 > 0){
return (ClassificationUtil.FRONT);
};
return (ClassificationUtil.COINCIDING);
}
public function closestPointOnPlane(_arg1:Number3D, _arg2:Number3D):Number3D{
var _local3:Number = Number3D.dot(this.normal, Number3D.sub(_arg1, _arg2));
var _local4:Number3D = _arg1.clone();
_arg1.clone().x = (_local4.x - (_local3 * this.normal.x));
_local4.y = (_local4.y - (_local3 * this.normal.y));
_local4.z = (_local4.z - (_local3 * this.normal.z));
return (_local4);
}
public function normalize():void{
var _local1:Number3D = this.normal;
var _local2:Number = Math.sqrt((((_local1.x * _local1.x) + (_local1.y * _local1.y)) + (_local1.z * _local1.z)));
_local1.x = (_local1.x / _local2);
_local1.y = (_local1.y / _local2);
_local1.z = (_local1.z / _local2);
this.d = (this.d / _local2);
}
public function distance(_arg1):Number{
var _local2:Number3D = ((_arg1 is Vertex3D)) ? _arg1.toNumber3D() : _arg1;
return ((Number3D.dot(_local2, normal) + d));
}
public function isCoplanar(_arg1:Plane3D):Boolean{
return ((((((((Math.abs((normal.x - _arg1.normal.x)) < eps)) && ((Math.abs((normal.y - _arg1.normal.y)) < eps)))) && ((Math.abs((normal.z - _arg1.normal.z)) < eps)))) && ((Math.abs((d - _arg1.d)) < eps))));
}
public function getIntersectionLineNumbers(_arg1:Number3D, _arg2:Number3D):Number3D{
var _local3:Number = ((((normal.x * _arg1.x) + (normal.y * _arg1.y)) + (normal.z * _arg1.z)) - d);
var _local4:Number = ((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d);
var _local5:Number = (((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d) / (_local4 - _local3));
return (new Number3D((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5))));
}
public function getIntersectionLine(_arg1:Vertex3D, _arg2:Vertex3D):Vertex3D{
var _local3:Number = ((((normal.x * _arg1.x) + (normal.y * _arg1.y)) + (normal.z * _arg1.z)) - d);
var _local4:Number = ((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d);
var _local5:Number = (((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d) / (_local4 - _local3));
return (new Vertex3D((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5))));
}
public function toString():String{
return ((((((((("[a:" + normal.x) + " b:") + normal.y) + " c:") + normal.z) + " d:") + d) + "]"));
}
public function projectPoints(_arg1:Array, _arg2:Number3D=null):void{
var _local8:*;
var _local3:Number = Number3D.dot(_yUP, this.normal);
var _local4:Number3D = ((Math.abs(_local3) > 0.99)) ? _zUP : _yUP;
var _local5:Number3D = Number3D.cross(_local4, normal);
_local5.normalize();
_local4 = Number3D.cross(normal, _local5);
_local4.normalize();
var _local6:Matrix3D = new Matrix3D([_local5.x, _local4.x, normal.x, 0, _local5.y, _local4.y, normal.y, 0, _local5.z, _local4.z, normal.z, 0, 0, 0, 0, 1]);
if (_arg2){
_local6 = Matrix3D.multiply(Matrix3D.translationMatrix(_arg2.x, _arg2.y, _arg2.z), _local6);
};
var _local7:Number3D = new Number3D();
for each (_local8 in _arg1) {
_local7.x = _local8["x"];
_local7.y = _local8["y"];
_local7.z = _local8["z"];
Matrix3D.multiplyVector(_local6, _local7);
_local8["x"] = _local7.x;
_local8["y"] = _local7.y;
_local8["z"] = _local7.z;
};
}
public function clone():Plane3D{
return (Plane3D.fromCoefficients(this.normal.x, this.normal.y, this.normal.z, this.d));
}
public function isCoplanarOpposite(_arg1:Plane3D):Boolean{
flipPlane.normal.z = -(_arg1.normal.z);
flipPlane.normal.y = -(_arg1.normal.y);
flipPlane.normal.x = -(_arg1.normal.x);
flipPlane.d = _arg1.d;
return (flipPlane.isCoplanar(_arg1));
}
public function vertDistance(_arg1:Vertex3D):Number{
return (((((_arg1.x * normal.x) + (normal.y * _arg1.y)) + (_arg1.z * normal.z)) + d));
}
public static function fromNormalAndPoint(_arg1, _arg2):Plane3D{
var _local3:Number3D = ((_arg1 is Number3D)) ? _arg1 : new Number3D(_arg1.x, _arg1.y, _arg1.z);
var _local4:Number3D = ((_arg2 is Number3D)) ? _arg2 : new Number3D(_arg2.x, _arg2.y, _arg2.z);
return (new Plane3D(_local3, _local4));
}
public static function fromThreePoints(_arg1, _arg2, _arg3):Plane3D{
var _local4:Plane3D = new (Plane3D);
var _local5:Number3D = ((_arg1 is Number3D)) ? _arg1 : new Number3D(_arg1.x, _arg1.y, _arg1.z);
var _local6:Number3D = ((_arg2 is Number3D)) ? _arg2 : new Number3D(_arg2.x, _arg2.y, _arg2.z);
var _local7:Number3D = ((_arg3 is Number3D)) ? _arg3 : new Number3D(_arg3.x, _arg3.y, _arg3.z);
_local4.setThreePoints(_local5, _local6, _local7);
return (_local4);
}
public static function fromCoefficients(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Plane3D{
var _local5:Plane3D = new (Plane3D);
_local5.setCoefficients(_arg1, _arg2, _arg3, _arg4);
return (_local5);
}
}
}//package org.papervision3d.core.math
Section 59
//Quaternion (org.papervision3d.core.math.Quaternion)
package org.papervision3d.core.math {
public class Quaternion {
private var _matrix:Matrix3D;
public var w:Number;
public var x:Number;
public var y:Number;
public var z:Number;
public static const EPSILON:Number = 1E-6;
public static const DEGTORAD:Number = 0.0174532925199433;
public static const RADTODEG:Number = 57.2957795130823;
public function Quaternion(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=1){
this.x = _arg1;
this.y = _arg2;
this.z = _arg3;
this.w = _arg4;
_matrix = Matrix3D.IDENTITY;
}
public function get matrix():Matrix3D{
var _local1:Number = (x * x);
var _local2:Number = (x * y);
var _local3:Number = (x * z);
var _local4:Number = (x * w);
var _local5:Number = (y * y);
var _local6:Number = (y * z);
var _local7:Number = (y * w);
var _local8:Number = (z * z);
var _local9:Number = (z * w);
_matrix.n11 = (1 - (2 * (_local5 + _local8)));
_matrix.n12 = (2 * (_local2 - _local9));
_matrix.n13 = (2 * (_local3 + _local7));
_matrix.n21 = (2 * (_local2 + _local9));
_matrix.n22 = (1 - (2 * (_local1 + _local8)));
_matrix.n23 = (2 * (_local6 - _local4));
_matrix.n31 = (2 * (_local3 - _local7));
_matrix.n32 = (2 * (_local6 + _local4));
_matrix.n33 = (1 - (2 * (_local1 + _local5)));
return (_matrix);
}
public function setFromEuler(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false):void{
if (_arg4){
_arg1 = (_arg1 * DEGTORAD);
_arg2 = (_arg2 * DEGTORAD);
_arg3 = (_arg3 * DEGTORAD);
};
var _local5:Number = Math.sin((_arg1 * 0.5));
var _local6:Number = Math.cos((_arg1 * 0.5));
var _local7:Number = Math.sin((_arg2 * 0.5));
var _local8:Number = Math.cos((_arg2 * 0.5));
var _local9:Number = Math.sin((_arg3 * 0.5));
var _local10:Number = Math.cos((_arg3 * 0.5));
var _local11:Number = (_local6 * _local8);
var _local12:Number = (_local5 * _local7);
this.x = ((_local9 * _local11) - (_local10 * _local12));
this.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7));
this.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8));
this.w = ((_local10 * _local11) + (_local9 * _local12));
}
public function setFromAxisAngle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Number = Math.sin((_arg4 / 2));
var _local6:Number = Math.cos((_arg4 / 2));
this.x = (_arg1 * _local5);
this.y = (_arg2 * _local5);
this.z = (_arg3 * _local5);
this.w = _local6;
this.normalize();
}
public function calculateMultiply(_arg1:Quaternion, _arg2:Quaternion):void{
this.x = ((((_arg1.w * _arg2.x) + (_arg1.x * _arg2.w)) + (_arg1.y * _arg2.z)) - (_arg1.z * _arg2.y));
this.y = ((((_arg1.w * _arg2.y) - (_arg1.x * _arg2.z)) + (_arg1.y * _arg2.w)) + (_arg1.z * _arg2.x));
this.z = ((((_arg1.w * _arg2.z) + (_arg1.x * _arg2.y)) - (_arg1.y * _arg2.x)) + (_arg1.z * _arg2.w));
this.w = ((((_arg1.w * _arg2.w) - (_arg1.x * _arg2.x)) - (_arg1.y * _arg2.y)) - (_arg1.z * _arg2.z));
}
public function toString():String{
return (((((((("Quaternion: x:" + this.x) + " y:") + this.y) + " z:") + this.z) + " w:") + this.w));
}
public function normalize():void{
var _local2:Number;
var _local1:Number = this.modulo;
if (Math.abs(_local1) < EPSILON){
x = (y = (z = 0));
w = 1;
} else {
_local2 = (1 / _local1);
x = (x * _local2);
y = (y * _local2);
z = (z * _local2);
w = (w * _local2);
};
}
public function toEuler():Number3D{
var _local1:Number3D = new Number3D();
var _local2:Quaternion = this;
var _local3:Number = ((_local2.x * _local2.y) + (_local2.z * _local2.w));
if (_local3 > 0.499){
_local1.x = (2 * Math.atan2(_local2.x, _local2.w));
_local1.y = (Math.PI / 2);
_local1.z = 0;
return (_local1);
};
if (_local3 < -0.499){
_local1.x = (-2 * Math.atan2(_local2.x, _local2.w));
_local1.y = (-(Math.PI) / 2);
_local1.z = 0;
return (_local1);
};
var _local4:Number = (_local2.x * _local2.x);
var _local5:Number = (_local2.y * _local2.y);
var _local6:Number = (_local2.z * _local2.z);
_local1.x = Math.atan2((((2 * _local2.y) * _local2.w) - ((2 * _local2.x) * _local2.z)), ((1 - (2 * _local5)) - (2 * _local6)));
_local1.y = Math.asin((2 * _local3));
_local1.z = Math.atan2((((2 * _local2.x) * _local2.w) - ((2 * _local2.y) * _local2.z)), ((1 - (2 * _local4)) - (2 * _local6)));
return (_local1);
}
public function get modulo():Number{
return (Math.sqrt(((((x * x) + (y * y)) + (z * z)) + (w * w))));
}
public function clone():Quaternion{
return (new Quaternion(this.x, this.y, this.z, this.w));
}
public function mult(_arg1:Quaternion):void{
var _local2:Number = this.w;
var _local3:Number = this.x;
var _local4:Number = this.y;
var _local5:Number = this.z;
x = ((((_local2 * _arg1.x) + (_local3 * _arg1.w)) + (_local4 * _arg1.z)) - (_local5 * _arg1.y));
y = ((((_local2 * _arg1.y) - (_local3 * _arg1.z)) + (_local4 * _arg1.w)) + (_local5 * _arg1.x));
z = ((((_local2 * _arg1.z) + (_local3 * _arg1.y)) - (_local4 * _arg1.x)) + (_local5 * _arg1.w));
w = ((((_local2 * _arg1.w) - (_local3 * _arg1.x)) - (_local4 * _arg1.y)) - (_local5 * _arg1.z));
}
public static function sub(_arg1:Quaternion, _arg2:Quaternion):Quaternion{
return (new Quaternion((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z), (_arg1.w - _arg2.w)));
}
public static function add(_arg1:Quaternion, _arg2:Quaternion):Quaternion{
return (new Quaternion((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z), (_arg1.w + _arg2.w)));
}
public static function createFromEuler(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false):Quaternion{
if (_arg4){
_arg1 = (_arg1 * DEGTORAD);
_arg2 = (_arg2 * DEGTORAD);
_arg3 = (_arg3 * DEGTORAD);
};
var _local5:Number = Math.sin((_arg1 * 0.5));
var _local6:Number = Math.cos((_arg1 * 0.5));
var _local7:Number = Math.sin((_arg2 * 0.5));
var _local8:Number = Math.cos((_arg2 * 0.5));
var _local9:Number = Math.sin((_arg3 * 0.5));
var _local10:Number = Math.cos((_arg3 * 0.5));
var _local11:Number = (_local6 * _local8);
var _local12:Number = (_local5 * _local7);
var _local13:Quaternion = new (Quaternion);
_local13.x = ((_local9 * _local11) - (_local10 * _local12));
_local13.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7));
_local13.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8));
_local13.w = ((_local10 * _local11) + (_local9 * _local12));
return (_local13);
}
public static function createFromMatrix(_arg1:Matrix3D):Quaternion{
var _local3:Number;
var _local5:int;
var _local6:int;
var _local7:int;
var _local9:Array;
var _local10:Array;
var _local2:Quaternion = new (Quaternion);
var _local4:Array = new Array(4);
var _local8:Number = ((_arg1.n11 + _arg1.n22) + _arg1.n33);
if (_local8 > 0){
_local3 = Math.sqrt((_local8 + 1));
_local2.w = (_local3 / 2);
_local3 = (0.5 / _local3);
_local2.x = ((_arg1.n32 - _arg1.n23) * _local3);
_local2.y = ((_arg1.n13 - _arg1.n31) * _local3);
_local2.z = ((_arg1.n21 - _arg1.n12) * _local3);
} else {
_local9 = [1, 2, 0];
_local10 = [[_arg1.n11, _arg1.n12, _arg1.n13, _arg1.n14], [_arg1.n21, _arg1.n22, _arg1.n23, _arg1.n24], [_arg1.n31, _arg1.n32, _arg1.n33, _arg1.n34]];
_local5 = 0;
if (_local10[1][1] > _local10[0][0]){
_local5 = 1;
};
if (_local10[2][2] > _local10[_local5][_local5]){
_local5 = 2;
};
_local6 = _local9[_local5];
_local7 = _local9[_local6];
_local3 = Math.sqrt(((_local10[_local5][_local5] - (_local10[_local6][_local6] + _local10[_local7][_local7])) + 1));
_local4[_local5] = (_local3 * 0.5);
if (_local3 != 0){
_local3 = (0.5 / _local3);
};
_local4[3] = ((_local10[_local7][_local6] - _local10[_local6][_local7]) * _local3);
_local4[_local6] = ((_local10[_local6][_local5] + _local10[_local5][_local6]) * _local3);
_local4[_local7] = ((_local10[_local7][_local5] + _local10[_local5][_local7]) * _local3);
_local2.x = _local4[0];
_local2.y = _local4[1];
_local2.z = _local4[2];
_local2.w = _local4[3];
};
return (_local2);
}
public static function dot(_arg1:Quaternion, _arg2:Quaternion):Number{
return (((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z)) + (_arg1.w * _arg2.w)));
}
public static function multiply(_arg1:Quaternion, _arg2:Quaternion):Quaternion{
var _local3:Quaternion = new (Quaternion);
_local3.x = ((((_arg1.w * _arg2.x) + (_arg1.x * _arg2.w)) + (_arg1.y * _arg2.z)) - (_arg1.z * _arg2.y));
_local3.y = ((((_arg1.w * _arg2.y) - (_arg1.x * _arg2.z)) + (_arg1.y * _arg2.w)) + (_arg1.z * _arg2.x));
_local3.z = ((((_arg1.w * _arg2.z) + (_arg1.x * _arg2.y)) - (_arg1.y * _arg2.x)) + (_arg1.z * _arg2.w));
_local3.w = ((((_arg1.w * _arg2.w) - (_arg1.x * _arg2.x)) - (_arg1.y * _arg2.y)) - (_arg1.z * _arg2.z));
return (_local3);
}
public static function createFromAxisAngle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Quaternion{
var _local5:Quaternion = new (Quaternion);
_local5.setFromAxisAngle(_arg1, _arg2, _arg3, _arg4);
return (_local5);
}
public static function slerp(_arg1:Quaternion, _arg2:Quaternion, _arg3:Number):Quaternion{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local4:Number = ((((_arg1.w * _arg2.w) + (_arg1.x * _arg2.x)) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z));
if (_local4 < 0){
_arg1.x = (_arg1.x * -1);
_arg1.y = (_arg1.y * -1);
_arg1.z = (_arg1.z * -1);
_arg1.w = (_arg1.w * -1);
_local4 = (_local4 * -1);
};
if ((_local4 + 1) > EPSILON){
if ((1 - _local4) >= EPSILON){
_local7 = Math.acos(_local4);
_local8 = (1 / Math.sin(_local7));
_local5 = (Math.sin((_local7 * (1 - _arg3))) * _local8);
_local6 = (Math.sin((_local7 * _arg3)) * _local8);
} else {
_local5 = (1 - _arg3);
_local6 = _arg3;
};
} else {
_arg2.y = -(_arg1.y);
_arg2.x = _arg1.x;
_arg2.w = -(_arg1.w);
_arg2.z = _arg1.z;
_local5 = Math.sin((Math.PI * (0.5 - _arg3)));
_local6 = Math.sin((Math.PI * _arg3));
};
return (new Quaternion(((_local5 * _arg1.x) + (_local6 * _arg2.x)), ((_local5 * _arg1.y) + (_local6 * _arg2.y)), ((_local5 * _arg1.z) + (_local6 * _arg2.z)), ((_local5 * _arg1.w) + (_local6 * _arg2.w))));
}
public static function createFromOrthoMatrix(_arg1:Matrix3D):Quaternion{
var _local2:Quaternion = new (Quaternion);
_local2.w = (Math.sqrt(Math.max(0, (((1 + _arg1.n11) + _arg1.n22) + _arg1.n33))) / 2);
_local2.x = (Math.sqrt(Math.max(0, (((1 + _arg1.n11) - _arg1.n22) - _arg1.n33))) / 2);
_local2.y = (Math.sqrt(Math.max(0, (((1 - _arg1.n11) + _arg1.n22) - _arg1.n33))) / 2);
_local2.z = (Math.sqrt(Math.max(0, (((1 - _arg1.n11) - _arg1.n22) + _arg1.n33))) / 2);
_local2.x = (((_arg1.n32 - _arg1.n23) < 0)) ? ((_local2.x < 0)) ? _local2.x : -(_local2.x) : ((_local2.x < 0)) ? -(_local2.x) : _local2.x;
_local2.y = (((_arg1.n13 - _arg1.n31) < 0)) ? ((_local2.y < 0)) ? _local2.y : -(_local2.y) : ((_local2.y < 0)) ? -(_local2.y) : _local2.y;
_local2.z = (((_arg1.n21 - _arg1.n12) < 0)) ? ((_local2.z < 0)) ? _local2.z : -(_local2.z) : ((_local2.z < 0)) ? -(_local2.z) : _local2.z;
return (_local2);
}
public static function conjugate(_arg1:Quaternion):Quaternion{
var _local2:Quaternion = new (Quaternion);
_local2.x = -(_arg1.x);
_local2.y = -(_arg1.y);
_local2.z = -(_arg1.z);
_local2.w = _arg1.w;
return (_local2);
}
public static function slerpOld(_arg1:Quaternion, _arg2:Quaternion, _arg3:Number):Quaternion{
var _local4:Quaternion = new (Quaternion);
var _local5:Number = ((((_arg1.w * _arg2.w) + (_arg1.x * _arg2.x)) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z));
if (Math.abs(_local5) >= 1){
_local4.w = _arg1.w;
_local4.x = _arg1.x;
_local4.y = _arg1.y;
_local4.z = _arg1.z;
return (_local4);
};
var _local6:Number = Math.acos(_local5);
var _local7:Number = Math.sqrt((1 - (_local5 * _local5)));
if (Math.abs(_local7) < 0.001){
_local4.w = ((_arg1.w * 0.5) + (_arg2.w * 0.5));
_local4.x = ((_arg1.x * 0.5) + (_arg2.x * 0.5));
_local4.y = ((_arg1.y * 0.5) + (_arg2.y * 0.5));
_local4.z = ((_arg1.z * 0.5) + (_arg2.z * 0.5));
return (_local4);
};
var _local8:Number = (Math.sin(((1 - _arg3) * _local6)) / _local7);
var _local9:Number = (Math.sin((_arg3 * _local6)) / _local7);
_local4.w = ((_arg1.w * _local8) + (_arg2.w * _local9));
_local4.x = ((_arg1.x * _local8) + (_arg2.x * _local9));
_local4.y = ((_arg1.y * _local8) + (_arg2.y * _local9));
_local4.z = ((_arg1.z * _local8) + (_arg2.z * _local9));
return (_local4);
}
}
}//package org.papervision3d.core.math
Section 60
//pv3dview (org.papervision3d.core.ns.pv3dview)
package org.papervision3d.core.ns {
public namespace pv3dview;
}//package org.papervision3d.core.ns
Section 61
//CameraObject3D (org.papervision3d.core.proto.CameraObject3D)
package org.papervision3d.core.proto {
import org.papervision3d.core.render.data.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.culling.*;
import org.papervision3d.core.math.util.*;
import org.papervision3d.*;
public class CameraObject3D extends DisplayObject3D {
protected var _orthoScale:Number;// = 1
public var culler:IObjectCuller;
public var sort:Boolean;
public var viewport:Rectangle;
protected var _target:DisplayObject3D;
protected var _orthoScaleMatrix:Matrix3D;
public var eye:Matrix3D;
protected var _ortho:Boolean;
protected var _useCulling:Boolean;
public var zoom:Number;
public var yUP:Boolean;
public var focus:Number;
protected var _useProjectionMatrix:Boolean;
protected var _far:Number;
public static var DEFAULT_VIEWPORT:Rectangle = new Rectangle(0, 0, 550, 400);
public static var DEFAULT_POS:Number3D = new Number3D(0, 0, -1000);
public static var DEFAULT_UP:Number3D = new Number3D(0, 1, 0);
private static var _flipY:Matrix3D = Matrix3D.scaleMatrix(1, -1, 1);
public function CameraObject3D(_arg1:Number=500, _arg2:Number=3){
this.x = DEFAULT_POS.x;
this.y = DEFAULT_POS.y;
this.z = DEFAULT_POS.z;
this.zoom = _arg2;
this.focus = _arg1;
this.eye = Matrix3D.IDENTITY;
this.viewport = DEFAULT_VIEWPORT;
this.sort = true;
_ortho = false;
_orthoScaleMatrix = Matrix3D.scaleMatrix(1, 1, 1);
if (Papervision3D.useRIGHTHANDED){
DEFAULT_UP.y = -1;
this.yUP = false;
this.lookAt(DisplayObject3D.ZERO);
} else {
this.yUP = true;
};
}
public function get target():DisplayObject3D{
return (_target);
}
public function get useProjectionMatrix():Boolean{
return (_useProjectionMatrix);
}
public function set fov(_arg1:Number):void{
if (((!(viewport)) || (viewport.isEmpty()))){
PaperLogger.warning("CameraObject3D#viewport not set, can't set fov!");
return;
};
var _local2:Number = 0;
var _local3:Number = 0;
var _local4:Number = 0;
if (_target){
_local2 = _target.world.n14;
_local3 = _target.world.n24;
_local4 = _target.world.n34;
};
var _local5:Number = (viewport.height / 2);
var _local6:Number = ((_arg1 / 2) * (Math.PI / 180));
this.focus = ((_local5 / Math.tan(_local6)) / this.zoom);
}
public function pan(_arg1:Number):void{
}
public function get far():Number{
return (_far);
}
public function set target(_arg1:DisplayObject3D):void{
_target = _arg1;
}
public function projectFaces(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{
return (0);
}
public function get useCulling():Boolean{
return (_useCulling);
}
public function set far(_arg1:Number):void{
if (_arg1 > this.focus){
_far = _arg1;
};
}
public function get near():Number{
return (this.focus);
}
public function transformView(_arg1:Matrix3D=null):void{
if (this.yUP){
eye.calculateMultiply(((_arg1) || (this.transform)), _flipY);
eye.invert();
} else {
eye.calculateInverse(((_arg1) || (this.transform)));
};
}
public function set useProjectionMatrix(_arg1:Boolean):void{
_useProjectionMatrix = _arg1;
}
public function tilt(_arg1:Number):void{
}
override public function lookAt(_arg1:DisplayObject3D, _arg2:Number3D=null):void{
if (this.yUP){
super.lookAt(_arg1, _arg2);
} else {
super.lookAt(_arg1, ((_arg2) || (DEFAULT_UP)));
};
}
public function get ortho():Boolean{
return (_ortho);
}
public function orbit(_arg1:Number, _arg2:Number, _arg3:Boolean=true, _arg4:DisplayObject3D=null):void{
}
public function get fov():Number{
if (((!(viewport)) || (viewport.isEmpty()))){
PaperLogger.warning("CameraObject3D#viewport not set, can't calculate fov!");
return (NaN);
};
var _local1:Number = 0;
var _local2:Number = 0;
var _local3:Number = 0;
if (_target){
_local1 = _target.world.n14;
_local2 = _target.world.n24;
_local3 = _target.world.n34;
};
var _local4:Number = (this.x - _local1);
var _local5:Number = (this.y - _local2);
var _local6:Number = (this.z - _local3);
var _local7:Number = this.focus;
var _local8:Number = this.zoom;
var _local9:Number = (Math.sqrt((((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6))) + _local7);
var _local10:Number = (viewport.height / 2);
var _local11:Number = (180 / Math.PI);
return (((Math.atan(((((_local9 / _local7) / _local8) * _local10) / _local9)) * _local11) * 2));
}
public function set near(_arg1:Number):void{
if (_arg1 > 0){
this.focus = _arg1;
};
}
public function set useCulling(_arg1:Boolean):void{
_useCulling = _arg1;
}
public function set orthoScale(_arg1:Number):void{
_orthoScale = ((_arg1 > 0)) ? _arg1 : 0.0001;
_orthoScaleMatrix.n11 = _orthoScale;
_orthoScaleMatrix.n22 = _orthoScale;
_orthoScaleMatrix.n33 = _orthoScale;
}
public function unproject(_arg1:Number, _arg2:Number, _arg3:Number=0):Number3D{
var _local4:Number3D;
var _local5:Matrix3D;
var _local6:Array;
var _local7:Array;
var _local8:Array;
var _local9:Array;
var _local10:Array;
var _local11:Array;
var _local12:Number;
if (_useProjectionMatrix){
if (!viewport){
return (null);
};
_local5 = this.transform;
_local6 = [(-(viewport.width) / 2), (-(viewport.height) / 2), viewport.width, viewport.height];
_local7 = [_local5.n11, _local5.n21, _local5.n31, _local5.n41, _local5.n12, _local5.n22, _local5.n32, _local5.n42, _local5.n13, _local5.n23, _local5.n33, _local5.n43, _local5.n14, _local5.n24, _local5.n34, _local5.n44];
_local8 = new Array(16);
_local9 = new Array(4);
GLU.invertMatrix(_local7, _local7);
if (_ortho){
_local10 = new Array(16);
_local11 = new Array(16);
GLU.ortho(_local11, (viewport.width / 2), (-(viewport.width) / 2), (-(viewport.height) / 2), (viewport.height / 2), far, near);
GLU.scale(_local10, _orthoScale, _orthoScale, 1);
GLU.multMatrices(_local10, _local11, _local8);
} else {
GLU.perspective(_local8, fov, (viewport.width / viewport.height), -(near), -(far));
};
GLU.unProject(-(_arg1), _arg2, _arg3, _local7, _local8, _local6, _local9);
_local4 = new Number3D();
_local4.x = _local9[0];
_local4.y = _local9[1];
_local4.z = _local9[2];
} else {
_local12 = ((focus * zoom) / focus);
_local4 = new Number3D((_arg1 / _local12), ((yUP) ? -(_arg2) : _arg2 / _local12), focus);
Matrix3D.multiplyVector3x3(transform, _local4);
};
return (_local4);
}
public function set ortho(_arg1:Boolean):void{
_ortho = _arg1;
}
public function projectVertices(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{
return (0);
}
public function get orthoScale():Number{
return (_orthoScale);
}
}
}//package org.papervision3d.core.proto
Section 62
//DisplayObjectContainer3D (org.papervision3d.core.proto.DisplayObjectContainer3D)
package org.papervision3d.core.proto {
import org.papervision3d.objects.*;
import flash.events.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
public class DisplayObjectContainer3D extends EventDispatcher {
protected var _childrenByName:Object;
public var root:DisplayObjectContainer3D;
private var _childrenTotal:int;
protected var _children:Dictionary;
public function DisplayObjectContainer3D():void{
this._children = new Dictionary(false);
this._childrenByName = new Dictionary(true);
this._childrenTotal = 0;
}
private function findChildByName(_arg1:String, _arg2:DisplayObject3D=null):DisplayObject3D{
var _local3:DisplayObject3D;
var _local4:DisplayObject3D;
_arg2 = ((_arg2) || (DisplayObject3D(this)));
if (!_arg2){
return (null);
};
if (_arg2.name == _arg1){
return (_arg2);
};
for each (_local3 in _arg2.children) {
_local4 = findChildByName(_arg1, _local3);
if (_local4){
return (_local4);
};
};
return (null);
}
public function getChildByName(_arg1:String, _arg2:Boolean=false):DisplayObject3D{
if (_arg2){
return (findChildByName(_arg1));
};
return (this._childrenByName[_arg1]);
}
override public function toString():String{
return (childrenList());
}
public function addChildren(_arg1:DisplayObject3D):DisplayObjectContainer3D{
var _local2:DisplayObject3D;
for each (_local2 in _arg1.children) {
_arg1.removeChild(_local2);
this.addChild(_local2);
};
return (this);
}
public function get numChildren():int{
return (this._childrenTotal);
}
public function removeChild(_arg1:DisplayObject3D):DisplayObject3D{
if (((_arg1) && (_children[_arg1]))){
delete _childrenByName[this._children[_arg1]];
delete _children[_arg1];
_arg1.parent = null;
_arg1.root = null;
_childrenTotal--;
return (_arg1);
};
return (null);
}
public function removeChildByName(_arg1:String):DisplayObject3D{
return (removeChild(getChildByName(_arg1)));
}
public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{
if (_arg1.parent){
PaperLogger.error("DisplayObjectContainer.addChild : DisplayObject3D already has a parent, ie is already added to scene.");
};
_arg2 = ((((_arg2) || (_arg1.name))) || (String(_arg1.id)));
this._children[_arg1] = _arg2;
this._childrenByName[_arg2] = _arg1;
this._childrenTotal++;
_arg1.parent = this;
_arg1.root = this.root;
return (_arg1);
}
public function childrenList():String{
var _local2:String;
var _local1 = "";
for (_local2 in this._children) {
_local1 = (_local1 + (_local2 + "\n"));
};
return (_local1);
}
public function get children():Object{
return (this._childrenByName);
}
}
}//package org.papervision3d.core.proto
Section 63
//GeometryObject3D (org.papervision3d.core.proto.GeometryObject3D)
package org.papervision3d.core.proto {
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import flash.events.*;
import flash.utils.*;
public class GeometryObject3D extends EventDispatcher {
protected var _boundingSphereDirty:Boolean;// = true
public var dirty:Boolean;
protected var _aabbDirty:Boolean;// = true
public var _ready:Boolean;// = false
protected var _boundingSphere:BoundingSphere;
public var faces:Array;
private var _numInstances:uint;// = 0
public var vertices:Array;
protected var _aabb:AxisAlignedBoundingBox;
public function GeometryObject3D():void{
dirty = true;
}
public function transformVertices(_arg1:Matrix3D):void{
var _local15:Vertex3D;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local2:Number = _arg1.n11;
var _local3:Number = _arg1.n12;
var _local4:Number = _arg1.n13;
var _local5:Number = _arg1.n21;
var _local6:Number = _arg1.n22;
var _local7:Number = _arg1.n23;
var _local8:Number = _arg1.n31;
var _local9:Number = _arg1.n32;
var _local10:Number = _arg1.n33;
var _local11:Number = _arg1.n14;
var _local12:Number = _arg1.n24;
var _local13:Number = _arg1.n34;
var _local14:int = vertices.length;
while ((_local15 = vertices[--_local14])) {
_local16 = _local15.x;
_local17 = _local15.y;
_local18 = _local15.z;
_local19 = ((((_local16 * _local2) + (_local17 * _local3)) + (_local18 * _local4)) + _local11);
_local20 = ((((_local16 * _local5) + (_local17 * _local6)) + (_local18 * _local7)) + _local12);
_local21 = ((((_local16 * _local8) + (_local17 * _local9)) + (_local18 * _local10)) + _local13);
_local15.x = _local19;
_local15.y = _local20;
_local15.z = _local21;
};
}
public function set ready(_arg1:Boolean):void{
if (_arg1){
createVertexNormals();
this.dirty = false;
};
_ready = _arg1;
}
public function flipFaces():void{
var _local1:Triangle3D;
var _local2:Vertex3D;
for each (_local1 in this.faces) {
_local2 = _local1.v0;
_local1.v0 = _local1.v2;
_local1.v2 = _local2;
_local1.createNormal();
};
this.ready = true;
}
private function createVertexNormals():void{
var _local2:Triangle3D;
var _local3:Vertex3D;
var _local1:Dictionary = new Dictionary(true);
for each (_local2 in faces) {
_local2.v0.connectedFaces[_local2] = _local2;
_local2.v1.connectedFaces[_local2] = _local2;
_local2.v2.connectedFaces[_local2] = _local2;
_local1[_local2.v0] = _local2.v0;
_local1[_local2.v1] = _local2.v1;
_local1[_local2.v2] = _local2.v2;
};
for each (_local3 in _local1) {
_local3.calculateNormal();
};
}
public function get boundingSphere():BoundingSphere{
if (_boundingSphereDirty){
_boundingSphere = BoundingSphere.getFromVertices(vertices);
_boundingSphereDirty = false;
};
return (_boundingSphere);
}
public function clone(_arg1:DisplayObject3D=null):GeometryObject3D{
var _local5:int;
var _local6:MaterialObject3D;
var _local7:Vertex3D;
var _local8:Triangle3D;
var _local9:Vertex3D;
var _local10:Vertex3D;
var _local11:Vertex3D;
var _local2:Dictionary = new Dictionary(true);
var _local3:Dictionary = new Dictionary(true);
var _local4:GeometryObject3D = new GeometryObject3D();
_local4.vertices = new Array();
_local4.faces = new Array();
_local5 = 0;
while (_local5 < this.vertices.length) {
_local7 = this.vertices[_local5];
_local3[_local7] = _local7.clone();
_local4.vertices.push(_local3[_local7]);
_local5++;
};
_local5 = 0;
while (_local5 < this.faces.length) {
_local8 = this.faces[_local5];
_local9 = _local3[_local8.v0];
_local10 = _local3[_local8.v1];
_local11 = _local3[_local8.v2];
_local4.faces.push(new Triangle3D(_arg1, [_local9, _local10, _local11], _local8.material, _local8.uv));
_local2[_local8.material] = _local8.material;
_local5++;
};
for each (_local6 in _local2) {
if (_local6){
_local6.registerObject(_arg1);
};
};
return (_local4);
}
public function get ready():Boolean{
return (_ready);
}
public function get aabb():AxisAlignedBoundingBox{
if (_aabbDirty){
_aabb = AxisAlignedBoundingBox.createFromVertices(vertices);
_aabbDirty = false;
};
return (_aabb);
}
}
}//package org.papervision3d.core.proto
Section 64
//LightObject3D (org.papervision3d.core.proto.LightObject3D)
package org.papervision3d.core.proto {
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.primitives.*;
public class LightObject3D extends DisplayObject3D {
public var flipped:Boolean;
public var lightMatrix:Matrix3D;
private var _showLight:Boolean;
private var displaySphere:Sphere;
public function LightObject3D(_arg1:Boolean=false, _arg2:Boolean=false){
this.lightMatrix = Matrix3D.IDENTITY;
this.showLight = _arg1;
this.flipped = _arg2;
}
public function get showLight():Boolean{
return (_showLight);
}
public function set showLight(_arg1:Boolean):void{
if (_showLight){
removeChild(displaySphere);
};
if (_arg1){
displaySphere = new Sphere(new WireframeMaterial(0xFFFF00), 10, 3, 2);
addChild(displaySphere);
};
_showLight = _arg1;
}
}
}//package org.papervision3d.core.proto
Section 65
//MaterialObject3D (org.papervision3d.core.proto.MaterialObject3D)
package org.papervision3d.core.proto {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.render.material.*;
import org.papervision3d.materials.*;
import flash.events.*;
import flash.utils.*;
import org.papervision3d.core.render.draw.*;
public class MaterialObject3D extends EventDispatcher implements ITriangleDrawer {
public var widthOffset:Number;// = 0
public var name:String;
public var heightOffset:Number;// = 0
public var fillAlpha:Number;// = 0
public var fillColor:Number;
public var id:Number;
protected var objects:Dictionary;
public var baked:Boolean;// = false
public var invisible:Boolean;// = false
public var smooth:Boolean;// = false
public var bitmap:BitmapData;
public var lineAlpha:Number;// = 0
public var lineColor:Number;
public var lineThickness:Number;// = 1
public var interactive:Boolean;// = false
public var oneSide:Boolean;// = true
public var opposite:Boolean;// = false
public var maxU:Number;
public var tiled:Boolean;// = false
public var maxV:Number;
public static var DEFAULT_COLOR:int = 0;
public static var DEBUG_COLOR:int = 0xFF00FF;
private static var _totalMaterialObjects:Number = 0;
public function MaterialObject3D(){
lineColor = DEFAULT_COLOR;
fillColor = DEFAULT_COLOR;
super();
this.id = _totalMaterialObjects++;
MaterialManager.registerMaterial(this);
objects = new Dictionary(true);
}
public function getObjectList():Dictionary{
return (objects);
}
override public function toString():String{
return (((((("[MaterialObject3D] bitmap:" + this.bitmap) + " lineColor:") + this.lineColor) + " fillColor:") + fillColor));
}
public function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void{
}
public function get doubleSided():Boolean{
return (!(this.oneSide));
}
public function unregisterObject(_arg1:DisplayObject3D):void{
if (((objects) && (objects[_arg1]))){
objects[_arg1] = null;
};
}
public function set doubleSided(_arg1:Boolean):void{
this.oneSide = !(_arg1);
}
public function registerObject(_arg1:DisplayObject3D):void{
objects[_arg1] = true;
}
public function updateBitmap():void{
}
public function clone():MaterialObject3D{
var _local1:MaterialObject3D = new MaterialObject3D();
_local1.copy(this);
return (_local1);
}
public function isUpdateable():Boolean{
return (!(baked));
}
public function copy(_arg1:MaterialObject3D):void{
this.bitmap = _arg1.bitmap;
this.smooth = _arg1.smooth;
this.lineColor = _arg1.lineColor;
this.lineAlpha = _arg1.lineAlpha;
this.fillColor = _arg1.fillColor;
this.fillAlpha = _arg1.fillAlpha;
this.oneSide = _arg1.oneSide;
this.opposite = _arg1.opposite;
this.invisible = _arg1.invisible;
this.name = _arg1.name;
this.maxU = _arg1.maxU;
this.maxV = _arg1.maxV;
}
public function destroy():void{
objects = null;
bitmap = null;
MaterialManager.unRegisterMaterial(this);
}
public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
}
public static function get DEFAULT():MaterialObject3D{
var _local1:MaterialObject3D = new WireframeMaterial();
_local1.lineColor = (0xFFFFFF * Math.random());
_local1.lineAlpha = 1;
_local1.fillColor = DEFAULT_COLOR;
_local1.fillAlpha = 1;
_local1.doubleSided = false;
return (_local1);
}
public static function get DEBUG():MaterialObject3D{
var _local1:MaterialObject3D = new (MaterialObject3D);
_local1.lineColor = (0xFFFFFF * Math.random());
_local1.lineAlpha = 1;
_local1.fillColor = DEBUG_COLOR;
_local1.fillAlpha = 0.37;
_local1.doubleSided = true;
return (_local1);
}
}
}//package org.papervision3d.core.proto
Section 66
//SceneObject3D (org.papervision3d.core.proto.SceneObject3D)
package org.papervision3d.core.proto {
import org.papervision3d.materials.utils.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.log.*;
import org.papervision3d.*;
public class SceneObject3D extends DisplayObjectContainer3D {
public var objects:Array;
public var materials:MaterialsList;
public function SceneObject3D(){
this.objects = new Array();
this.materials = new MaterialsList();
PaperLogger.info((((((Papervision3D.NAME + " ") + Papervision3D.VERSION) + " (") + Papervision3D.DATE) + ")\n"));
this.root = this;
}
override public function removeChild(_arg1:DisplayObject3D):DisplayObject3D{
super.removeChild(_arg1);
var _local2:int;
while (_local2 < this.objects.length) {
if (this.objects[_local2] === _arg1){
this.objects.splice(_local2, 1);
return (_arg1);
};
_local2++;
};
return (_arg1);
}
override public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{
var _local3:DisplayObject3D = super.addChild(_arg1, (_arg2) ? _arg2 : _arg1.name);
_arg1.scene = this;
_arg1.parent = null;
this.objects.push(_local3);
return (_local3);
}
}
}//package org.papervision3d.core.proto
Section 67
//AbstractRenderListItem (org.papervision3d.core.render.command.AbstractRenderListItem)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.display.*;
public class AbstractRenderListItem implements IRenderListItem {
public var screenZ:Number;
public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
}
}
}//package org.papervision3d.core.render.command
Section 68
//IRenderListItem (org.papervision3d.core.render.command.IRenderListItem)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.display.*;
public interface IRenderListItem {
function render(_arg1:RenderSessionData, _arg2:Graphics):void;
}
}//package org.papervision3d.core.render.command
Section 69
//RenderableListItem (org.papervision3d.core.render.command.RenderableListItem)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
public class RenderableListItem extends AbstractRenderListItem {
public var minX:Number;
public var minY:Number;
public var minZ:Number;
public var area:Number;
public var instance:DisplayObject3D;
public var renderableInstance:AbstractRenderable;
public var renderable:Class;
public var maxX:Number;
public var maxY:Number;
public var maxZ:Number;
public var quadrant:QuadTreeNode;
public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{
return (screenZ);
}
public function update():void{
}
public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{
return (_arg2);
}
public function quarter(_arg1:Number):Array{
return ([]);
}
}
}//package org.papervision3d.core.render.command
Section 70
//RenderLine (org.papervision3d.core.render.command.RenderLine)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.special.*;
public class RenderLine extends RenderableListItem implements IRenderListItem {
public var size:Number;
private var fbz:Number;
private var db:Number;
private var bzf:Number;
private var axf:Number;
public var v1:Vertex3DInstance;
private var dx:Number;
private var dy:Number;
private var faz:Number;
private var det:Number;
private var ayf:Number;
private var da:Number;
private var ax:Number;
private var ay:Number;
private var az:Number;
public var renderer:LineMaterial;
private var l1:Number2D;
private var l2:Number2D;
private var azf:Number;
private var bxf:Number;
public var cV:Vertex3DInstance;
private var bx:Number;
private var by:Number;
private var bz:Number;
public var length:Number;
private var xfocus:Number;
private var cp3d:Number3D;
private var byf:Number;
private var p:Number2D;
private var v:Number2D;
public var v0:Vertex3DInstance;
public var line:Line3D;
private var yfocus:Number;
private static var mouseVector:Number3D = Number3D.ZERO;
private static var lineVector:Number3D = Number3D.ZERO;
public function RenderLine(_arg1:Line3D){
this.renderable = Line3D;
this.renderableInstance = _arg1;
this.line = _arg1;
this.instance = _arg1.instance;
v0 = _arg1.v0.vertex3DInstance;
v1 = _arg1.v1.vertex3DInstance;
cV = _arg1.cV.vertex3DInstance;
p = new Number2D();
l1 = new Number2D();
l2 = new Number2D();
v = new Number2D();
cp3d = new Number3D();
}
override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
renderer.drawLine(this, _arg2, _arg1);
}
override public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{
ax = v0.x;
ay = v0.y;
az = v0.z;
bx = v1.x;
by = v1.y;
bz = v1.z;
if ((((ax == _arg1)) && ((ay == _arg2)))){
return (az);
};
if ((((bx == _arg1)) && ((by == _arg2)))){
return (bz);
};
dx = (bx - ax);
dy = (by - ay);
azf = (az / _arg3);
bzf = (bz / _arg3);
faz = (1 + azf);
fbz = (1 + bzf);
xfocus = _arg1;
yfocus = _arg2;
axf = ((ax * faz) - (_arg1 * azf));
bxf = ((bx * fbz) - (_arg1 * bzf));
ayf = ((ay * faz) - (_arg2 * azf));
byf = ((by * fbz) - (_arg2 * bzf));
det = ((dx * (axf - bxf)) + (dy * (ayf - byf)));
db = ((dx * (axf - _arg1)) + (dy * (ayf - _arg2)));
da = ((dx * (_arg1 - bxf)) + (dy * (_arg2 - byf)));
return ((((da * az) + (db * bz)) / det));
}
override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{
var _local3:Number;
var _local4:Number;
var _local5:Number;
if (renderer.interactive){
_local3 = line.size;
p.reset(_arg1.x, _arg1.y);
l1.reset(line.v0.vertex3DInstance.x, line.v0.vertex3DInstance.y);
l2.reset(line.v1.vertex3DInstance.x, line.v1.vertex3DInstance.y);
v.copyFrom(l2);
v.minusEq(l1);
_local4 = ((((p.x - l1.x) * (l2.x - l1.x)) + ((p.y - l1.y) * (l2.y - l1.y))) / ((v.x * v.x) + (v.y * v.y)));
if ((((_local4 > 0)) && ((_local4 < 1)))){
v.multiplyEq(_local4);
v.plusEq(l1);
v.minusEq(p);
_local5 = ((v.x * v.x) + (v.y * v.y));
if (_local5 < (_local3 * _local3)){
_arg2.displayObject3D = line.instance;
_arg2.material = renderer;
_arg2.renderable = line;
_arg2.hasHit = true;
cp3d.reset((line.v1.x - line.v0.x), (line.v1.y - line.v0.y), (line.v1.x - line.v0.x));
cp3d.x = (cp3d.x * _local4);
cp3d.y = (cp3d.y * _local4);
cp3d.z = (cp3d.z * _local4);
cp3d.x = (cp3d.x + line.v0.x);
cp3d.y = (cp3d.y + line.v0.y);
cp3d.z = (cp3d.z + line.v0.z);
_arg2.x = cp3d.x;
_arg2.y = cp3d.y;
_arg2.z = cp3d.z;
_arg2.u = 0;
_arg2.v = 0;
return (_arg2);
};
};
};
return (_arg2);
}
}
}//package org.papervision3d.core.render.command
Section 71
//RenderParticle (org.papervision3d.core.render.command.RenderParticle)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.special.*;
public class RenderParticle extends RenderableListItem implements IRenderListItem {
public var renderMat:ParticleMaterial;
public var particle:Particle;
public function RenderParticle(_arg1:Particle){
this.particle = _arg1;
this.renderableInstance = _arg1;
this.renderable = Particle;
this.instance = _arg1.instance;
}
override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
particle.material.drawParticle(particle, _arg2, _arg1);
}
override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{
renderMat = particle.material;
if (renderMat.interactive){
if (particle.renderRect.contains(_arg1.x, _arg1.y)){
_arg2.displayObject3D = particle.instance;
_arg2.material = renderMat;
_arg2.renderable = particle;
_arg2.hasHit = true;
_arg2.x = particle.x;
_arg2.y = particle.y;
_arg2.z = particle.z;
_arg2.u = 0;
_arg2.v = 0;
return (_arg2);
};
};
return (_arg2);
}
}
}//package org.papervision3d.core.render.command
Section 72
//RenderTriangle (org.papervision3d.core.render.command.RenderTriangle)
package org.papervision3d.core.render.command {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.*;
import org.papervision3d.core.render.draw.*;
public class RenderTriangle extends RenderableListItem implements IRenderListItem {
public var triangle:Triangle3D;
private var bzf:Number;
private var axf:Number;
private var det:Number;
private var v12:Vertex3DInstance;
private var faz:Number;
private var position:Number3D;
private var ayf:Number;
private var au:Number;
private var av:Number;
private var ax:Number;
private var ay:Number;
private var az:Number;
private var v20:Vertex3DInstance;
private var fbz:Number;
private var azf:Number;
private var bu:Number;
private var bv:Number;
private var bx:Number;
private var by:Number;
private var bz:Number;
private var fcz:Number;
private var uv01:NumberUV;
private var cu:Number;
private var cv:Number;
private var cx:Number;
private var cy:Number;
private var cz:Number;
public var v0:Vertex3DInstance;
public var v1:Vertex3DInstance;
private var da:Number;
private var db:Number;
private var dc:Number;
public var container:Sprite;
private var uv12:NumberUV;
public var v2:Vertex3DInstance;
private var cxf:Number;
private var uv20:NumberUV;
protected var vx0:Vertex3DInstance;
public var uv0:NumberUV;
public var uv1:NumberUV;
public var uv2:NumberUV;
protected var vx1:Vertex3DInstance;
protected var vx2:Vertex3DInstance;
public var renderer:ITriangleDrawer;
private var cyf:Number;
private var czf:Number;
private var bxf:Number;
protected var vPointL:Vertex3DInstance;
public var renderMat:MaterialObject3D;
private var byf:Number;
private var v01:Vertex3DInstance;
public var create:Function;
protected static var resPA:Vertex3DInstance = new Vertex3DInstance();
protected static var resBA:Vertex3DInstance = new Vertex3DInstance();
protected static var vPoint:Vertex3DInstance = new Vertex3DInstance();
protected static var resRA:Vertex3DInstance = new Vertex3DInstance();
public function RenderTriangle(_arg1:Triangle3D):void{
position = new Number3D();
super();
this.triangle = _arg1;
this.instance = _arg1.instance;
renderableInstance = _arg1;
renderable = Triangle3D;
this.v0 = _arg1.v0.vertex3DInstance;
this.v1 = _arg1.v1.vertex3DInstance;
this.v2 = _arg1.v2.vertex3DInstance;
this.uv0 = _arg1.uv0;
this.uv1 = _arg1.uv1;
this.uv2 = _arg1.uv2;
this.renderer = _arg1.material;
update();
}
private function deepHitTest(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:RenderHitData):RenderHitData{
var _local44:MovieMaterial;
var _local45:Rectangle;
var _local4:Vertex3DInstance = _arg1.v0.vertex3DInstance;
var _local5:Vertex3DInstance = _arg1.v1.vertex3DInstance;
var _local6:Vertex3DInstance = _arg1.v2.vertex3DInstance;
var _local7:Number = (_local6.x - _local4.x);
var _local8:Number = (_local6.y - _local4.y);
var _local9:Number = (_local5.x - _local4.x);
var _local10:Number = (_local5.y - _local4.y);
var _local11:Number = (_arg2.x - _local4.x);
var _local12:Number = (_arg2.y - _local4.y);
var _local13:Number = ((_local7 * _local7) + (_local8 * _local8));
var _local14:Number = ((_local7 * _local9) + (_local8 * _local10));
var _local15:Number = ((_local7 * _local11) + (_local8 * _local12));
var _local16:Number = ((_local9 * _local9) + (_local10 * _local10));
var _local17:Number = ((_local9 * _local11) + (_local10 * _local12));
var _local18:Number = (1 / ((_local13 * _local16) - (_local14 * _local14)));
var _local19:Number = (((_local16 * _local15) - (_local14 * _local17)) * _local18);
var _local20:Number = (((_local13 * _local17) - (_local14 * _local15)) * _local18);
var _local21:Number = (_arg1.v2.x - _arg1.v0.x);
var _local22:Number = (_arg1.v2.y - _arg1.v0.y);
var _local23:Number = (_arg1.v2.z - _arg1.v0.z);
var _local24:Number = (_arg1.v1.x - _arg1.v0.x);
var _local25:Number = (_arg1.v1.y - _arg1.v0.y);
var _local26:Number = (_arg1.v1.z - _arg1.v0.z);
var _local27:Number = ((_arg1.v0.x + (_local21 * _local19)) + (_local24 * _local20));
var _local28:Number = ((_arg1.v0.y + (_local22 * _local19)) + (_local25 * _local20));
var _local29:Number = ((_arg1.v0.z + (_local23 * _local19)) + (_local26 * _local20));
var _local30:Array = _arg1.uv;
var _local31:Number = _local30[0].u;
var _local32:Number = _local30[1].u;
var _local33:Number = _local30[2].u;
var _local34:Number = _local30[0].v;
var _local35:Number = _local30[1].v;
var _local36:Number = _local30[2].v;
var _local37:Number = ((((_local32 - _local31) * _local20) + ((_local33 - _local31) * _local19)) + _local31);
var _local38:Number = ((((_local35 - _local34) * _local20) + ((_local36 - _local34) * _local19)) + _local34);
if (triangle.material){
renderMat = _arg1.material;
} else {
renderMat = _arg1.instance.material;
};
var _local39:BitmapData = renderMat.bitmap;
var _local40:Number = 1;
var _local41:Number = 1;
var _local42:Number = 0;
var _local43:Number = 0;
if ((renderMat is MovieMaterial)){
_local44 = (renderMat as MovieMaterial);
_local45 = _local44.rect;
if (_local45){
_local42 = _local45.x;
_local43 = _local45.y;
_local40 = _local45.width;
_local41 = _local45.height;
};
} else {
if (_local39){
_local40 = (BitmapMaterial.AUTO_MIP_MAPPING) ? renderMat.widthOffset : _local39.width;
_local41 = (BitmapMaterial.AUTO_MIP_MAPPING) ? renderMat.heightOffset : _local39.height;
};
};
_arg3.displayObject3D = _arg1.instance;
_arg3.material = renderMat;
_arg3.renderable = _arg1;
_arg3.hasHit = true;
position.x = _local27;
position.y = _local28;
position.z = _local29;
Matrix3D.multiplyVector(_arg1.instance.world, position);
_arg3.x = position.x;
_arg3.y = position.y;
_arg3.z = position.z;
_arg3.u = ((_local37 * _local40) + _local42);
_arg3.v = ((_local41 - (_local38 * _local41)) + _local43);
return (_arg3);
}
override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{
renderMat = triangle.material;
if (!renderMat){
renderMat = triangle.instance.material;
};
if (((renderMat) && (renderMat.interactive))){
vPointL = RenderTriangle.vPoint;
vPointL.x = _arg1.x;
vPointL.y = _arg1.y;
vx0 = triangle.v0.vertex3DInstance;
vx1 = triangle.v1.vertex3DInstance;
vx2 = triangle.v2.vertex3DInstance;
if (sameSide(vPointL, vx0, vx1, vx2)){
if (sameSide(vPointL, vx1, vx0, vx2)){
if (sameSide(vPointL, vx2, vx0, vx1)){
return (deepHitTest(triangle, vPointL, _arg2));
};
};
};
};
return (_arg2);
}
public function fivepointcut(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Vertex3DInstance, _arg6:NumberUV, _arg7:NumberUV, _arg8:NumberUV, _arg9:NumberUV, _arg10:NumberUV):Array{
if (_arg1.distanceSqr(_arg4) < _arg2.distanceSqr(_arg5)){
return ([create(renderableInstance, renderer, _arg1, _arg2, _arg4, _arg6, _arg7, _arg9), create(renderableInstance, renderer, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9), create(renderableInstance, renderer, _arg1, _arg4, _arg5, _arg6, _arg9, _arg10)]);
};
return ([create(renderableInstance, renderer, _arg1, _arg2, _arg5, _arg6, _arg7, _arg10), create(renderableInstance, renderer, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9), create(renderableInstance, renderer, _arg2, _arg4, _arg5, _arg7, _arg9, _arg10)]);
}
override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
renderer.drawTriangle(this, _arg2, _arg1);
}
final override public function quarter(_arg1:Number):Array{
if (area < 20){
return (null);
};
v01 = Vertex3DInstance.median(v0, v1, _arg1);
v12 = Vertex3DInstance.median(v1, v2, _arg1);
v20 = Vertex3DInstance.median(v2, v0, _arg1);
uv01 = NumberUV.median(uv0, uv1);
uv12 = NumberUV.median(uv1, uv2);
uv20 = NumberUV.median(uv2, uv0);
return ([create(renderableInstance, renderer, v0, v01, v20, uv0, uv01, uv20), create(renderableInstance, renderer, v1, v12, v01, uv1, uv12, uv01), create(renderableInstance, renderer, v2, v20, v12, uv2, uv20, uv12), create(renderableInstance, renderer, v01, v12, v20, uv01, uv12, uv20)]);
}
final override public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{
ax = v0.x;
ay = v0.y;
az = v0.z;
bx = v1.x;
by = v1.y;
bz = v1.z;
cx = v2.x;
cy = v2.y;
cz = v2.z;
if ((((ax == _arg1)) && ((ay == _arg2)))){
return (az);
};
if ((((bx == _arg1)) && ((by == _arg2)))){
return (bz);
};
if ((((cx == _arg1)) && ((cy == _arg2)))){
return (cz);
};
azf = (az / _arg3);
bzf = (bz / _arg3);
czf = (cz / _arg3);
faz = (1 + azf);
fbz = (1 + bzf);
fcz = (1 + czf);
axf = ((ax * faz) - (_arg1 * azf));
bxf = ((bx * fbz) - (_arg1 * bzf));
cxf = ((cx * fcz) - (_arg1 * czf));
ayf = ((ay * faz) - (_arg2 * azf));
byf = ((by * fbz) - (_arg2 * bzf));
cyf = ((cy * fcz) - (_arg2 * czf));
det = (((axf * (byf - cyf)) + (bxf * (cyf - ayf))) + (cxf * (ayf - byf)));
da = (((_arg1 * (byf - cyf)) + (bxf * (cyf - _arg2))) + (cxf * (_arg2 - byf)));
db = (((axf * (_arg2 - cyf)) + (_arg1 * (cyf - ayf))) + (cxf * (ayf - _arg2)));
dc = (((axf * (byf - _arg2)) + (bxf * (_arg2 - ayf))) + (_arg1 * (ayf - byf)));
return (((((da * az) + (db * bz)) + (dc * cz)) / det));
}
override public function update():void{
if (v0.x > v1.x){
if (v0.x > v2.x){
maxX = v0.x;
} else {
maxX = v2.x;
};
} else {
if (v1.x > v2.x){
maxX = v1.x;
} else {
maxX = v2.x;
};
};
if (v0.x < v1.x){
if (v0.x < v2.x){
minX = v0.x;
} else {
minX = v2.x;
};
} else {
if (v1.x < v2.x){
minX = v1.x;
} else {
minX = v2.x;
};
};
if (v0.y > v1.y){
if (v0.y > v2.y){
maxY = v0.y;
} else {
maxY = v2.y;
};
} else {
if (v1.y > v2.y){
maxY = v1.y;
} else {
maxY = v2.y;
};
};
if (v0.y < v1.y){
if (v0.y < v2.y){
minY = v0.y;
} else {
minY = v2.y;
};
} else {
if (v1.y < v2.y){
minY = v1.y;
} else {
minY = v2.y;
};
};
if (v0.z > v1.z){
if (v0.z > v2.z){
maxZ = v0.z;
} else {
maxZ = v2.z;
};
} else {
if (v1.z > v2.z){
maxZ = v1.z;
} else {
maxZ = v2.z;
};
};
if (v0.z < v1.z){
if (v0.z < v2.z){
minZ = v0.z;
} else {
minZ = v2.z;
};
} else {
if (v1.z < v2.z){
minZ = v1.z;
} else {
minZ = v2.z;
};
};
screenZ = (((v0.z + v1.z) + v2.z) / 3);
area = (0.5 * (((v0.x * (v2.y - v1.y)) + (v1.x * (v0.y - v2.y))) + (v2.x * (v1.y - v0.y))));
}
public function sameSide(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{
Vertex3DInstance.subTo(_arg4, _arg3, resBA);
Vertex3DInstance.subTo(_arg1, _arg3, resPA);
Vertex3DInstance.subTo(_arg2, _arg3, resRA);
return (((Vertex3DInstance.cross(resBA, resPA) * Vertex3DInstance.cross(resBA, resRA)) >= 0));
}
}
}//package org.papervision3d.core.render.command
Section 73
//RenderVectorShape (org.papervision3d.core.render.command.RenderVectorShape)
package org.papervision3d.core.render.command {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.objects.special.commands.*;
public class RenderVectorShape extends RenderableListItem implements IRenderListItem {
public var renderer:VectorShapeMaterial;
public var vectorShape:VectorShape3D;
public function RenderVectorShape(_arg1:VectorShape3D){
this.vectorShape = _arg1;
this.renderable = VectorShapeRenderable;
this.renderableInstance = new VectorShapeRenderable(_arg1, this);
super();
}
override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{
if (!renderer.interactive){
return (_arg2);
};
var _local3:VectorShapeHitTest = VectorShapeHitTest.instance;
var _local4:Graphics = _local3.graphics;
_local4.clear();
_local4.beginFill(0xFF0000);
var _local5:Boolean;
var _local6:int;
while (_local6 < vectorShape.graphicsCommands.length) {
_local5 = IVectorShape(vectorShape.graphicsCommands[_local6]).draw(_local4, _local5);
_local6++;
};
if (_local3.hitTestPoint(_arg1.x, _arg1.y, true)){
_arg2.displayObject3D = vectorShape;
_arg2.material = renderer;
_arg2.hasHit = true;
_arg2.x = vectorShape.x;
_arg2.y = vectorShape.y;
_arg2.z = vectorShape.z;
_arg2.u = 0;
_arg2.v = 0;
};
return (_arg2);
}
override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
renderer.drawShape(vectorShape, _arg2, _arg1);
}
}
}//package org.papervision3d.core.render.command
Section 74
//VectorShapeHitTest (org.papervision3d.core.render.command.VectorShapeHitTest)
package org.papervision3d.core.render.command {
import org.papervision3d.view.*;
import flash.display.*;
import flash.events.*;
public class VectorShapeHitTest extends Sprite {
private var viewport:Viewport3D;
private static var _instance:VectorShapeHitTest;
private function onStageResized(_arg1:Event):void{
_instance.x = viewport.containerSprite.x;
_instance.y = viewport.containerSprite.y;
}
override public function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean{
if (viewport){
return (super.hitTestPoint((_arg1 + viewport.containerSprite.x), (_arg2 + viewport.containerSprite.y), _arg3));
};
return (super.hitTestPoint(_arg1, _arg2, false));
}
public function assignViewport(_arg1:Viewport3D):void{
var viewport = _arg1;
instance.viewport = viewport;
instance.x = viewport.containerSprite.x;
instance.y = viewport.containerSprite.y;
viewport.addChild(_instance);
try {
viewport.stage.addEventListener(Event.RESIZE, onStageResized);
} catch(e:Error) {
};
}
public static function get instance():VectorShapeHitTest{
if (_instance == null){
_instance = new (VectorShapeHitTest);
};
_instance.alpha = 0;
_instance.mouseEnabled = false;
return (_instance);
}
}
}//package org.papervision3d.core.render.command
Section 75
//QuadTree (org.papervision3d.core.render.data.QuadTree)
package org.papervision3d.core.render.data {
import org.papervision3d.core.render.command.*;
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.clipping.draw.*;
public final class QuadTree {
private var _root:QuadTreeNode;
private var _rect:RectangleClipping;
private var _result:Array;
private var _maxlevel:uint;// = 4
private var _maxX:Number;
private var _maxY:Number;
private var _child:RenderableListItem;
private var _children:Array;
private var _minX:Number;
private var _minY:Number;
private var i:int;
private var _clip:Clipping;
private var _center:Array;
private var _except:DisplayObject3D;
public function get maxLevel():uint{
return (_maxlevel);
}
public function remove(_arg1:RenderableListItem):void{
_center = _arg1.quadrant.center;
_center.splice(_center.indexOf(_arg1), 1);
}
public function set maxLevel(_arg1:uint):void{
_maxlevel = _arg1;
if (_root){
_root.maxlevel = _maxlevel;
};
}
public function getOverlaps(_arg1:RenderableListItem, _arg2:DisplayObject3D=null):Array{
_result = [];
_minX = _arg1.minX;
_minY = _arg1.minY;
_maxX = _arg1.maxX;
_maxY = _arg1.maxY;
_except = _arg2;
getList(_arg1.quadrant);
getParent(_arg1.quadrant);
return (_result);
}
public function get clip():Clipping{
return (_clip);
}
public function render(_arg1:RenderSessionData, _arg2:Graphics):void{
_root.render(-(Infinity), _arg1, _arg2);
}
public function list():Array{
_result = [];
_minX = -1000000;
_minY = -1000000;
_maxX = 1000000;
_maxY = 1000000;
_except = null;
getList(_root);
return (_result);
}
public function getRoot():QuadTreeNode{
return (_root);
}
private function getList(_arg1:QuadTreeNode):void{
if (!_arg1){
return;
};
if (((_arg1.onlysourceFlag) && ((_except == _arg1.onlysource)))){
return;
};
if (_minX < _arg1.xdiv){
if (((_arg1.lefttopFlag) && ((_minY < _arg1.ydiv)))){
getList(_arg1.lefttop);
};
if (((_arg1.leftbottomFlag) && ((_maxY > _arg1.ydiv)))){
getList(_arg1.leftbottom);
};
};
if (_maxX > _arg1.xdiv){
if (((_arg1.righttopFlag) && ((_minY < _arg1.ydiv)))){
getList(_arg1.righttop);
};
if (((_arg1.rightbottomFlag) && ((_maxY > _arg1.ydiv)))){
getList(_arg1.rightbottom);
};
};
_children = _arg1.center;
if (_children != null){
i = _children.length;
while (i--) {
_child = _children[i];
if ((((((((((((_except == null)) || (!((_child.instance == _except))))) && ((_child.maxX > _minX)))) && ((_child.minX < _maxX)))) && ((_child.maxY > _minY)))) && ((_child.minY < _maxY)))){
_result.push(_child);
};
};
};
}
private function getParent(_arg1:QuadTreeNode=null):void{
if (!_arg1){
return;
};
_arg1 = _arg1.parent;
if ((((_arg1 == null)) || (((_arg1.onlysourceFlag) && ((_except == _arg1.onlysource)))))){
return;
};
_children = _arg1.center;
if (_children != null){
i = _children.length;
while (i--) {
_child = _children[i];
if ((((((((((((_except == null)) || (!((_child.instance == _except))))) && ((_child.maxX > _minX)))) && ((_child.minX < _maxX)))) && ((_child.maxY > _minY)))) && ((_child.minY < _maxY)))){
_result.push(_child);
};
};
};
getParent(_arg1);
}
public function add(_arg1:RenderableListItem):void{
if (_clip.check(_arg1)){
_root.push(_arg1);
};
}
public function set clip(_arg1:Clipping):void{
_clip = _arg1;
_rect = _clip.asRectangleClipping();
if (!_root){
_root = new QuadTreeNode(((_rect.minX + _rect.maxX) / 2), ((_rect.minY + _rect.maxY) / 2), (_rect.maxX - _rect.minX), (_rect.maxY - _rect.minY), 0, null, _maxlevel);
} else {
_root.reset(((_rect.minX + _rect.maxX) / 2), ((_rect.minY + _rect.maxY) / 2), (_rect.maxX - _rect.minX), (_rect.maxY - _rect.minY), _maxlevel);
};
}
}
}//package org.papervision3d.core.render.data
Section 76
//QuadTreeNode (org.papervision3d.core.render.data.QuadTreeNode)
package org.papervision3d.core.render.data {
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
public final class QuadTreeNode {
public var parent:QuadTreeNode;
public var create:Function;
private var level:int;
public var righttopFlag:Boolean;
public var hasContent:Boolean;// = false
public var rightbottom:QuadTreeNode;
public var righttop:QuadTreeNode;
public var rightbottomFlag:Boolean;
public var onlysource:DisplayObject3D;
public var xdiv:Number;
private var halfheight:Number;
public var center:Array;
public var maxlevel:int;// = 4
private var render_center_length:int;// = -1
public var onlysourceFlag:Boolean;// = true
private var render_center_index:int;// = -1
private var halfwidth:Number;
public var lefttop:QuadTreeNode;
public var ydiv:Number;
public var leftbottom:QuadTreeNode;
public var lefttopFlag:Boolean;
public var leftbottomFlag:Boolean;
public function QuadTreeNode(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:QuadTreeNode=null, _arg7:uint=4){
this.level = _arg5;
this.xdiv = _arg1;
this.ydiv = _arg2;
halfwidth = (_arg3 / 2);
halfheight = (_arg4 / 2);
this.parent = _arg6;
this.maxlevel = _arg7;
}
public function reset(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:uint):void{
this.xdiv = _arg1;
this.ydiv = _arg2;
halfwidth = (_arg3 / 2);
halfheight = (_arg4 / 2);
lefttopFlag = false;
leftbottomFlag = false;
righttopFlag = false;
rightbottomFlag = false;
onlysourceFlag = true;
onlysource = null;
render_center_length = -1;
render_center_index = -1;
hasContent = false;
maxlevel = _arg5;
}
public function push(_arg1:RenderableListItem):void{
hasContent = true;
if (onlysourceFlag){
if (((!((onlysource == null))) && (!((onlysource == _arg1.instance))))){
onlysourceFlag = false;
};
onlysource = _arg1.instance;
};
if (level < maxlevel){
if (_arg1.maxX <= xdiv){
if (_arg1.maxY <= ydiv){
if (lefttop == null){
lefttopFlag = true;
lefttop = new QuadTreeNode((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel);
} else {
if (!lefttopFlag){
lefttopFlag = true;
lefttop.reset((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, maxlevel);
};
};
lefttop.push(_arg1);
return;
} else {
if (_arg1.minY >= ydiv){
if (leftbottom == null){
leftbottomFlag = true;
leftbottom = new QuadTreeNode((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel);
} else {
if (!leftbottomFlag){
leftbottomFlag = true;
leftbottom.reset((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, maxlevel);
};
};
leftbottom.push(_arg1);
return;
};
};
} else {
if (_arg1.minX >= xdiv){
if (_arg1.maxY <= ydiv){
if (righttop == null){
righttopFlag = true;
righttop = new QuadTreeNode((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel);
} else {
if (!righttopFlag){
righttopFlag = true;
righttop.reset((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, maxlevel);
};
};
righttop.push(_arg1);
return;
} else {
if (_arg1.minY >= ydiv){
if (rightbottom == null){
rightbottomFlag = true;
rightbottom = new QuadTreeNode((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel);
} else {
if (!rightbottomFlag){
rightbottomFlag = true;
rightbottom.reset((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, maxlevel);
};
};
rightbottom.push(_arg1);
return;
};
};
};
};
};
if (center == null){
center = new Array();
};
center.push(_arg1);
_arg1.quadrant = this;
}
public function render(_arg1:Number, _arg2:RenderSessionData, _arg3:Graphics):void{
var _local4:RenderableListItem;
if (render_center_length == -1){
if (center != null){
render_center_length = center.length;
if (render_center_length > 1){
center.sortOn("screenZ", (Array.DESCENDING | Array.NUMERIC));
};
} else {
render_center_length = 0;
};
render_center_index = 0;
};
while (render_center_index < render_center_length) {
_local4 = center[render_center_index];
if (_local4.screenZ < _arg1){
break;
};
render_other(_local4.screenZ, _arg2, _arg3);
_local4.render(_arg2, _arg3);
_arg2.viewPort.lastRenderList.push(_local4);
render_center_index++;
};
if (render_center_index == render_center_length){
center = null;
};
render_other(_arg1, _arg2, _arg3);
}
public function getRect():Rectangle{
return (new Rectangle(xdiv, ydiv, (halfwidth * 2), (halfheight * 2)));
}
private function render_other(_arg1:Number, _arg2:RenderSessionData, _arg3:Graphics):void{
if (lefttopFlag){
lefttop.render(_arg1, _arg2, _arg3);
};
if (leftbottomFlag){
leftbottom.render(_arg1, _arg2, _arg3);
};
if (righttopFlag){
righttop.render(_arg1, _arg2, _arg3);
};
if (rightbottomFlag){
rightbottom.render(_arg1, _arg2, _arg3);
};
}
}
}//package org.papervision3d.core.render.data
Section 77
//RenderHitData (org.papervision3d.core.render.data.RenderHitData)
package org.papervision3d.core.render.data {
import org.papervision3d.core.proto.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
public class RenderHitData {
public var y:Number;
public var z:Number;
public var endTime:int;// = 0
public var startTime:int;// = 0
public var displayObject3D:DisplayObject3D;
public var hasHit:Boolean;// = false
public var material:MaterialObject3D;
public var renderable:IRenderable;
public var u:Number;
public var v:Number;
public var x:Number;
public function RenderHitData():void{
}
public function clear():void{
startTime = 0;
endTime = 0;
hasHit = false;
displayObject3D = null;
material = null;
renderable = null;
u = 0;
v = 0;
x = 0;
y = 0;
z = 0;
}
public function clone():RenderHitData{
var _local1:RenderHitData = new RenderHitData();
_local1.startTime = startTime;
_local1.endTime = endTime;
_local1.hasHit = hasHit;
_local1.displayObject3D = displayObject3D;
_local1.material = material;
_local1.renderable = renderable;
_local1.u = u;
_local1.v = v;
_local1.x = x;
_local1.y = y;
_local1.z = z;
return (_local1);
}
public function toString():String{
return (((displayObject3D + " ") + renderable));
}
}
}//package org.papervision3d.core.render.data
Section 78
//RenderSessionData (org.papervision3d.core.render.data.RenderSessionData)
package org.papervision3d.core.render.data {
import org.papervision3d.core.proto.*;
import org.papervision3d.view.*;
import flash.display.*;
import org.papervision3d.core.culling.*;
import org.papervision3d.core.render.*;
import org.papervision3d.core.clipping.*;
public class RenderSessionData {
public var container:Sprite;
public var renderer:IRenderEngine;
public var particleCuller:IParticleCuller;
public var viewPort:Viewport3D;
public var triangleCuller:ITriangleCuller;
public var clipping:DefaultClipping;
public var scene:SceneObject3D;
public var renderStatistics:RenderStatistics;
public var renderObjects:Array;
public var camera:CameraObject3D;
public var renderLayers:Array;
public var quadrantTree:QuadTree;
public var sorted:Boolean;
public function RenderSessionData():void{
this.renderStatistics = new RenderStatistics();
}
public function destroy():void{
triangleCuller = null;
particleCuller = null;
viewPort = null;
container = null;
scene = null;
camera = null;
renderer = null;
renderStatistics = null;
renderObjects = null;
renderLayers = null;
clipping = null;
quadrantTree = null;
}
public function clone():RenderSessionData{
var _local1:RenderSessionData = new RenderSessionData();
_local1.triangleCuller = triangleCuller;
_local1.particleCuller = particleCuller;
_local1.viewPort = viewPort;
_local1.container = container;
_local1.scene = scene;
_local1.camera = camera;
_local1.renderer = renderer;
_local1.renderStatistics = renderStatistics.clone();
_local1.clipping = clipping;
_local1.quadrantTree = quadrantTree;
return (_local1);
}
}
}//package org.papervision3d.core.render.data
Section 79
//RenderStatistics (org.papervision3d.core.render.data.RenderStatistics)
package org.papervision3d.core.render.data {
public class RenderStatistics {
public var renderTime:int;// = 0
public var culledObjects:int;// = 0
public var shadedTriangles:int;// = 0
public var culledParticles:int;// = 0
public var culledTriangles:int;// = 0
public var triangles:int;// = 0
public var particles:int;// = 0
public var rendered:int;// = 0
public var projectionTime:int;// = 0
public var filteredObjects:int;// = 0
public var lines:int;// = 0
public function clear():void{
projectionTime = 0;
renderTime = 0;
rendered = 0;
particles = 0;
triangles = 0;
culledTriangles = 0;
culledParticles = 0;
lines = 0;
shadedTriangles = 0;
filteredObjects = 0;
culledObjects = 0;
}
public function clone():RenderStatistics{
var _local1:RenderStatistics = new RenderStatistics();
_local1.projectionTime = projectionTime;
_local1.renderTime = renderTime;
_local1.rendered = rendered;
_local1.particles = particles;
_local1.triangles = triangles;
_local1.culledTriangles = culledTriangles;
_local1.lines = lines;
_local1.shadedTriangles = shadedTriangles;
_local1.filteredObjects = filteredObjects;
_local1.culledObjects = culledObjects;
return (_local1);
}
public function toString():String{
return (new String((((((((((((((((((("ProjectionTime:" + projectionTime) + " RenderTime:") + renderTime) + " Particles:") + particles) + " CulledParticles :") + culledParticles) + " Triangles:") + triangles) + " ShadedTriangles :") + shadedTriangles) + " CulledTriangles:") + culledTriangles) + " FilteredObjects:") + filteredObjects) + " CulledObjects:") + culledObjects) + "")));
}
}
}//package org.papervision3d.core.render.data
Section 80
//ILineDrawer (org.papervision3d.core.render.draw.ILineDrawer)
package org.papervision3d.core.render.draw {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
public interface ILineDrawer {
function drawLine(_arg1:RenderLine, _arg2:Graphics, _arg3:RenderSessionData):void;
}
}//package org.papervision3d.core.render.draw
Section 81
//IParticleDrawer (org.papervision3d.core.render.draw.IParticleDrawer)
package org.papervision3d.core.render.draw {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.core.geom.renderables.*;
public interface IParticleDrawer {
function drawParticle(_arg1:Particle, _arg2:Graphics, _arg3:RenderSessionData):void;
function updateRenderRect(_arg1:Particle):void;
}
}//package org.papervision3d.core.render.draw
Section 82
//ITriangleDrawer (org.papervision3d.core.render.draw.ITriangleDrawer)
package org.papervision3d.core.render.draw {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
public interface ITriangleDrawer {
function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void;
function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void;
}
}//package org.papervision3d.core.render.draw
Section 83
//BasicRenderFilter (org.papervision3d.core.render.filter.BasicRenderFilter)
package org.papervision3d.core.render.filter {
public class BasicRenderFilter implements IRenderFilter {
public function filter(_arg1:Array):int{
return (0);
}
}
}//package org.papervision3d.core.render.filter
Section 84
//IRenderFilter (org.papervision3d.core.render.filter.IRenderFilter)
package org.papervision3d.core.render.filter {
public interface IRenderFilter {
function filter(_arg1:Array):int;
}
}//package org.papervision3d.core.render.filter
Section 85
//IUpdateAfterMaterial (org.papervision3d.core.render.material.IUpdateAfterMaterial)
package org.papervision3d.core.render.material {
import org.papervision3d.core.render.data.*;
public interface IUpdateAfterMaterial {
function updateAfterRender(_arg1:RenderSessionData):void;
}
}//package org.papervision3d.core.render.material
Section 86
//IUpdateBeforeMaterial (org.papervision3d.core.render.material.IUpdateBeforeMaterial)
package org.papervision3d.core.render.material {
import org.papervision3d.core.render.data.*;
public interface IUpdateBeforeMaterial {
function isUpdateable():Boolean;
function updateBeforeRender(_arg1:RenderSessionData):void;
}
}//package org.papervision3d.core.render.material
Section 87
//MaterialManager (org.papervision3d.core.render.material.MaterialManager)
package org.papervision3d.core.render.material {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import flash.utils.*;
public class MaterialManager {
private var materials:Dictionary;
private static var instance:MaterialManager;
public function MaterialManager():void{
if (instance){
throw (new Error("Only 1 instance of materialmanager allowed"));
};
init();
}
private function init():void{
materials = new Dictionary(true);
}
private function _unRegisterMaterial(_arg1:MaterialObject3D):void{
delete materials[_arg1];
}
public function updateMaterialsAfterRender(_arg1:RenderSessionData):void{
var _local2:IUpdateAfterMaterial;
var _local3:*;
for (_local3 in materials) {
if ((_local3 is IUpdateAfterMaterial)){
_local2 = (_local3 as IUpdateAfterMaterial);
_local2.updateAfterRender(_arg1);
};
};
}
private function _registerMaterial(_arg1:MaterialObject3D):void{
materials[_arg1] = true;
}
public function updateMaterialsBeforeRender(_arg1:RenderSessionData):void{
var _local2:IUpdateBeforeMaterial;
var _local3:*;
for (_local3 in materials) {
if ((_local3 is IUpdateBeforeMaterial)){
_local2 = (_local3 as IUpdateBeforeMaterial);
if (_local2.isUpdateable()){
_local2.updateBeforeRender(_arg1);
};
};
};
}
public static function getInstance():MaterialManager{
if (!instance){
instance = new (MaterialManager);
};
return (instance);
}
public static function unRegisterMaterial(_arg1:MaterialObject3D):void{
getInstance()._unRegisterMaterial(_arg1);
}
public static function registerMaterial(_arg1:MaterialObject3D):void{
getInstance()._registerMaterial(_arg1);
}
}
}//package org.papervision3d.core.render.material
Section 88
//BasicProjectionPipeline (org.papervision3d.core.render.project.BasicProjectionPipeline)
package org.papervision3d.core.render.project {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
public class BasicProjectionPipeline extends ProjectionPipeline {
public function BasicProjectionPipeline(){
init();
}
protected function init():void{
}
override public function project(_arg1:RenderSessionData):void{
var _local3:DisplayObject3D;
var _local5:Number;
_arg1.camera.transformView();
var _local2:Array = _arg1.renderObjects;
var _local4:Number = _local2.length;
if (_arg1.camera.useProjectionMatrix){
for each (_local3 in _local2) {
if (_local3.visible){
if (_arg1.viewPort.viewportObjectFilter){
_local5 = _arg1.viewPort.viewportObjectFilter.testObject(_local3);
if (_local5){
projectObject(_local3, _arg1, _local5);
} else {
_arg1.renderStatistics.filteredObjects++;
};
} else {
projectObject(_local3, _arg1, 1);
};
};
};
} else {
for each (_local3 in _local2) {
if (_local3.visible){
if (_arg1.viewPort.viewportObjectFilter){
_local5 = _arg1.viewPort.viewportObjectFilter.testObject(_local3);
if (_local5){
projectObject(_local3, _arg1, _local5);
} else {
_arg1.renderStatistics.filteredObjects++;
};
} else {
projectObject(_local3, _arg1, 1);
};
};
};
};
}
protected function isObjectInScene(_arg1:DisplayObject3D, _arg2:SceneObject3D):Boolean{
var _local3:DisplayObjectContainer3D;
while (_arg1.parent) {
_local3 = _arg1.parent;
if (!_arg1.visible){
return (false);
};
if ((((_local3 is SceneObject3D)) && ((SceneObject3D(_local3) == _arg2)))){
return (true);
};
_arg1 = (_local3 as DisplayObject3D);
};
return (false);
}
protected function projectObject(_arg1:DisplayObject3D, _arg2:RenderSessionData, _arg3:Number):void{
_arg1.cullTest = _arg3;
if (_arg1.parent){
_arg1.project((_arg1.parent as DisplayObject3D), _arg2);
} else {
_arg1.project(_arg2.camera, _arg2);
};
}
}
}//package org.papervision3d.core.render.project
Section 89
//ProjectionPipeline (org.papervision3d.core.render.project.ProjectionPipeline)
package org.papervision3d.core.render.project {
import org.papervision3d.core.render.data.*;
public class ProjectionPipeline {
public function project(_arg1:RenderSessionData):void{
}
}
}//package org.papervision3d.core.render.project
Section 90
//IShaderRenderer (org.papervision3d.core.render.shader.IShaderRenderer)
package org.papervision3d.core.render.shader {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.materials.shaders.*;
public interface IShaderRenderer {
function destroy():void;
function getLayerForShader(_arg1:Shader):Sprite;
function clear():void;
function render(_arg1:RenderSessionData):void;
}
}//package org.papervision3d.core.render.shader
Section 91
//ShaderObjectData (org.papervision3d.core.render.shader.ShaderObjectData)
package org.papervision3d.core.render.shader {
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shaders.*;
import flash.utils.*;
public class ShaderObjectData {
public var shaderRenderer:ShaderRenderer;
public var triangleUVS:Dictionary;
public var renderTriangleUVS:Dictionary;
public var lightMatrices:Dictionary;
public var shadedMaterial:ShadedMaterial;
public var uvMatrices:Dictionary;
private var origin:Point;
public var material:BitmapMaterial;
public var triangleRects:Dictionary;
protected var triangleBitmaps:Dictionary;
public var object:DisplayObject3D;
public function ShaderObjectData(_arg1:DisplayObject3D, _arg2:BitmapMaterial, _arg3:ShadedMaterial):void{
origin = new Point(0, 0);
super();
shaderRenderer = new ShaderRenderer();
lightMatrices = new Dictionary();
uvMatrices = new Dictionary();
this.object = _arg1;
this.material = _arg2;
this.shadedMaterial = _arg3;
triangleUVS = new Dictionary();
renderTriangleUVS = new Dictionary();
triangleBitmaps = new Dictionary();
triangleRects = new Dictionary();
}
public function getPerTriUVForDraw(_arg1:Triangle3D):Matrix{
var _local2:Matrix;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Rectangle;
if (!triangleUVS[_arg1]){
_local2 = (triangleUVS[_arg1] = new Matrix());
_local3 = material.bitmap.width;
_local4 = material.bitmap.height;
_local5 = (_arg1.uv[0].u * _local3);
_local6 = ((1 - _arg1.uv[0].v) * _local4);
_local7 = (_arg1.uv[1].u * _local3);
_local8 = ((1 - _arg1.uv[1].v) * _local4);
_local9 = (_arg1.uv[2].u * _local3);
_local10 = ((1 - _arg1.uv[2].v) * _local4);
_local11 = getRectFor(_arg1);
_local2.tx = (_local5 - _local11.x);
_local2.ty = (_local6 - _local11.y);
_local2.a = (_local7 - _local5);
_local2.b = (_local8 - _local6);
_local2.c = (_local9 - _local5);
_local2.d = (_local10 - _local6);
_local2.invert();
};
return (triangleUVS[_arg1]);
}
public function getRectFor(_arg1:Triangle3D):Rectangle{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
if (!triangleRects[_arg1]){
_local2 = material.bitmap.width;
_local3 = material.bitmap.height;
_local4 = (_arg1.uv[0].u * _local2);
_local5 = ((1 - _arg1.uv[0].v) * _local3);
_local6 = (_arg1.uv[1].u * _local2);
_local7 = ((1 - _arg1.uv[1].v) * _local3);
_local8 = (_arg1.uv[2].u * _local2);
_local9 = ((1 - _arg1.uv[2].v) * _local3);
_local10 = Math.min(Math.min(_local4, _local6), _local8);
_local11 = Math.min(Math.min(_local5, _local7), _local9);
_local12 = Math.max(Math.max(_local4, _local6), _local8);
_local13 = Math.max(Math.max(_local5, _local7), _local9);
_local14 = (_local12 - _local10);
_local15 = (_local13 - _local11);
if (_local14 <= 0){
_local14 = 1;
};
if (_local15 <= 0){
_local15 = 1;
};
return ((triangleRects[_arg1] = new Rectangle(_local10, _local11, _local14, _local15)));
};
return (triangleRects[_arg1]);
}
private function perturbUVMatrix(_arg1:Matrix, _arg2:Triangle3D, _arg3:Number=2):void{
var _local4:Number = material.bitmap.width;
var _local5:Number = material.bitmap.height;
var _local6:Number = _arg2.uv[0].u;
var _local7:Number = (1 - _arg2.uv[0].v);
var _local8:Number = _arg2.uv[1].u;
var _local9:Number = (1 - _arg2.uv[1].v);
var _local10:Number = _arg2.uv[2].u;
var _local11:Number = (1 - _arg2.uv[2].v);
var _local12:Number = (_local6 * _local4);
var _local13:Number = (_local7 * _local5);
var _local14:Number = (_local8 * _local4);
var _local15:Number = (_local9 * _local5);
var _local16:Number = (_local10 * _local4);
var _local17:Number = (_local11 * _local5);
var _local18:Number = (((_local10 + _local8) + _local6) / 3);
var _local19:Number = (((_local11 + _local9) + _local7) / 3);
var _local20:Number = (_local6 - _local18);
var _local21:Number = (_local7 - _local19);
var _local22:Number = (_local8 - _local18);
var _local23:Number = (_local9 - _local19);
var _local24:Number = (_local10 - _local18);
var _local25:Number = (_local11 - _local19);
var _local26:Number = ((_local20)<0) ? -(_local20) : _local20;
var _local27:Number = ((_local21)<0) ? -(_local21) : _local21;
var _local28:Number = ((_local22)<0) ? -(_local22) : _local22;
var _local29:Number = ((_local23)<0) ? -(_local23) : _local23;
var _local30:Number = ((_local24)<0) ? -(_local24) : _local24;
var _local31:Number = ((_local25)<0) ? -(_local25) : _local25;
var _local32:Number = ((_local26)>_local27) ? (1 / _local26) : (1 / _local27);
var _local33:Number = ((_local28)>_local29) ? (1 / _local28) : (1 / _local29);
var _local34:Number = ((_local30)>_local31) ? (1 / _local30) : (1 / _local31);
_local12 = (_local12 - ((-(_local20) * _local32) * _arg3));
_local13 = (_local13 - ((-(_local21) * _local32) * _arg3));
_local14 = (_local14 - ((-(_local22) * _local33) * _arg3));
_local15 = (_local15 - ((-(_local23) * _local33) * _arg3));
_local16 = (_local16 - ((-(_local24) * _local34) * _arg3));
_local17 = (_local17 - ((-(_local25) * _local34) * _arg3));
_arg1.tx = _local12;
_arg1.ty = _local13;
_arg1.a = (_local14 - _local12);
_arg1.b = (_local15 - _local13);
_arg1.c = (_local16 - _local12);
_arg1.d = (_local17 - _local13);
}
public function getOutputBitmapFor(_arg1:Triangle3D):BitmapData{
var _local2:Rectangle;
var _local3:BitmapData;
var _local4:Rectangle;
if (!triangleBitmaps[_arg1]){
_local2 = getRectFor(_arg1);
_local3 = (triangleBitmaps[_arg1] = new BitmapData(Math.ceil(_local2.width), Math.ceil(_local2.height), false, 0));
_local4 = new Rectangle(0, 0, _local3.width, _local3.height);
_local3.copyPixels(material.bitmap, _local4, origin);
} else {
_local2 = getRectFor(_arg1);
};
if (((material.bitmap) && (_local2))){
triangleBitmaps[_arg1].copyPixels(material.bitmap, _local2, origin);
};
return (triangleBitmaps[_arg1]);
}
public function updateBeforeRender():void{
}
public function getPerTriUVForShader(_arg1:Triangle3D):Matrix{
var _local2:Matrix;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Rectangle;
if (!renderTriangleUVS[_arg1]){
_local2 = (renderTriangleUVS[_arg1] = new Matrix());
_local3 = material.bitmap.width;
_local4 = material.bitmap.height;
_local5 = (_arg1.uv[0].u * _local3);
_local6 = ((1 - _arg1.uv[0].v) * _local4);
_local7 = (_arg1.uv[1].u * _local3);
_local8 = ((1 - _arg1.uv[1].v) * _local4);
_local9 = (_arg1.uv[2].u * _local3);
_local10 = ((1 - _arg1.uv[2].v) * _local4);
_local11 = getRectFor(_arg1);
_local2.tx = (_local5 - _local11.x);
_local2.ty = (_local6 - _local11.y);
_local2.a = (_local7 - _local5);
_local2.b = (_local8 - _local6);
_local2.c = (_local9 - _local5);
_local2.d = (_local10 - _local6);
};
return (renderTriangleUVS[_arg1]);
}
public function getUVMatrixForTriangle(_arg1:Triangle3D, _arg2:Boolean=false):Matrix{
var _local3:Matrix;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
_local3 = uvMatrices[_arg1];
if (!_local3){
_local3 = new Matrix();
if (_arg2){
perturbUVMatrix(_local3, _arg1, 2);
} else {
if (material.bitmap){
_local4 = material.bitmap.width;
_local5 = material.bitmap.height;
_local6 = (_arg1.uv[0].u * _local4);
_local7 = ((1 - _arg1.uv[0].v) * _local5);
_local8 = (_arg1.uv[1].u * _local4);
_local9 = ((1 - _arg1.uv[1].v) * _local5);
_local10 = (_arg1.uv[2].u * _local4);
_local11 = ((1 - _arg1.uv[2].v) * _local5);
_local3.tx = _local6;
_local3.ty = _local7;
_local3.a = (_local8 - _local6);
_local3.b = (_local9 - _local7);
_local3.c = (_local10 - _local6);
_local3.d = (_local11 - _local7);
};
};
if (material.bitmap){
uvMatrices[_arg1] = _local3;
};
};
return (_local3);
}
public function destroy():void{
var _local1:Object;
for each (_local1 in uvMatrices) {
uvMatrices[_local1] = null;
};
uvMatrices = null;
shaderRenderer.destroy();
shaderRenderer = null;
lightMatrices = null;
}
}
}//package org.papervision3d.core.render.shader
Section 92
//ShaderRenderer (org.papervision3d.core.render.shader.ShaderRenderer)
package org.papervision3d.core.render.shader {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.materials.shaders.*;
import flash.events.*;
import flash.utils.*;
public class ShaderRenderer extends EventDispatcher implements IShaderRenderer {
public var container:Sprite;
public var shadeLayers:Dictionary;
public var outputBitmap:BitmapData;
public var bitmapContainer:Bitmap;
public var resizedInput:Boolean;// = false
public var bitmapLayer:Sprite;
private var _inputBitmapData:BitmapData;
public function ShaderRenderer(){
container = new Sprite();
bitmapLayer = new Sprite();
bitmapContainer = new Bitmap();
bitmapLayer.addChild(bitmapContainer);
bitmapLayer.blendMode = BlendMode.NORMAL;
shadeLayers = new Dictionary();
container.addChild(bitmapLayer);
}
public function clear():void{
var _local1:Sprite;
for each (_local1 in shadeLayers) {
if (((((inputBitmap) && ((inputBitmap.width > 0)))) && ((inputBitmap.height > 0)))){
_local1.graphics.clear();
_local1.graphics.beginFill(0, 1);
_local1.graphics.drawRect(0, 0, inputBitmap.width, inputBitmap.height);
_local1.graphics.endFill();
};
};
}
public function render(_arg1:RenderSessionData):void{
if (outputBitmap){
outputBitmap.fillRect(outputBitmap.rect, 0);
bitmapContainer.bitmapData = inputBitmap;
outputBitmap.draw(container, null, null, null, outputBitmap.rect, false);
if (outputBitmap.transparent){
outputBitmap.copyChannel(inputBitmap, outputBitmap.rect, new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);
};
};
}
public function get inputBitmap():BitmapData{
return (_inputBitmapData);
}
public function set inputBitmap(_arg1:BitmapData):void{
if (_arg1 != null){
if (_inputBitmapData != _arg1){
_inputBitmapData = _arg1;
if (outputBitmap){
if (((!((_inputBitmapData.width == outputBitmap.width))) || (!((_inputBitmapData.height == outputBitmap.height))))){
resizedInput = true;
outputBitmap.dispose();
outputBitmap = _inputBitmapData.clone();
};
} else {
resizedInput = true;
outputBitmap = _inputBitmapData.clone();
};
};
};
}
public function getLayerForShader(_arg1:Shader):Sprite{
var _local2:Sprite = new Sprite();
shadeLayers[_arg1] = _local2;
var _local3:Sprite = new Sprite();
_local2.addChild(_local3);
if (inputBitmap != null){
_local3.graphics.beginFill(0, 0);
_local3.graphics.drawRect(0, 0, inputBitmap.width, inputBitmap.height);
_local3.graphics.endFill();
};
container.addChild(_local2);
_local2.blendMode = _arg1.layerBlendMode;
return (_local2);
}
public function destroy():void{
bitmapLayer = null;
outputBitmap.dispose();
}
}
}//package org.papervision3d.core.render.shader
Section 93
//BasicRenderSorter (org.papervision3d.core.render.sort.BasicRenderSorter)
package org.papervision3d.core.render.sort {
public class BasicRenderSorter implements IRenderSorter {
public function sort(_arg1:Array):void{
_arg1.sortOn("screenZ", Array.NUMERIC);
}
}
}//package org.papervision3d.core.render.sort
Section 94
//IRenderSorter (org.papervision3d.core.render.sort.IRenderSorter)
package org.papervision3d.core.render.sort {
public interface IRenderSorter {
function sort(_arg1:Array):void;
}
}//package org.papervision3d.core.render.sort
Section 95
//AbstractRenderEngine (org.papervision3d.core.render.AbstractRenderEngine)
package org.papervision3d.core.render {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.view.*;
import org.papervision3d.core.render.command.*;
import flash.events.*;
public class AbstractRenderEngine extends EventDispatcher implements IRenderEngine {
public function AbstractRenderEngine(_arg1:IEventDispatcher=null){
super(_arg1);
}
public function addToRenderList(_arg1:RenderableListItem):int{
return (0);
}
public function removeFromRenderList(_arg1:IRenderListItem):int{
return (0);
}
public function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics{
return (null);
}
}
}//package org.papervision3d.core.render
Section 96
//IRenderEngine (org.papervision3d.core.render.IRenderEngine)
package org.papervision3d.core.render {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.view.*;
import org.papervision3d.core.render.command.*;
public interface IRenderEngine {
function addToRenderList(_arg1:RenderableListItem):int;
function removeFromRenderList(_arg1:IRenderListItem):int;
function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics;
}
}//package org.papervision3d.core.render
Section 97
//IVirtualMouseEvent (org.papervision3d.core.utils.virtualmouse.IVirtualMouseEvent)
package org.papervision3d.core.utils.virtualmouse {
public interface IVirtualMouseEvent {
}
}//package org.papervision3d.core.utils.virtualmouse
Section 98
//VirtualMouse (org.papervision3d.core.utils.virtualmouse.VirtualMouse)
package org.papervision3d.core.utils.virtualmouse {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
public class VirtualMouse extends EventDispatcher {
private var _container:Sprite;
private var _stage:Stage;
private var lastDownTarget:DisplayObject;
private var target:InteractiveObject;
private var updateMouseDown:Boolean;// = false
private var eventEvent:Class;
private var _lastEvent:Event;
private var mouseEventEvent:Class;
private var location:Point;
private var delta:int;// = 0
private var disabledEvents:Object;
private var ignoredInstances:Dictionary;
private var isLocked:Boolean;// = false
private var lastWithinStage:Boolean;// = true
private var lastLocation:Point;
private var isDoubleClickEvent:Boolean;// = false
private var lastMouseDown:Boolean;// = false
private var ctrlKey:Boolean;// = false
private var altKey:Boolean;// = false
private var _useNativeEvents:Boolean;// = false
private var shiftKey:Boolean;// = false
public static const UPDATE:String = "update";
private static var _mouseIsDown:Boolean = false;
public function VirtualMouse(_arg1:Stage=null, _arg2:Sprite=null, _arg3:Number=0, _arg4:Number=0){
disabledEvents = new Object();
ignoredInstances = new Dictionary(true);
eventEvent = VirtualMouseEvent;
mouseEventEvent = VirtualMouseMouseEvent;
super();
this.stage = _arg1;
this.container = _arg2;
location = new Point(_arg3, _arg4);
lastLocation = location.clone();
addEventListener(UPDATE, handleUpdate);
update();
}
public function get mouseIsDown():Boolean{
return (_mouseIsDown);
}
public function get container():Sprite{
return (_container);
}
public function exitContainer():void{
if (!container){
return;
};
var _local1:Point = target.globalToLocal(location);
if (!disabledEvents[MouseEvent.MOUSE_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
container.dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
};
if (!disabledEvents[MouseEvent.ROLL_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
container.dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
};
if (target != container){
if (!disabledEvents[MouseEvent.MOUSE_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
target.dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
};
if (!disabledEvents[MouseEvent.ROLL_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
target.dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta));
};
};
target = _stage;
}
public function release():void{
updateMouseDown = true;
_mouseIsDown = false;
if (!isLocked){
update();
};
}
private function keyHandler(_arg1:KeyboardEvent):void{
altKey = _arg1.altKey;
ctrlKey = _arg1.ctrlKey;
shiftKey = _arg1.shiftKey;
}
public function click():void{
press();
release();
}
public function disableEvent(_arg1:String):void{
disabledEvents[_arg1] = true;
}
public function set container(_arg1:Sprite):void{
_container = _arg1;
}
public function get lastEvent():Event{
return (_lastEvent);
}
private function handleUpdate(_arg1:Event):void{
var _local4:InteractiveObject;
var _local5:DisplayObject;
var _local9:Boolean;
if (!container){
return;
};
if (container.scrollRect){
PaperLogger.warning("The container that virtualMouse is trying to test against has a scrollRect defined, and may cause an issue with finding objects under a defined point. Use MovieMaterial.rect to set a rectangle area instead");
};
var _local2:Point = new Point();
_local2.x = container.x;
_local2.y = container.y;
container.x = (container.y = 0);
var _local3:Array = container.getObjectsUnderPoint(location);
container.x = _local2.x;
container.y = _local2.y;
var _local6:int = _local3.length;
while (_local6--) {
_local5 = _local3[_local6];
while (_local5) {
if (ignoredInstances[_local5]){
_local4 = null;
break;
};
if (((_local4) && ((_local5 is SimpleButton)))){
_local4 = null;
} else {
if (((_local4) && (!(DisplayObjectContainer(_local5).mouseChildren)))){
_local4 = null;
};
};
if (((((!(_local4)) && ((_local5 is InteractiveObject)))) && (InteractiveObject(_local5).mouseEnabled))){
_local4 = InteractiveObject(_local5);
};
_local5 = _local5.parent;
};
if (_local4){
break;
};
};
if (!_local4){
_local4 = container;
};
var _local7:Point = target.globalToLocal(location);
var _local8:Point = _local4.globalToLocal(location);
if (((!((lastLocation.x == location.x))) || (!((lastLocation.y == location.y))))){
_local9 = false;
if (stage){
_local9 = (((((((location.x >= 0)) && ((location.y >= 0)))) && ((location.x <= stage.stageWidth)))) && ((location.y <= stage.stageHeight)));
};
if (((((!(_local9)) && (lastWithinStage))) && (!(disabledEvents[Event.MOUSE_LEAVE])))){
_lastEvent = new eventEvent(Event.MOUSE_LEAVE, false, false);
stage.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (((_local9) && (!(disabledEvents[MouseEvent.MOUSE_MOVE])))){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_MOVE, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
lastWithinStage = _local9;
};
if (_local4 != target){
if (!disabledEvents[MouseEvent.MOUSE_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local7.x, _local7.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
target.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (!disabledEvents[MouseEvent.ROLL_OUT]){
_lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local7.x, _local7.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
target.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (!disabledEvents[MouseEvent.MOUSE_OVER]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OVER, true, false, _local8.x, _local8.y, target, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (!disabledEvents[MouseEvent.ROLL_OVER]){
_lastEvent = new mouseEventEvent(MouseEvent.ROLL_OVER, false, false, _local8.x, _local8.y, target, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
};
if (updateMouseDown){
if (_mouseIsDown){
if (!disabledEvents[MouseEvent.MOUSE_DOWN]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_DOWN, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
lastDownTarget = _local4;
updateMouseDown = false;
} else {
if (!disabledEvents[MouseEvent.MOUSE_UP]){
_lastEvent = new mouseEventEvent(MouseEvent.MOUSE_UP, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
if (((!(disabledEvents[MouseEvent.CLICK])) && ((_local4 == lastDownTarget)))){
_lastEvent = new mouseEventEvent(MouseEvent.CLICK, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
lastDownTarget = null;
updateMouseDown = false;
};
};
if (((((isDoubleClickEvent) && (!(disabledEvents[MouseEvent.DOUBLE_CLICK])))) && (_local4.doubleClickEnabled))){
_lastEvent = new mouseEventEvent(MouseEvent.DOUBLE_CLICK, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta);
_local4.dispatchEvent(_lastEvent);
dispatchEvent(_lastEvent);
};
lastLocation = location.clone();
lastMouseDown = _mouseIsDown;
target = _local4;
}
public function getLocation():Point{
return (location.clone());
}
public function lock():void{
isLocked = true;
}
public function get useNativeEvents():Boolean{
return (_useNativeEvents);
}
public function setLocation(_arg1, _arg2=null):void{
var _local3:Point;
if ((_arg1 is Point)){
_local3 = (_arg1 as Point);
location.x = _local3.x;
location.y = _local3.y;
} else {
location.x = Number(_arg1);
location.y = Number(_arg2);
};
if (!isLocked){
update();
};
}
public function unignore(_arg1:DisplayObject):void{
if ((_arg1 in ignoredInstances)){
delete ignoredInstances[_arg1];
};
}
public function doubleClick():void{
if (isLocked){
release();
} else {
click();
press();
isDoubleClickEvent = true;
release();
isDoubleClickEvent = false;
};
}
public function update():void{
dispatchEvent(new Event(UPDATE, false, false));
}
public function unlock():void{
isLocked = false;
update();
}
public function ignore(_arg1:DisplayObject):void{
ignoredInstances[_arg1] = true;
}
public function enableEvent(_arg1:String):void{
if ((_arg1 in disabledEvents)){
delete disabledEvents[_arg1];
};
}
public function press():void{
updateMouseDown = true;
_mouseIsDown = true;
if (!isLocked){
update();
};
}
public function set useNativeEvents(_arg1:Boolean):void{
if (_arg1 == _useNativeEvents){
return;
};
_useNativeEvents = _arg1;
if (_useNativeEvents){
eventEvent = VirtualMouseEvent;
mouseEventEvent = VirtualMouseMouseEvent;
} else {
eventEvent = Event;
mouseEventEvent = MouseEvent;
};
}
public function set x(_arg1:Number):void{
location.x = _arg1;
if (!isLocked){
update();
};
}
public function set y(_arg1:Number):void{
location.y = _arg1;
if (!isLocked){
update();
};
}
public function get y():Number{
return (location.y);
}
public function set stage(_arg1:Stage):void{
var _local2:Boolean;
if (_stage){
_local2 = true;
_stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
_stage.removeEventListener(KeyboardEvent.KEY_UP, keyHandler);
} else {
_local2 = false;
};
_stage = _arg1;
if (_stage){
_stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
_stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
target = _stage;
if (!_local2){
update();
};
};
}
public function get stage():Stage{
return (_stage);
}
public function get x():Number{
return (location.x);
}
}
}//package org.papervision3d.core.utils.virtualmouse
Section 99
//VirtualMouseEvent (org.papervision3d.core.utils.virtualmouse.VirtualMouseEvent)
package org.papervision3d.core.utils.virtualmouse {
import flash.events.*;
public class VirtualMouseEvent extends Event implements IVirtualMouseEvent {
public function VirtualMouseEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
}
}//package org.papervision3d.core.utils.virtualmouse
Section 100
//VirtualMouseMouseEvent (org.papervision3d.core.utils.virtualmouse.VirtualMouseMouseEvent)
package org.papervision3d.core.utils.virtualmouse {
import flash.display.*;
import flash.events.*;
public class VirtualMouseMouseEvent extends MouseEvent implements IVirtualMouseEvent {
public function VirtualMouseMouseEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:Number=NaN, _arg5:Number=NaN, _arg6:InteractiveObject=null, _arg7:Boolean=false, _arg8:Boolean=false, _arg9:Boolean=false, _arg10:Boolean=false, _arg11:int=0){
super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11);
}
}
}//package org.papervision3d.core.utils.virtualmouse
Section 101
//InteractiveSceneManager (org.papervision3d.core.utils.InteractiveSceneManager)
package org.papervision3d.core.utils {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.view.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.*;
import flash.events.*;
import org.papervision3d.core.utils.virtualmouse.*;
import org.papervision3d.events.*;
public class InteractiveSceneManager extends EventDispatcher {
public var currentMaterial:MaterialObject3D;
public var container:Sprite;
public var currentMousePos:Point;
public var debug:Boolean;// = false
public var mouse3D:Mouse3D;
public var enableOverOut:Boolean;// = true
public var currentDisplayObject3D:DisplayObject3D;
public var _viewportRendered:Boolean;// = false
public var virtualMouse:VirtualMouse;
public var lastMousePos:Point;
public var viewport:Viewport3D;
public var renderHitData:RenderHitData;
public var currentMouseDO3D:DisplayObject3D;// = null
public static var MOUSE_IS_DOWN:Boolean = false;
public function InteractiveSceneManager(_arg1:Viewport3D){
virtualMouse = new VirtualMouse();
mouse3D = new Mouse3D();
currentMousePos = new Point();
lastMousePos = new Point();
super();
this.viewport = _arg1;
this.container = _arg1.containerSprite;
init();
}
protected function handleMouseClick(_arg1:MouseEvent):void{
if ((_arg1 is IVirtualMouseEvent)){
return;
};
if (((renderHitData) && (renderHitData.hasHit))){
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_CLICK, currentDisplayObject3D);
};
}
protected function handleEnterFrame(_arg1:Event):void{
var _local3:MovieMaterial;
var _local2:Boolean = hasMouseMoved();
if (((_local2) || (_viewportRendered))){
updateRenderHitData();
_viewportRendered = false;
if ((_arg1 is IVirtualMouseEvent)){
return;
};
if (((virtualMouse) && (renderHitData))){
_local3 = (currentMaterial as MovieMaterial);
if (_local3){
virtualMouse.container = (_local3.movie as Sprite);
};
if (virtualMouse.container){
virtualMouse.setLocation(renderHitData.u, renderHitData.v);
};
if (((((Mouse3D.enabled) && (renderHitData))) && (renderHitData.hasHit))){
mouse3D.updatePosition(renderHitData);
};
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_MOVE, currentDisplayObject3D);
} else {
if (((renderHitData) && (renderHitData.hasHit))){
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_MOVE, currentDisplayObject3D);
};
};
};
lastMousePos.x = currentMousePos.x;
lastMousePos.y = currentMousePos.y;
}
public function updateAfterRender():void{
_viewportRendered = true;
}
public function initListeners():void{
if (viewport.interactive){
container.addEventListener(MouseEvent.MOUSE_DOWN, handleMousePress, false, 0, true);
container.addEventListener(MouseEvent.MOUSE_UP, handleMouseRelease, false, 0, true);
container.addEventListener(MouseEvent.CLICK, handleMouseClick, false, 0, true);
container.addEventListener(MouseEvent.DOUBLE_CLICK, handleMouseDoubleClick, false, 0, true);
container.stage.addEventListener(Event.ENTER_FRAME, handleEnterFrame, false, 0, true);
};
}
protected function initVirtualMouse():void{
virtualMouse.stage = container.stage;
virtualMouse.container = container;
}
protected function handleMouseOver(_arg1:DisplayObject3D):void{
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_OVER, _arg1);
}
protected function resolveRenderHitData():void{
renderHitData = (viewport.hitTestPoint2D(currentMousePos) as RenderHitData);
}
public function updateRenderHitData():void{
resolveRenderHitData();
currentDisplayObject3D = renderHitData.displayObject3D;
currentMaterial = renderHitData.material;
manageOverOut();
}
protected function hasMouseMoved():Boolean{
currentMousePos.x = container.mouseX;
currentMousePos.y = container.mouseY;
return (!(currentMousePos.equals(lastMousePos)));
}
protected function dispatchObjectEvent(_arg1:String, _arg2:DisplayObject3D):void{
var _local3:Number;
var _local4:Number;
var _local5:InteractiveScene3DEvent;
if (((renderHitData) && (renderHitData.hasHit))){
_local3 = (renderHitData.u) ? renderHitData.u : 0;
_local4 = (renderHitData.v) ? renderHitData.v : 0;
_local5 = new InteractiveScene3DEvent(_arg1, _arg2, container, (renderHitData.renderable as Triangle3D), _local3, _local4, renderHitData);
_local5.renderHitData = renderHitData;
dispatchEvent(_local5);
_arg2.dispatchEvent(_local5);
} else {
dispatchEvent(new InteractiveScene3DEvent(_arg1, _arg2, container));
if (_arg2){
_arg2.dispatchEvent(new InteractiveScene3DEvent(_arg1, _arg2, container));
};
};
}
protected function handleMouseDoubleClick(_arg1:MouseEvent):void{
if ((_arg1 is IVirtualMouseEvent)){
return;
};
if (((renderHitData) && (renderHitData.hasHit))){
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_DOUBLE_CLICK, currentDisplayObject3D);
};
}
protected function handleMouseRelease(_arg1:MouseEvent):void{
if ((_arg1 is IVirtualMouseEvent)){
return;
};
MOUSE_IS_DOWN = false;
if (virtualMouse){
virtualMouse.release();
};
if (((((Mouse3D.enabled) && (renderHitData))) && (!((renderHitData.renderable == null))))){
mouse3D.updatePosition(renderHitData);
};
if (((renderHitData) && (renderHitData.hasHit))){
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_RELEASE, currentDisplayObject3D);
};
}
protected function handleAddedToStage(_arg1:Event):void{
container.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
initVirtualMouse();
initListeners();
}
protected function handleMouseOut(_arg1:DisplayObject3D):void{
var _local2:MovieMaterial;
if (_arg1){
_local2 = (_arg1.material as MovieMaterial);
if (_local2){
virtualMouse.exitContainer();
};
};
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_OUT, _arg1);
}
protected function manageOverOut():void{
if (!enableOverOut){
return;
};
if (((renderHitData) && (renderHitData.hasHit))){
if (((!(currentMouseDO3D)) && (currentDisplayObject3D))){
handleMouseOver(currentDisplayObject3D);
currentMouseDO3D = currentDisplayObject3D;
} else {
if (((currentMouseDO3D) && (!((currentMouseDO3D == currentDisplayObject3D))))){
handleMouseOut(currentMouseDO3D);
handleMouseOver(currentDisplayObject3D);
currentMouseDO3D = currentDisplayObject3D;
};
};
} else {
if (currentMouseDO3D != null){
handleMouseOut(currentMouseDO3D);
currentMouseDO3D = null;
};
};
}
public function destroy():void{
viewport = null;
renderHitData = null;
currentDisplayObject3D = null;
currentMaterial = null;
currentMouseDO3D = null;
virtualMouse.stage = null;
virtualMouse.container = null;
container.removeEventListener(MouseEvent.MOUSE_DOWN, handleMousePress);
container.removeEventListener(MouseEvent.MOUSE_UP, handleMouseRelease);
container.removeEventListener(MouseEvent.CLICK, handleMouseClick);
container.removeEventListener(MouseEvent.DOUBLE_CLICK, handleMouseDoubleClick);
if (container.stage){
container.stage.removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
};
container = null;
}
public function init():void{
if (container){
if (container.stage){
initVirtualMouse();
initListeners();
} else {
container.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage, false, 0, true);
};
};
}
protected function handleMousePress(_arg1:MouseEvent):void{
if ((_arg1 is IVirtualMouseEvent)){
return;
};
MOUSE_IS_DOWN = true;
if (virtualMouse){
virtualMouse.press();
};
if (((((Mouse3D.enabled) && (renderHitData))) && (!((renderHitData.renderable == null))))){
mouse3D.updatePosition(renderHitData);
};
if (((renderHitData) && (renderHitData.hasHit))){
dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_PRESS, currentDisplayObject3D);
};
}
}
}//package org.papervision3d.core.utils
Section 102
//Mouse3D (org.papervision3d.core.utils.Mouse3D)
package org.papervision3d.core.utils {
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
public class Mouse3D extends DisplayObject3D {
private var target:Number3D;
public static var enabled:Boolean = false;
private static var UP:Number3D = new Number3D(0, 1, 0);
public function Mouse3D():void{
target = new Number3D();
super();
}
public function updatePosition(_arg1:RenderHitData):void{
var _local3:Matrix3D;
var _local5:Number3D;
var _local6:Number3D;
var _local2:Triangle3D = (_arg1.renderable as Triangle3D);
target.x = _local2.faceNormal.x;
target.y = _local2.faceNormal.y;
target.z = _local2.faceNormal.z;
var _local4:Number3D = Number3D.sub(target, position);
_local4.normalize();
if (_local4.modulo > 0.1){
_local5 = Number3D.cross(_local4, UP);
_local5.normalize();
_local6 = Number3D.cross(_local4, _local5);
_local6.normalize();
_local3 = this.transform;
_local3.n11 = _local5.x;
_local3.n21 = _local5.y;
_local3.n31 = _local5.z;
_local3.n12 = -(_local6.x);
_local3.n22 = -(_local6.y);
_local3.n32 = -(_local6.z);
_local3.n13 = _local4.x;
_local3.n23 = _local4.y;
_local3.n33 = _local4.z;
} else {
_local3 = Matrix3D.IDENTITY;
};
this.transform = Matrix3D.multiply(_local2.instance.world, _local3);
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
}
}//package org.papervision3d.core.utils
Section 103
//StopWatch (org.papervision3d.core.utils.StopWatch)
package org.papervision3d.core.utils {
import flash.events.*;
import flash.utils.*;
public class StopWatch extends EventDispatcher {
private var startTime:int;
private var elapsedTime:int;
private var isRunning:Boolean;
private var stopTime:int;
public function start():void{
if (!isRunning){
startTime = getTimer();
isRunning = true;
};
}
public function stop():int{
if (isRunning){
stopTime = getTimer();
elapsedTime = (stopTime - startTime);
isRunning = false;
return (elapsedTime);
};
return (0);
}
public function reset():void{
isRunning = false;
}
}
}//package org.papervision3d.core.utils
Section 104
//IView (org.papervision3d.core.view.IView)
package org.papervision3d.core.view {
public interface IView {
function stopRendering(_arg1:Boolean=false, _arg2:Boolean=false):void;
function startRendering():void;
function singleRender():void;
}
}//package org.papervision3d.core.view
Section 105
//IViewport3D (org.papervision3d.core.view.IViewport3D)
package org.papervision3d.core.view {
import org.papervision3d.core.render.data.*;
public interface IViewport3D {
function updateAfterRender(_arg1:RenderSessionData):void;
function updateBeforeRender(_arg1:RenderSessionData):void;
}
}//package org.papervision3d.core.view
Section 106
//InteractiveScene3DEvent (org.papervision3d.events.InteractiveScene3DEvent)
package org.papervision3d.events {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import flash.events.*;
public class InteractiveScene3DEvent extends Event {
public var y:Number;// = 0
public var sprite:Sprite;// = null
public var renderHitData:RenderHitData;
public var face3d:Triangle3D;// = null
public var x:Number;// = 0
public var displayObject3D:DisplayObject3D;// = null
public static const OBJECT_ADDED:String = "objectAdded";
public static const OBJECT_PRESS:String = "mousePress";
public static const OBJECT_RELEASE:String = "mouseRelease";
public static const OBJECT_CLICK:String = "mouseClick";
public static const OBJECT_RELEASE_OUTSIDE:String = "mouseReleaseOutside";
public static const OBJECT_OUT:String = "mouseOut";
public static const OBJECT_MOVE:String = "mouseMove";
public static const OBJECT_OVER:String = "mouseOver";
public static const OBJECT_DOUBLE_CLICK:String = "mouseDoubleClick";
public function InteractiveScene3DEvent(_arg1:String, _arg2:DisplayObject3D=null, _arg3:Sprite=null, _arg4:Triangle3D=null, _arg5:Number=0, _arg6:Number=0, _arg7:RenderHitData=null, _arg8:Boolean=false, _arg9:Boolean=false){
super(_arg1, _arg8, _arg9);
this.displayObject3D = _arg2;
this.sprite = _arg3;
this.face3d = _arg4;
this.x = _arg5;
this.y = _arg6;
this.renderHitData = _arg7;
}
override public function toString():String{
return (((((((("Type : " + type) + ", DO3D : ") + displayObject3D) + " Sprite : ") + sprite) + " Face : ") + face3d));
}
}
}//package org.papervision3d.events
Section 107
//RendererEvent (org.papervision3d.events.RendererEvent)
package org.papervision3d.events {
import org.papervision3d.core.render.data.*;
import flash.events.*;
public class RendererEvent extends Event {
public var renderSessionData:RenderSessionData;
public static const PROJECTION_DONE:String = "projectionDone";
public static const RENDER_DONE:String = "renderDone";
public function RendererEvent(_arg1:String, _arg2:RenderSessionData){
super(_arg1);
this.renderSessionData = _arg2;
}
public function clear():void{
renderSessionData = null;
}
override public function clone():Event{
return (new RendererEvent(type, renderSessionData));
}
}
}//package org.papervision3d.events
Section 108
//PointLight3D (org.papervision3d.lights.PointLight3D)
package org.papervision3d.lights {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.math.*;
public class PointLight3D extends LightObject3D {
public static var DEFAULT_POS:Number3D = new Number3D(0, 0, -1000);
public function PointLight3D(_arg1:Boolean=false, _arg2:Boolean=false){
super(_arg1, _arg2);
x = DEFAULT_POS.x;
y = DEFAULT_POS.y;
z = DEFAULT_POS.z;
}
}
}//package org.papervision3d.lights
Section 109
//ILightShader (org.papervision3d.materials.shaders.ILightShader)
package org.papervision3d.materials.shaders {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.shader.*;
public interface ILightShader {
function updateLightMatrix(_arg1:ShaderObjectData, _arg2:RenderSessionData):void;
}
}//package org.papervision3d.materials.shaders
Section 110
//IShader (org.papervision3d.materials.shaders.IShader)
package org.papervision3d.materials.shaders {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.render.shader.*;
public interface IShader {
function updateAfterRender(_arg1:RenderSessionData, _arg2:ShaderObjectData):void;
function destroy():void;
function renderLayer(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData):void;
function renderTri(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData, _arg4:BitmapData):void;
}
}//package org.papervision3d.materials.shaders
Section 111
//ShadedMaterial (org.papervision3d.materials.shaders.ShadedMaterial)
package org.papervision3d.materials.shaders {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.render.material.*;
import org.papervision3d.materials.*;
import org.papervision3d.core.render.shader.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
import org.papervision3d.core.render.draw.*;
import org.papervision3d.core.material.*;
public class ShadedMaterial extends TriangleMaterial implements ITriangleDrawer, IUpdateBeforeMaterial, IUpdateAfterMaterial {
public var shader:Shader;
private var _shaderCompositeMode:int;
public var material:BitmapMaterial;
public var shaderObjectData:Dictionary;
private static var bmp:BitmapData;
public function ShadedMaterial(_arg1:BitmapMaterial, _arg2:Shader, _arg3:int=0){
this.shader = _arg2;
this.material = _arg1;
shaderCompositeMode = _arg3;
init();
}
override public function registerObject(_arg1:DisplayObject3D):void{
super.registerObject(_arg1);
var _local2:ShaderObjectData = (shaderObjectData[_arg1] = new ShaderObjectData(_arg1, material, this));
_local2.shaderRenderer.inputBitmap = material.bitmap;
shader.setContainerForObject(_arg1, _local2.shaderRenderer.getLayerForShader(shader));
}
public function updateAfterRender(_arg1:RenderSessionData):void{
var _local2:ShaderObjectData;
for each (_local2 in shaderObjectData) {
shader.updateAfterRender(_arg1, _local2);
if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){
_local2.shaderRenderer.render(_arg1);
};
};
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
var _local6:ShaderObjectData = ShaderObjectData(shaderObjectData[_arg1.renderableInstance.instance]);
if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){
material.drawTriangle(_arg1, _arg2, _arg3, _local6.shaderRenderer.outputBitmap);
shader.renderLayer(_arg1.triangle, _arg3, _local6);
} else {
if (shaderCompositeMode == ShaderCompositeModes.PER_TRIANGLE_IN_BITMAP){
bmp = _local6.getOutputBitmapFor(_arg1.triangle);
material.drawTriangle(_arg1, _arg2, _arg3, bmp, (_local6.triangleUVS[_arg1.triangle]) ? _local6.triangleUVS[_arg1.triangle] : _local6.getPerTriUVForDraw(_arg1.triangle));
shader.renderTri(_arg1.triangle, _arg3, _local6, bmp);
};
};
}
private function init():void{
shaderObjectData = new Dictionary();
}
public function set shaderCompositeMode(_arg1:int):void{
_shaderCompositeMode = _arg1;
}
public function get shaderCompositeMode():int{
return (_shaderCompositeMode);
}
public function getOutputBitmapDataFor(_arg1:DisplayObject3D):BitmapData{
var _local2:ShaderObjectData;
if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){
if (shaderObjectData[_arg1]){
_local2 = ShaderObjectData(shaderObjectData[_arg1]);
return (_local2.shaderRenderer.outputBitmap);
};
PaperLogger.warning("object not registered with shaded material");
} else {
PaperLogger.warning("getOutputBitmapDataFor only works on per layer mode");
};
return (null);
}
override public function destroy():void{
var _local1:ShaderObjectData;
super.destroy();
for each (_local1 in shaderObjectData) {
_local1.destroy();
};
material = null;
shader = null;
}
override public function unregisterObject(_arg1:DisplayObject3D):void{
super.unregisterObject(_arg1);
var _local2:ShaderObjectData = shaderObjectData[_arg1];
_local2.destroy();
delete shaderObjectData[_arg1];
}
public function updateBeforeRender(_arg1:RenderSessionData):void{
var _local2:ShaderObjectData;
var _local3:ILightShader;
for each (_local2 in shaderObjectData) {
_local2.shaderRenderer.inputBitmap = material.bitmap;
if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){
if (_local2.shaderRenderer.resizedInput){
_local2.shaderRenderer.resizedInput = false;
_local2.uvMatrices = new Dictionary();
};
_local2.shaderRenderer.clear();
};
if ((shader is ILightShader)){
_local3 = (shader as ILightShader);
_local3.updateLightMatrix(_local2, _arg1);
};
};
}
}
}//package org.papervision3d.materials.shaders
Section 112
//Shader (org.papervision3d.materials.shaders.Shader)
package org.papervision3d.materials.shaders {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.render.shader.*;
import flash.events.*;
import flash.utils.*;
import flash.filters.*;
public class Shader extends EventDispatcher implements IShader {
protected var layers:Dictionary;
protected var _blendMode:String;// = "multiply"
protected var _filter:BitmapFilter;
protected var _object:DisplayObject3D;
public function Shader(){
this.layers = new Dictionary(true);
}
public function set layerBlendMode(_arg1:String):void{
_blendMode = _arg1;
}
public function setContainerForObject(_arg1:DisplayObject3D, _arg2:Sprite):void{
layers[_arg1] = _arg2;
}
public function updateAfterRender(_arg1:RenderSessionData, _arg2:ShaderObjectData):void{
}
public function set filter(_arg1:BitmapFilter):void{
_filter = _arg1;
}
public function get layerBlendMode():String{
return (_blendMode);
}
public function get filter():BitmapFilter{
return (_filter);
}
public function destroy():void{
}
public function renderTri(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData, _arg4:BitmapData):void{
}
public function renderLayer(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData):void{
}
}
}//package org.papervision3d.materials.shaders
Section 113
//ShaderCompositeModes (org.papervision3d.materials.shaders.ShaderCompositeModes)
package org.papervision3d.materials.shaders {
public class ShaderCompositeModes {
public static var PER_TRIANGLE_IN_BITMAP:int = 1;
public static var PER_LAYER:int = 0;
}
}//package org.papervision3d.materials.shaders
Section 114
//CompositeMaterial (org.papervision3d.materials.special.CompositeMaterial)
package org.papervision3d.materials.special {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.render.draw.*;
import org.papervision3d.core.material.*;
public class CompositeMaterial extends TriangleMaterial implements ITriangleDrawer {
public var materials:Array;
public function CompositeMaterial(){
init();
}
private function init():void{
materials = new Array();
}
override public function registerObject(_arg1:DisplayObject3D):void{
var _local2:MaterialObject3D;
super.registerObject(_arg1);
for each (_local2 in materials) {
_local2.registerObject(_arg1);
};
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
var _local6:MaterialObject3D;
for each (_local6 in materials) {
if (!_local6.invisible){
_local6.drawTriangle(_arg1, _arg2, _arg3);
};
};
}
public function removeAllMaterials():void{
materials = new Array();
}
override public function unregisterObject(_arg1:DisplayObject3D):void{
var _local2:MaterialObject3D;
super.unregisterObject(_arg1);
for each (_local2 in materials) {
_local2.unregisterObject(_arg1);
};
}
public function removeMaterial(_arg1:MaterialObject3D):void{
materials.splice(materials.indexOf(_arg1), 1);
}
public function addMaterial(_arg1:MaterialObject3D):void{
var _local2:Object;
var _local3:DisplayObject3D;
materials.push(_arg1);
for (_local2 in objects) {
_local3 = (_local2 as DisplayObject3D);
_arg1.registerObject(_local3);
};
}
}
}//package org.papervision3d.materials.special
Section 115
//Letter3DMaterial (org.papervision3d.materials.special.Letter3DMaterial)
package org.papervision3d.materials.special {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.objects.special.commands.*;
public class Letter3DMaterial extends VectorShapeMaterial {
public var scaleStroke:Boolean;// = true
private static var viewVector:Number3D = new Number3D();
private static var normalVector:Number3D = new Number3D();
public function Letter3DMaterial(_arg1:uint=0xFF00FF, _arg2:Number=1){
this.fillColor = _arg1;
this.fillAlpha = _arg2;
}
override public function drawShape(_arg1:VectorShape3D, _arg2:Graphics, _arg3:RenderSessionData):void{
var _local4:Vertex3D;
var _local6:DisplayObject3D;
var _local7:Matrix3D;
var _local8:Number;
if (oneSide){
_local6 = _arg3.camera;
_local7 = _arg1.world;
viewVector.x = (_local6.x - _local7.n14);
viewVector.y = (_local6.y - _local7.n24);
viewVector.z = (_local6.z - _local7.n34);
viewVector.normalize();
normalVector.x = _local7.n13;
normalVector.y = _local7.n23;
normalVector.z = _local7.n33;
_local8 = Number3D.dot(normalVector, viewVector);
if (_local8 > 0){
return;
};
};
if (fillAlpha > 0){
_arg2.beginFill(fillColor, fillAlpha);
};
if ((((((lineAlpha == 0)) || ((lineThickness == 0)))) || ((scaleStroke == true)))){
_arg2.lineStyle();
} else {
_arg2.lineStyle(lineThickness, lineColor, lineAlpha);
};
super.drawShape(_arg1, _arg2, _arg3);
if ((((((lineAlpha == 0)) || ((lineThickness == 0)))) || ((scaleStroke == false)))){
return;
};
var _local5:int;
while (_local5 < _arg1.graphicsCommands.length) {
if ((_arg1.graphicsCommands[_local5] is MoveTo)){
_local4 = MoveTo(_arg1.graphicsCommands[_local5]).vertex;
};
if ((_arg1.graphicsCommands[_local5] is LineTo)){
LineTo(_arg1.graphicsCommands[_local5]).drawScaledStroke(_local4, _arg2, _arg3, this);
_local4 = LineTo(_arg1.graphicsCommands[_local5]).vertex;
};
if ((_arg1.graphicsCommands[_local5] is CurveTo)){
CurveTo(_arg1.graphicsCommands[_local5]).drawScaledStroke(_local4, _arg2, _arg3, this);
_local4 = CurveTo(_arg1.graphicsCommands[_local5]).anchor;
};
_local5++;
};
}
}
}//package org.papervision3d.materials.special
Section 116
//LineMaterial (org.papervision3d.materials.special.LineMaterial)
package org.papervision3d.materials.special {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import org.papervision3d.core.render.draw.*;
public class LineMaterial extends MaterialObject3D implements ILineDrawer {
public function LineMaterial(_arg1:Number=0xFF0000, _arg2:Number=1){
this.lineColor = _arg1;
this.lineAlpha = _arg2;
}
public function drawLine(_arg1:RenderLine, _arg2:Graphics, _arg3:RenderSessionData):void{
_arg2.lineStyle(_arg1.size, lineColor, lineAlpha);
_arg2.moveTo(_arg1.v0.x, _arg1.v0.y);
if (_arg1.cV){
_arg2.curveTo(_arg1.cV.x, _arg1.cV.y, _arg1.v1.x, _arg1.v1.y);
} else {
_arg2.lineTo(_arg1.v1.x, _arg1.v1.y);
};
_arg2.moveTo(0, 0);
_arg2.lineStyle();
}
}
}//package org.papervision3d.materials.special
Section 117
//ParticleMaterial (org.papervision3d.materials.special.ParticleMaterial)
package org.papervision3d.materials.special {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.render.draw.*;
public class ParticleMaterial extends MaterialObject3D implements IParticleDrawer {
public var shape:int;
public var scale:Number;
public static var SHAPE_SQUARE:int = 0;
public static var SHAPE_CIRCLE:int = 1;
public function ParticleMaterial(_arg1:Number, _arg2:Number, _arg3:int=0, _arg4:Number=1){
this.shape = _arg3;
this.fillAlpha = _arg2;
this.fillColor = _arg1;
this.scale = _arg4;
}
public function drawParticle(_arg1:Particle, _arg2:Graphics, _arg3:RenderSessionData):void{
_arg2.beginFill(fillColor, fillAlpha);
var _local4:Rectangle = _arg1.renderRect;
if (shape == SHAPE_SQUARE){
_arg2.drawRect(_local4.x, _local4.y, _local4.width, _local4.height);
} else {
if (shape == SHAPE_CIRCLE){
_arg2.drawCircle((_local4.x + (_local4.width / 2)), (_local4.y + (_local4.width / 2)), (_local4.width / 2));
} else {
PaperLogger.warning("Particle material has no valid shape - Must be ParticleMaterial.SHAPE_SQUARE or ParticleMaterial.SHAPE_CIRCLE");
};
};
_arg2.endFill();
_arg3.renderStatistics.particles++;
}
public function updateRenderRect(_arg1:Particle):void{
var _local2:Rectangle = _arg1.renderRect;
if (_arg1.size == 0){
_local2.width = 1;
_local2.height = 1;
} else {
_local2.width = ((_arg1.renderScale * _arg1.size) * scale);
_local2.height = ((_arg1.renderScale * _arg1.size) * scale);
};
_local2.x = (_arg1.vertex3D.vertex3DInstance.x - (_local2.width / 2));
_local2.y = (_arg1.vertex3D.vertex3DInstance.y - (_local2.width / 2));
}
}
}//package org.papervision3d.materials.special
Section 118
//VectorShapeMaterial (org.papervision3d.materials.special.VectorShapeMaterial)
package org.papervision3d.materials.special {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.objects.special.commands.*;
public class VectorShapeMaterial extends MaterialObject3D {
public function drawShape(_arg1:VectorShape3D, _arg2:Graphics, _arg3:RenderSessionData):void{
var _local4:Boolean;
var _local5:int;
while (_local5 < _arg1.graphicsCommands.length) {
_local4 = IVectorShape(_arg1.graphicsCommands[_local5]).draw(_arg2, _local4);
_local5++;
};
_arg2.endFill();
}
}
}//package org.papervision3d.materials.special
Section 119
//LightMatrix (org.papervision3d.materials.utils.LightMatrix)
package org.papervision3d.materials.utils {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
import org.papervision3d.*;
import org.papervision3d.lights.*;
public class LightMatrix {
private static var _targetPos:Number3D = new Number3D();
private static var _lightUp:Number3D = new Number3D();
private static var _lightSide:Number3D = new Number3D();
private static var _lightDir:Number3D = new Number3D();
private static var lightMatrix:Matrix3D = Matrix3D.IDENTITY;
private static var invMatrix:Matrix3D = Matrix3D.IDENTITY;
protected static var UP:Number3D = new Number3D(0, 1, 0);
private static var _lightPos:Number3D = new Number3D();
public static function getLightMatrix(_arg1:LightObject3D, _arg2:DisplayObject3D, _arg3:RenderSessionData, _arg4:Matrix3D):Matrix3D{
var _local6:Matrix3D;
var _local7:Matrix3D;
var _local5:Matrix3D = (_arg4) ? _arg4 : Matrix3D.IDENTITY;
if (_arg1 == null){
_arg1 = new PointLight3D();
_arg1.copyPosition(_arg3.camera);
};
_targetPos.reset();
_lightPos.reset();
_lightDir.reset();
_lightUp.reset();
_lightSide.reset();
if (!_arg2){
return (_local5);
};
_local6 = _arg1.transform;
_local7 = _arg2.world;
_lightPos.x = -(_local6.n14);
_lightPos.y = -(_local6.n24);
_lightPos.z = -(_local6.n34);
_targetPos.x = -(_local7.n14);
_targetPos.y = -(_local7.n24);
_targetPos.z = -(_local7.n34);
_lightDir.x = (_targetPos.x - _lightPos.x);
_lightDir.y = (_targetPos.y - _lightPos.y);
_lightDir.z = (_targetPos.z - _lightPos.z);
invMatrix.calculateInverse(_arg2.world);
Matrix3D.multiplyVector3x3(invMatrix, _lightDir);
_lightDir.normalize();
_lightSide.x = ((_lightDir.y * UP.z) - (_lightDir.z * UP.y));
_lightSide.y = ((_lightDir.z * UP.x) - (_lightDir.x * UP.z));
_lightSide.z = ((_lightDir.x * UP.y) - (_lightDir.y * UP.x));
_lightSide.normalize();
_lightUp.x = ((_lightSide.y * _lightDir.z) - (_lightSide.z * _lightDir.y));
_lightUp.y = ((_lightSide.z * _lightDir.x) - (_lightSide.x * _lightDir.z));
_lightUp.z = ((_lightSide.x * _lightDir.y) - (_lightSide.y * _lightDir.x));
_lightUp.normalize();
if (((Papervision3D.useRIGHTHANDED) || (_arg2.flipLightDirection))){
_lightDir.x = -(_lightDir.x);
_lightDir.y = -(_lightDir.y);
_lightDir.z = -(_lightDir.z);
};
_local5.n11 = _lightSide.x;
_local5.n12 = _lightSide.y;
_local5.n13 = _lightSide.z;
_local5.n21 = _lightUp.x;
_local5.n22 = _lightUp.y;
_local5.n23 = _lightUp.z;
_local5.n31 = _lightDir.x;
_local5.n32 = _lightDir.y;
_local5.n33 = _lightDir.z;
return (_local5);
}
}
}//package org.papervision3d.materials.utils
Section 120
//MaterialsList (org.papervision3d.materials.utils.MaterialsList)
package org.papervision3d.materials.utils {
import org.papervision3d.core.proto.*;
import flash.utils.*;
public class MaterialsList {
protected var _materials:Dictionary;
public var materialsByName:Dictionary;
private var _materialsTotal:int;
public function MaterialsList(_arg1=null):void{
var _local2:String;
var _local3:String;
super();
this.materialsByName = new Dictionary(true);
this._materials = new Dictionary(false);
this._materialsTotal = 0;
if (_arg1){
if ((_arg1 is Array)){
for (_local2 in _arg1) {
this.addMaterial(_arg1[_local2]);
};
} else {
if ((_arg1 is Object)){
for (_local3 in _arg1) {
this.addMaterial(_arg1[_local3], _local3);
};
};
};
};
}
public function get numMaterials():int{
return (_materialsTotal);
}
public function addMaterial(_arg1:MaterialObject3D, _arg2:String=null):MaterialObject3D{
_arg2 = ((((_arg2) || (_arg1.name))) || (String(_arg1.id)));
this._materials[_arg1] = _arg2;
this.materialsByName[_arg2] = _arg1;
this._materialsTotal++;
return (_arg1);
}
public function removeMaterial(_arg1:MaterialObject3D):MaterialObject3D{
if (this._materials[_arg1]){
delete this.materialsByName[this._materials[_arg1]];
delete this._materials[_arg1];
_materialsTotal--;
};
return (_arg1);
}
public function toString():String{
var _local2:MaterialObject3D;
var _local1 = "";
for each (_local2 in this.materialsByName) {
_local1 = (_local1 + (this._materials[_local2] + "\n"));
};
return (_local1);
}
public function removeMaterialByName(_arg1:String):MaterialObject3D{
return (removeMaterial(getMaterialByName(_arg1)));
}
public function clone():MaterialsList{
var _local2:MaterialObject3D;
var _local1:MaterialsList = new MaterialsList();
for each (_local2 in this.materialsByName) {
_local1.addMaterial(_local2.clone(), this._materials[_local2]);
};
return (_local1);
}
public function getMaterialByName(_arg1:String):MaterialObject3D{
return ((this.materialsByName[_arg1]) ? this.materialsByName[_arg1] : this.materialsByName["all"]);
}
}
}//package org.papervision3d.materials.utils
Section 121
//PrecisionMode (org.papervision3d.materials.utils.PrecisionMode)
package org.papervision3d.materials.utils {
public class PrecisionMode {
public static var ORIGINAL:int = 0;
public static var STABLE:int = 1;
}
}//package org.papervision3d.materials.utils
Section 122
//RenderRecStorage (org.papervision3d.materials.utils.RenderRecStorage)
package org.papervision3d.materials.utils {
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
public class RenderRecStorage {
public var mat:Matrix;
public var v0:Vertex3DInstance;
public var v1:Vertex3DInstance;
public var v2:Vertex3DInstance;
public function RenderRecStorage(){
v0 = new Vertex3DInstance();
v1 = new Vertex3DInstance();
v2 = new Vertex3DInstance();
mat = new Matrix();
super();
}
}
}//package org.papervision3d.materials.utils
Section 123
//BitmapMaterial (org.papervision3d.materials.BitmapMaterial)
package org.papervision3d.materials {
import org.papervision3d.core.proto.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
import org.papervision3d.core.render.draw.*;
import org.papervision3d.*;
import org.papervision3d.core.material.*;
public class BitmapMaterial extends TriangleMaterial implements ITriangleDrawer {
protected var renderRecStorage:Array;
protected var dsbc:Number;
private var d2bc:Number;
private var b2:Number;
public var uvMatrices:Dictionary;
protected var _precise:Boolean;
protected var faz:Number;
protected var dsca:Number;
protected var ax:Number;
protected var ay:Number;
protected var az:Number;
private var d2ca:Number;
protected var tempPreGrp:Graphics;
public var precisionMode:int;
protected var fbz:Number;
private var c2:Number;
protected var mcax:Number;
protected var mcay:Number;
protected var mcaz:Number;
private var d2:Number;
protected var bx:Number;
protected var by:Number;
protected var bz:Number;
protected var fcz:Number;
public var minimumRenderSize:Number;// = 4
protected var dbcx:Number;
protected var dbcy:Number;
protected var cx:Number;
protected var cullRect:Rectangle;
protected var cz:Number;
protected var cy:Number;
protected var dmax:Number;
protected var dabx:Number;
private var dy:Number;
protected var _perPixelPrecision:int;// = 8
protected var daby:Number;
protected var tempPreRSD:RenderSessionData;
private var dx:Number;
private var x0:Number;
private var x1:Number;
private var x2:Number;
protected var mbcy:Number;
protected var mbcz:Number;
protected var mbcx:Number;
private var y0:Number;
protected var focus:Number;// = 200
private var y2:Number;
protected var _texture:Object;
protected var tempPreBmp:BitmapData;
private var y1:Number;
protected var tempTriangleMatrix:Matrix;
protected var maby:Number;
protected var mabz:Number;
private var d2ab:Number;
protected var dsab:Number;
protected var mabx:Number;
protected var dcax:Number;
protected var dcay:Number;
private var a2:Number;
protected var _precision:int;// = 8
protected static const DEFAULT_FOCUS:Number = 200;
protected static var _triMatrix:Matrix = new Matrix();
protected static var _triMap:Matrix;
public static var AUTO_MIP_MAPPING:Boolean = false;
public static var MIP_MAP_DEPTH:Number = 8;
protected static var hitRect:Rectangle = new Rectangle();
protected static var _localMatrix:Matrix = new Matrix();
public function BitmapMaterial(_arg1:BitmapData=null, _arg2:Boolean=false){
precisionMode = PrecisionMode.ORIGINAL;
uvMatrices = new Dictionary();
tempTriangleMatrix = new Matrix();
super();
if (_arg1){
texture = _arg1;
};
this.precise = _arg2;
createRenderRecStorage();
}
public function transformUV(_arg1:Triangle3D):Matrix{
var _local2:Array;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Matrix;
var _local16:Matrix;
if (!_arg1.uv){
PaperLogger.error("MaterialObject3D: transformUV() uv not found!");
} else {
if (bitmap){
_local2 = _arg1.uv;
_local3 = (bitmap.width * maxU);
_local4 = (bitmap.height * maxV);
_local5 = (_local3 * _arg1.uv0.u);
_local6 = (_local4 * (1 - _arg1.uv0.v));
_local7 = (_local3 * _arg1.uv1.u);
_local8 = (_local4 * (1 - _arg1.uv1.v));
_local9 = (_local3 * _arg1.uv2.u);
_local10 = (_local4 * (1 - _arg1.uv2.v));
if ((((((_local5 == _local7)) && ((_local6 == _local8)))) || ((((_local5 == _local9)) && ((_local6 == _local10)))))){
_local5 = (_local5 - ((_local5)>0.05) ? 0.05 : -0.05);
_local6 = (_local6 - ((_local6)>0.07) ? 0.07 : -0.07);
};
if ((((_local9 == _local7)) && ((_local10 == _local8)))){
_local9 = (_local9 - ((_local9)>0.05) ? 0.04 : -0.04);
_local10 = (_local10 - ((_local10)>0.06) ? 0.06 : -0.06);
};
_local11 = (_local7 - _local5);
_local12 = (_local8 - _local6);
_local13 = (_local9 - _local5);
_local14 = (_local10 - _local6);
_local15 = new Matrix(_local11, _local12, _local13, _local14, _local5, _local6);
if (Papervision3D.useRIGHTHANDED){
_local15.scale(-1, 1);
_local15.translate(_local3, 0);
};
_local15.invert();
_local16 = (uvMatrices[_arg1] = _local15.clone());
_local16.a = _local15.a;
_local16.b = _local15.b;
_local16.c = _local15.c;
_local16.d = _local15.d;
_local16.tx = _local15.tx;
_local16.ty = _local15.ty;
} else {
PaperLogger.error("MaterialObject3D: transformUV() material.bitmap not found!");
};
};
return (_local16);
}
public function transformUVRT(_arg1:RenderTriangle):Matrix{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Matrix;
var _local15:Matrix;
if (bitmap){
_local2 = (bitmap.width * maxU);
_local3 = (bitmap.height * maxV);
_local4 = (_local2 * _arg1.uv0.u);
_local5 = (_local3 * (1 - _arg1.uv0.v));
_local6 = (_local2 * _arg1.uv1.u);
_local7 = (_local3 * (1 - _arg1.uv1.v));
_local8 = (_local2 * _arg1.uv2.u);
_local9 = (_local3 * (1 - _arg1.uv2.v));
if ((((((_local4 == _local6)) && ((_local5 == _local7)))) || ((((_local4 == _local8)) && ((_local5 == _local9)))))){
_local4 = (_local4 - ((_local4)>0.05) ? 0.05 : -0.05);
_local5 = (_local5 - ((_local5)>0.07) ? 0.07 : -0.07);
};
if ((((_local8 == _local6)) && ((_local9 == _local7)))){
_local8 = (_local8 - ((_local8)>0.05) ? 0.04 : -0.04);
_local9 = (_local9 - ((_local9)>0.06) ? 0.06 : -0.06);
};
_local10 = (_local6 - _local4);
_local11 = (_local7 - _local5);
_local12 = (_local8 - _local4);
_local13 = (_local9 - _local5);
_local14 = new Matrix(_local10, _local11, _local12, _local13, _local4, _local5);
if (Papervision3D.useRIGHTHANDED){
_local14.scale(-1, 1);
_local14.translate(_local2, 0);
};
_local14.invert();
_local15 = (uvMatrices[_arg1] = _local14.clone());
_local15.a = _local14.a;
_local15.b = _local14.b;
_local15.c = _local14.c;
_local15.d = _local14.d;
_local15.tx = _local14.tx;
_local15.ty = _local14.ty;
} else {
PaperLogger.error("MaterialObject3D: transformUV() material.bitmap not found!");
};
return (_local15);
}
protected function renderRec(_arg1:Matrix, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Number):void{
az = _arg2.z;
bz = _arg3.z;
cz = _arg4.z;
if ((((((az <= 0)) && ((bz <= 0)))) && ((cz <= 0)))){
return;
};
cx = _arg4.x;
cy = _arg4.y;
bx = _arg3.x;
by = _arg3.y;
ax = _arg2.x;
ay = _arg2.y;
if (cullRect){
hitRect.x = ((bx < ax)) ? ((bx < cx)) ? bx : cx : ((ax < cx)) ? ax : cx;
hitRect.width = (((bx > ax)) ? ((bx > cx)) ? bx : cx : ((ax > cx)) ? ax : cx + ((hitRect.x < 0)) ? -(hitRect.x) : hitRect.x);
hitRect.y = ((by < ay)) ? ((by < cy)) ? by : cy : ((ay < cy)) ? ay : cy;
hitRect.height = (((by > ay)) ? ((by > cy)) ? by : cy : ((ay > cy)) ? ay : cy + ((hitRect.y < 0)) ? -(hitRect.y) : hitRect.y);
if (!(((hitRect.right < cullRect.left)) || ((hitRect.left > cullRect.right)))){
if (!(((hitRect.bottom < cullRect.top)) || ((hitRect.top > cullRect.bottom)))){
} else {
return;
};
} else {
return;
};
};
if ((((((((_arg5 >= 100)) || ((hitRect.width < minimumRenderSize)))) || ((hitRect.height < minimumRenderSize)))) || ((focus == Infinity)))){
a2 = (_arg3.x - _arg2.x);
b2 = (_arg3.y - _arg2.y);
c2 = (_arg4.x - _arg2.x);
d2 = (_arg4.y - _arg2.y);
tempTriangleMatrix.a = ((_arg1.a * a2) + (_arg1.b * c2));
tempTriangleMatrix.b = ((_arg1.a * b2) + (_arg1.b * d2));
tempTriangleMatrix.c = ((_arg1.c * a2) + (_arg1.d * c2));
tempTriangleMatrix.d = ((_arg1.c * b2) + (_arg1.d * d2));
tempTriangleMatrix.tx = (((_arg1.tx * a2) + (_arg1.ty * c2)) + _arg2.x);
tempTriangleMatrix.ty = (((_arg1.tx * b2) + (_arg1.ty * d2)) + _arg2.y);
if (lineAlpha){
tempPreGrp.lineStyle(lineThickness, lineColor, lineAlpha);
};
tempPreGrp.beginBitmapFill(tempPreBmp, tempTriangleMatrix, tiled, smooth);
tempPreGrp.moveTo(_arg2.x, _arg2.y);
tempPreGrp.lineTo(_arg3.x, _arg3.y);
tempPreGrp.lineTo(_arg4.x, _arg4.y);
tempPreGrp.endFill();
if (lineAlpha){
tempPreGrp.lineStyle();
};
tempPreRSD.renderStatistics.triangles++;
return;
};
faz = (focus + az);
fbz = (focus + bz);
fcz = (focus + cz);
mabz = (2 / (faz + fbz));
mbcz = (2 / (fbz + fcz));
mcaz = (2 / (fcz + faz));
mabx = (((ax * faz) + (bx * fbz)) * mabz);
maby = (((ay * faz) + (by * fbz)) * mabz);
mbcx = (((bx * fbz) + (cx * fcz)) * mbcz);
mbcy = (((by * fbz) + (cy * fcz)) * mbcz);
mcax = (((cx * fcz) + (ax * faz)) * mcaz);
mcay = (((cy * fcz) + (ay * faz)) * mcaz);
dabx = ((ax + bx) - mabx);
daby = ((ay + by) - maby);
dbcx = ((bx + cx) - mbcx);
dbcy = ((by + cy) - mbcy);
dcax = ((cx + ax) - mcax);
dcay = ((cy + ay) - mcay);
dsab = ((dabx * dabx) + (daby * daby));
dsbc = ((dbcx * dbcx) + (dbcy * dbcy));
dsca = ((dcax * dcax) + (dcay * dcay));
var _local6:int = (_arg5 + 1);
var _local7:RenderRecStorage = RenderRecStorage(renderRecStorage[int(_arg5)]);
var _local8:Matrix = _local7.mat;
if ((((((dsab <= _precision)) && ((dsca <= _precision)))) && ((dsbc <= _precision)))){
a2 = (_arg3.x - _arg2.x);
b2 = (_arg3.y - _arg2.y);
c2 = (_arg4.x - _arg2.x);
d2 = (_arg4.y - _arg2.y);
tempTriangleMatrix.a = ((_arg1.a * a2) + (_arg1.b * c2));
tempTriangleMatrix.b = ((_arg1.a * b2) + (_arg1.b * d2));
tempTriangleMatrix.c = ((_arg1.c * a2) + (_arg1.d * c2));
tempTriangleMatrix.d = ((_arg1.c * b2) + (_arg1.d * d2));
tempTriangleMatrix.tx = (((_arg1.tx * a2) + (_arg1.ty * c2)) + _arg2.x);
tempTriangleMatrix.ty = (((_arg1.tx * b2) + (_arg1.ty * d2)) + _arg2.y);
if (lineAlpha){
tempPreGrp.lineStyle(lineThickness, lineColor, lineAlpha);
};
tempPreGrp.beginBitmapFill(tempPreBmp, tempTriangleMatrix, tiled, smooth);
tempPreGrp.moveTo(_arg2.x, _arg2.y);
tempPreGrp.lineTo(_arg3.x, _arg3.y);
tempPreGrp.lineTo(_arg4.x, _arg4.y);
tempPreGrp.endFill();
if (lineAlpha){
tempPreGrp.lineStyle();
};
tempPreRSD.renderStatistics.triangles++;
return;
};
if ((((((dsab > _precision)) && ((dsca > _precision)))) && ((dsbc > _precision)))){
_local8.a = (_arg1.a * 2);
_local8.b = (_arg1.b * 2);
_local8.c = (_arg1.c * 2);
_local8.d = (_arg1.d * 2);
_local8.tx = (_arg1.tx * 2);
_local8.ty = (_arg1.ty * 2);
_local7.v0.x = (mabx * 0.5);
_local7.v0.y = (maby * 0.5);
_local7.v0.z = ((az + bz) * 0.5);
_local7.v1.x = (mbcx * 0.5);
_local7.v1.y = (mbcy * 0.5);
_local7.v1.z = ((bz + cz) * 0.5);
_local7.v2.x = (mcax * 0.5);
_local7.v2.y = (mcay * 0.5);
_local7.v2.z = ((cz + az) * 0.5);
renderRec(_local8, _arg2, _local7.v0, _local7.v2, _local6);
_local8.tx = (_local8.tx - 1);
renderRec(_local8, _local7.v0, _arg3, _local7.v1, _local6);
_local8.ty = (_local8.ty - 1);
_local8.tx = (_arg1.tx * 2);
renderRec(_local8, _local7.v2, _local7.v1, _arg4, _local6);
_local8.a = (-(_arg1.a) * 2);
_local8.b = (-(_arg1.b) * 2);
_local8.c = (-(_arg1.c) * 2);
_local8.d = (-(_arg1.d) * 2);
_local8.tx = ((-(_arg1.tx) * 2) + 1);
_local8.ty = ((-(_arg1.ty) * 2) + 1);
renderRec(_local8, _local7.v1, _local7.v2, _local7.v0, _local6);
return;
};
if (precisionMode == PrecisionMode.ORIGINAL){
d2ab = dsab;
d2bc = dsbc;
d2ca = dsca;
dmax = ((dsca > dsbc)) ? ((dsca > dsab)) ? dsca : dsab : ((dsbc > dsab)) ? dsbc : dsab;
} else {
dx = (_arg2.x - _arg3.x);
dy = (_arg2.y - _arg3.y);
d2ab = ((dx * dx) + (dy * dy));
dx = (_arg3.x - _arg4.x);
dy = (_arg3.y - _arg4.y);
d2bc = ((dx * dx) + (dy * dy));
dx = (_arg4.x - _arg2.x);
dy = (_arg4.y - _arg2.y);
d2ca = ((dx * dx) + (dy * dy));
dmax = ((d2ca > d2bc)) ? ((d2ca > d2ab)) ? d2ca : d2ab : ((d2bc > d2ab)) ? d2bc : d2ab;
};
if (d2ab == dmax){
_local8.a = (_arg1.a * 2);
_local8.b = _arg1.b;
_local8.c = (_arg1.c * 2);
_local8.d = _arg1.d;
_local8.tx = (_arg1.tx * 2);
_local8.ty = _arg1.ty;
_local7.v0.x = (mabx * 0.5);
_local7.v0.y = (maby * 0.5);
_local7.v0.z = ((az + bz) * 0.5);
renderRec(_local8, _arg2, _local7.v0, _arg4, _local6);
_local8.a = ((_arg1.a * 2) + _arg1.b);
_local8.c = ((2 * _arg1.c) + _arg1.d);
_local8.tx = (((_arg1.tx * 2) + _arg1.ty) - 1);
renderRec(_local8, _local7.v0, _arg3, _arg4, _local6);
return;
};
if (d2ca == dmax){
_local8.a = _arg1.a;
_local8.b = (_arg1.b * 2);
_local8.c = _arg1.c;
_local8.d = (_arg1.d * 2);
_local8.tx = _arg1.tx;
_local8.ty = (_arg1.ty * 2);
_local7.v2.x = (mcax * 0.5);
_local7.v2.y = (mcay * 0.5);
_local7.v2.z = ((cz + az) * 0.5);
renderRec(_local8, _arg2, _arg3, _local7.v2, _local6);
_local8.b = (_local8.b + _arg1.a);
_local8.d = (_local8.d + _arg1.c);
_local8.ty = (_local8.ty + (_arg1.tx - 1));
renderRec(_local8, _local7.v2, _arg3, _arg4, _local6);
return;
};
_local8.a = (_arg1.a - _arg1.b);
_local8.b = (_arg1.b * 2);
_local8.c = (_arg1.c - _arg1.d);
_local8.d = (_arg1.d * 2);
_local8.tx = (_arg1.tx - _arg1.ty);
_local8.ty = (_arg1.ty * 2);
_local7.v1.x = (mbcx * 0.5);
_local7.v1.y = (mbcy * 0.5);
_local7.v1.z = ((bz + cz) * 0.5);
renderRec(_local8, _arg2, _arg3, _local7.v1, _local6);
_local8.a = (_arg1.a * 2);
_local8.b = (_arg1.b - _arg1.a);
_local8.c = (_arg1.c * 2);
_local8.d = (_arg1.d - _arg1.c);
_local8.tx = (_arg1.tx * 2);
_local8.ty = (_arg1.ty - _arg1.tx);
renderRec(_local8, _arg2, _local7.v1, _arg4, _local6);
}
protected function createRenderRecStorage():void{
this.renderRecStorage = new Array();
var _local1:int;
while (_local1 <= 100) {
this.renderRecStorage[_local1] = new RenderRecStorage();
_local1++;
};
}
public function get texture():Object{
return (this._texture);
}
public function resetUVS():void{
uvMatrices = new Dictionary(false);
}
public function set pixelPrecision(_arg1:int):void{
_precision = ((_arg1 * _arg1) * 1.4);
_perPixelPrecision = _arg1;
}
protected function correctBitmap(_arg1:BitmapData):BitmapData{
var _local2:BitmapData;
var _local3:Number = (1 << MIP_MAP_DEPTH);
var _local4:Number = (_arg1.width / _local3);
_local4 = ((_local4 == uint(_local4))) ? _local4 : (uint(_local4) + 1);
var _local5:Number = (_arg1.height / _local3);
_local5 = ((_local5 == uint(_local5))) ? _local5 : (uint(_local5) + 1);
var _local6:Number = (_local3 * _local4);
var _local7:Number = (_local3 * _local5);
var _local8:Boolean;
if (_local6 > 2880){
_local6 = _arg1.width;
_local8 = false;
};
if (_local7 > 2880){
_local7 = _arg1.height;
_local8 = false;
};
if (!_local8){
PaperLogger.warning((("Material " + this.name) + ": Texture too big for mip mapping. Resizing recommended for better performance and quality."));
};
if (((_arg1) && (((!(((_arg1.width % _local3) == 0))) || (!(((_arg1.height % _local3) == 0))))))){
_local2 = new BitmapData(_local6, _local7, _arg1.transparent, 0);
widthOffset = _arg1.width;
heightOffset = _arg1.height;
this.maxU = (_arg1.width / _local6);
this.maxV = (_arg1.height / _local7);
_local2.draw(_arg1);
extendBitmapEdges(_local2, _arg1.width, _arg1.height);
} else {
this.maxU = (this.maxV = 1);
_local2 = _arg1;
};
return (_local2);
}
protected function createBitmap(_arg1:BitmapData):BitmapData{
var _local2:BitmapData;
resetMapping();
if (AUTO_MIP_MAPPING){
_local2 = correctBitmap(_arg1);
} else {
this.maxU = (this.maxV = 1);
_local2 = _arg1;
};
return (_local2);
}
public function get precise():Boolean{
return (_precise);
}
public function set texture(_arg1:Object):void{
if ((_arg1 is BitmapData) == false){
PaperLogger.error("BitmapMaterial.texture requires a BitmapData object for the texture");
return;
};
bitmap = createBitmap(BitmapData(_arg1));
_texture = _arg1;
}
override public function clone():MaterialObject3D{
var _local1:MaterialObject3D = super.clone();
_local1.maxU = this.maxU;
_local1.maxV = this.maxV;
return (_local1);
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
_triMap = (_arg5) ? _arg5 : ((uvMatrices[_arg1]) || (transformUVRT(_arg1)));
if (((!(_precise)) || (!(_triMap)))){
if (lineAlpha){
_arg2.lineStyle(lineThickness, lineColor, lineAlpha);
};
if (bitmap){
x0 = _arg1.v0.x;
y0 = _arg1.v0.y;
x1 = _arg1.v1.x;
y1 = _arg1.v1.y;
x2 = _arg1.v2.x;
y2 = _arg1.v2.y;
_triMatrix.a = (x1 - x0);
_triMatrix.b = (y1 - y0);
_triMatrix.c = (x2 - x0);
_triMatrix.d = (y2 - y0);
_triMatrix.tx = x0;
_triMatrix.ty = y0;
_localMatrix.a = _triMap.a;
_localMatrix.b = _triMap.b;
_localMatrix.c = _triMap.c;
_localMatrix.d = _triMap.d;
_localMatrix.tx = _triMap.tx;
_localMatrix.ty = _triMap.ty;
_localMatrix.concat(_triMatrix);
_arg2.beginBitmapFill((_arg4) ? _arg4 : bitmap, _localMatrix, tiled, smooth);
};
_arg2.moveTo(x0, y0);
_arg2.lineTo(x1, y1);
_arg2.lineTo(x2, y2);
_arg2.lineTo(x0, y0);
if (bitmap){
_arg2.endFill();
};
if (lineAlpha){
_arg2.lineStyle();
};
_arg3.renderStatistics.triangles++;
} else {
if (bitmap){
focus = _arg3.camera.focus;
tempPreBmp = (_arg4) ? _arg4 : bitmap;
tempPreRSD = _arg3;
tempPreGrp = _arg2;
cullRect = _arg3.viewPort.cullingRectangle;
renderRec(_triMap, _arg1.v0, _arg1.v1, _arg1.v2, 0);
};
};
}
public function get precision():int{
return (_precision);
}
public function resetMapping():void{
uvMatrices = new Dictionary();
}
override public function copy(_arg1:MaterialObject3D):void{
super.copy(_arg1);
this.maxU = _arg1.maxU;
this.maxV = _arg1.maxV;
}
override public function toString():String{
return (((((("Texture:" + this.texture) + " lineColor:") + this.lineColor) + " lineAlpha:") + this.lineAlpha));
}
public function get pixelPrecision():int{
return (_perPixelPrecision);
}
public function set precise(_arg1:Boolean):void{
_precise = _arg1;
}
protected function extendBitmapEdges(_arg1:BitmapData, _arg2:Number, _arg3:Number):void{
var _local6:int;
var _local4:Rectangle = new Rectangle();
var _local5:Point = new Point();
if (_arg1.width > _arg2){
_local4.x = (_arg2 - 1);
_local4.y = 0;
_local4.width = 1;
_local4.height = _arg3;
_local5.y = 0;
_local6 = _arg2;
while (_local6 < _arg1.width) {
_local5.x = _local6;
_arg1.copyPixels(_arg1, _local4, _local5);
_local6++;
};
};
if (_arg1.height > _arg3){
_local4.x = 0;
_local4.y = (_arg3 - 1);
_local4.width = _arg1.width;
_local4.height = 1;
_local5.x = 0;
_local6 = _arg3;
while (_local6 < _arg1.height) {
_local5.y = _local6;
_arg1.copyPixels(_arg1, _local4, _local5);
_local6++;
};
};
}
override public function destroy():void{
super.destroy();
if (uvMatrices){
uvMatrices = null;
};
if (bitmap){
bitmap.dispose();
};
this.renderRecStorage = null;
}
public function set precision(_arg1:int):void{
_precision = _arg1;
}
}
}//package org.papervision3d.materials
Section 124
//ColorMaterial (org.papervision3d.materials.ColorMaterial)
package org.papervision3d.materials {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.render.draw.*;
import org.papervision3d.core.material.*;
public class ColorMaterial extends TriangleMaterial implements ITriangleDrawer {
public function ColorMaterial(_arg1:Number=0xFF00FF, _arg2:Number=1, _arg3:Boolean=false){
this.fillColor = _arg1;
this.fillAlpha = _arg2;
this.interactive = _arg3;
}
override public function toString():String{
return (((("ColorMaterial - color:" + this.fillColor) + " alpha:") + this.fillAlpha));
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
var _local6:Number = _arg1.v0.x;
var _local7:Number = _arg1.v0.y;
var _local8:Number = _arg1.v1.x;
var _local9:Number = _arg1.v1.y;
var _local10:Number = _arg1.v2.x;
var _local11:Number = _arg1.v2.y;
_arg2.beginFill(fillColor, fillAlpha);
_arg2.moveTo(_local6, _local7);
_arg2.lineTo(_local8, _local9);
_arg2.lineTo(_local10, _local11);
_arg2.lineTo(_local6, _local7);
_arg2.endFill();
_arg3.renderStatistics.triangles++;
}
override public function clone():MaterialObject3D{
var _local1:MaterialObject3D = new ColorMaterial();
_local1.copy(this);
return (_local1);
}
}
}//package org.papervision3d.materials
Section 125
//MovieMaterial (org.papervision3d.materials.MovieMaterial)
package org.papervision3d.materials {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.render.material.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.render.draw.*;
public class MovieMaterial extends BitmapMaterial implements ITriangleDrawer, IUpdateBeforeMaterial, IUpdateAfterMaterial {
public var movieTransparent:Boolean;
private var quality:String;
private var materialIsUsed:Boolean;// = false
private var stage:Stage;
private var autoClipRect:Rectangle;
public var allowAutoResize:Boolean;// = false
public var movie:DisplayObject;
private var movieAnimated:Boolean;
protected var recreateBitmapInSuper:Boolean;
private var userClipRect:Rectangle;
public function MovieMaterial(_arg1:DisplayObject=null, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:Boolean=false, _arg5:Rectangle=null){
movieTransparent = _arg2;
this.animated = _arg3;
this.precise = _arg4;
userClipRect = _arg5;
if (_arg1){
texture = _arg1;
};
}
protected function createBitmapFromSprite(_arg1:DisplayObject):BitmapData{
movie = _arg1;
initBitmap(movie);
drawBitmap();
bitmap = super.createBitmap(bitmap);
return (bitmap);
}
public function set rect(_arg1:Rectangle):void{
userClipRect = _arg1;
createBitmapFromSprite(movie);
}
public function updateAfterRender(_arg1:RenderSessionData):void{
if ((((movieAnimated == true)) && ((materialIsUsed == true)))){
drawBitmap();
if (recreateBitmapInSuper){
bitmap = super.createBitmap(bitmap);
recreateBitmapInSuper = false;
};
};
}
public function set animated(_arg1:Boolean):void{
movieAnimated = _arg1;
}
public function drawBitmap():void{
var _local3:String;
bitmap.fillRect(bitmap.rect, fillColor);
if (((stage) && (quality))){
_local3 = stage.quality;
stage.quality = quality;
};
var _local1:Rectangle = rect;
var _local2:Matrix = new Matrix(1, 0, 0, 1, -(_local1.x), -(_local1.y));
bitmap.draw(movie, _local2, movie.transform.colorTransform, null);
if (!userClipRect){
autoClipRect = movie.getBounds(movie);
};
if (((stage) && (quality))){
stage.quality = _local3;
};
}
override public function get texture():Object{
return (this._texture);
}
public function updateBeforeRender(_arg1:RenderSessionData):void{
var _local2:int;
var _local3:int;
materialIsUsed = false;
if (movieAnimated){
if (userClipRect){
_local2 = int((userClipRect.width + 0.5));
_local3 = int((userClipRect.height + 0.5));
} else {
_local2 = int((movie.width + 0.5));
_local3 = int((movie.height + 0.5));
};
if (((allowAutoResize) && (((!((_local2 == bitmap.width))) || (!((_local3 == bitmap.height))))))){
initBitmap(movie);
recreateBitmapInSuper = true;
};
};
}
protected function initBitmap(_arg1:DisplayObject):void{
if (bitmap){
bitmap.dispose();
};
if (userClipRect){
bitmap = new BitmapData(int((userClipRect.width + 0.5)), int((userClipRect.height + 0.5)), movieTransparent, fillColor);
} else {
if ((((_arg1.width == 0)) || ((_arg1.height == 0)))){
bitmap = new BitmapData(0x0100, 0x0100, movieTransparent, fillColor);
} else {
bitmap = new BitmapData(int((_arg1.width + 0.5)), int((_arg1.height + 0.5)), movieTransparent, fillColor);
};
};
}
public function get animated():Boolean{
return (movieAnimated);
}
public function get rect():Rectangle{
var _local1:Rectangle = ((userClipRect) || (autoClipRect));
if (((!(_local1)) && (movie))){
_local1 = movie.getBounds(movie);
};
return (_local1);
}
override public function set texture(_arg1:Object):void{
if ((_arg1 is DisplayObject) == false){
PaperLogger.error("MovieMaterial.texture requires a Sprite to be passed as the object");
return;
};
bitmap = createBitmapFromSprite(DisplayObject(_arg1));
_texture = _arg1;
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
materialIsUsed = true;
super.drawTriangle(_arg1, _arg2, _arg3, _arg4, _arg5);
}
public function setQuality(_arg1:String, _arg2:Stage, _arg3:Boolean=true):void{
this.quality = _arg1;
this.stage = _arg2;
if (_arg3){
createBitmapFromSprite(movie);
};
}
}
}//package org.papervision3d.materials
Section 126
//WireframeMaterial (org.papervision3d.materials.WireframeMaterial)
package org.papervision3d.materials {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.core.render.draw.*;
import org.papervision3d.core.material.*;
public class WireframeMaterial extends TriangleMaterial implements ITriangleDrawer {
public function WireframeMaterial(_arg1:Number=0xFF00FF, _arg2:Number=1, _arg3:Number=0){
this.lineColor = _arg1;
this.lineAlpha = _arg2;
this.lineThickness = _arg3;
this.doubleSided = false;
}
override public function toString():String{
return (((("WireframeMaterial - color:" + this.lineColor) + " alpha:") + this.lineAlpha));
}
override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{
var _local6:Number = _arg1.v0.x;
var _local7:Number = _arg1.v0.y;
if (lineAlpha){
_arg2.lineStyle(lineThickness, lineColor, lineAlpha);
_arg2.moveTo(_local6, _local7);
_arg2.lineTo(_arg1.v1.x, _arg1.v1.y);
_arg2.lineTo(_arg1.v2.x, _arg1.v2.y);
_arg2.lineTo(_local6, _local7);
_arg2.lineStyle();
_arg3.renderStatistics.triangles++;
};
}
}
}//package org.papervision3d.materials
Section 127
//Cube (org.papervision3d.objects.primitives.Cube)
package org.papervision3d.objects.primitives {
import org.papervision3d.core.proto.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.geom.*;
import org.papervision3d.*;
public class Cube extends TriangleMesh3D {
public var segments:Number3D;
private var insideFaces:int;
private var excludeFaces:int;
public static var ALL:int = (((((FRONT + BACK) + RIGHT) + LEFT) + TOP) + BOTTOM);
public static var LEFT:int = 8;
public static var FRONT:int = 1;
public static var BOTTOM:int = 32;
public static var TOP:int = 16;
public static var BACK:int = 2;
public static var NONE:int = 0;
public static var RIGHT:int = 4;
public function Cube(_arg1:MaterialsList, _arg2:Number=500, _arg3:Number=500, _arg4:Number=500, _arg5:int=1, _arg6:int=1, _arg7:int=1, _arg8:int=0, _arg9:int=0){
super(_arg1.getMaterialByName("all"), new Array(), new Array(), null);
this.materials = _arg1;
this.insideFaces = _arg8;
this.excludeFaces = _arg9;
segments = new Number3D(_arg5, _arg6, _arg7);
buildCube(_arg2, _arg4, _arg3);
}
public function destroy():void{
var _local1:MaterialObject3D;
for each (_local1 in materials) {
_local1.unregisterObject(this);
};
}
protected function buildCube(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local7:Triangle3D;
var _local4:Number = (_arg1 / 2);
var _local5:Number = (_arg2 / 2);
var _local6:Number = (_arg3 / 2);
if (!(excludeFaces & FRONT)){
buildPlane("front", "x", "y", _arg1, _arg2, _local6, !(Boolean((insideFaces & FRONT))));
};
if (!(excludeFaces & BACK)){
buildPlane("back", "x", "y", _arg1, _arg2, -(_local6), Boolean((insideFaces & BACK)));
};
if (!(excludeFaces & RIGHT)){
buildPlane("right", "z", "y", _arg3, _arg2, _local4, Boolean((insideFaces & RIGHT)));
};
if (!(excludeFaces & LEFT)){
buildPlane("left", "z", "y", _arg3, _arg2, -(_local4), !(Boolean((insideFaces & LEFT))));
};
if (!(excludeFaces & TOP)){
buildPlane("top", "x", "z", _arg1, _arg3, _local5, Boolean((insideFaces & TOP)));
};
if (!(excludeFaces & BOTTOM)){
buildPlane("bottom", "x", "z", _arg1, _arg3, -(_local5), !(Boolean((insideFaces & BOTTOM))));
};
mergeVertices();
for each (_local7 in this.geometry.faces) {
_local7.renderCommand.create = createRenderTriangle;
};
this.geometry.ready = true;
if (Papervision3D.useRIGHTHANDED){
this.geometry.flipFaces();
};
}
protected function buildPlane(_arg1:String, _arg2:String, _arg3:String, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Boolean=false):void{
var _local8:MaterialObject3D;
var _local9:String;
var _local23:NumberUV;
var _local24:NumberUV;
var _local25:NumberUV;
var _local26:int;
var _local27:Vertex3D;
var _local28:Vertex3D;
var _local29:Vertex3D;
var _local30:Vertex3D;
_local8 = materials.getMaterialByName(_arg1);
if (!_local8){
_local8 = materials.getMaterialByName("all");
if (!_local8){
PaperLogger.warning("Required material not found in given materials list. Supported materials are: front, back, right, left, top, bottom & all.");
return;
};
};
_local8.registerObject(this);
if ((((((_arg2 == "x")) && ((_arg3 == "y")))) || ((((_arg2 == "y")) && ((_arg3 == "x")))))){
_local9 = "z";
} else {
if ((((((_arg2 == "x")) && ((_arg3 == "z")))) || ((((_arg2 == "z")) && ((_arg3 == "x")))))){
_local9 = "y";
} else {
if ((((((_arg2 == "z")) && ((_arg3 == "y")))) || ((((_arg2 == "y")) && ((_arg3 == "z")))))){
_local9 = "x";
};
};
};
var _local10:Number = (_arg7) ? -1 : 1;
var _local11:Number = this.segments[_arg2];
var _local12:Number = this.segments[_arg3];
var _local13:Number = (_local11 + 1);
var _local14:Number = (_local12 + 1);
var _local15:Array = this.geometry.vertices;
var _local16:Array = this.geometry.faces;
var _local17:Array = new Array();
var _local18:Number = (_arg4 / 2);
var _local19:Number = (_arg5 / 2);
var _local20:Number = (_arg4 / _local11);
var _local21:Number = (_arg5 / _local12);
var _local22:int;
while (_local22 < _local13) {
_local26 = 0;
while (_local26 < _local14) {
_local27 = new Vertex3D();
_local27[_arg2] = (((_local22 * _local20) - _local18) * _local10);
_local27[_arg3] = ((_local26 * _local21) - _local19);
_local27[_local9] = _arg6;
_local15.push(_local27);
_local17.push(_local27);
_local26++;
};
_local22++;
};
_local22 = 0;
while (_local22 < _local11) {
_local26 = 0;
while (_local26 < _local12) {
_local28 = _local17[((_local22 * _local14) + _local26)];
_local29 = _local17[((_local22 * _local14) + (_local26 + 1))];
_local30 = _local17[(((_local22 + 1) * _local14) + _local26)];
_local23 = new NumberUV((_local22 / _local11), (_local26 / _local12));
_local24 = new NumberUV((_local22 / _local11), ((_local26 + 1) / _local12));
_local25 = new NumberUV(((_local22 + 1) / _local11), (_local26 / _local12));
_local16.push(new Triangle3D(this, [_local28, _local30, _local29], _local8, [_local23, _local25, _local24]));
_local28 = _local17[(((_local22 + 1) * _local14) + (_local26 + 1))];
_local29 = _local17[(((_local22 + 1) * _local14) + _local26)];
_local30 = _local17[((_local22 * _local14) + (_local26 + 1))];
_local23 = new NumberUV(((_local22 + 1) / _local11), ((_local26 + 1) / _local12));
_local24 = new NumberUV(((_local22 + 1) / _local11), (_local26 / _local12));
_local25 = new NumberUV((_local22 / _local11), ((_local26 + 1) / _local12));
_local16.push(new Triangle3D(this, [_local29, _local28, _local30], _local8, [_local24, _local23, _local25]));
_local26++;
};
_local22++;
};
}
}
}//package org.papervision3d.objects.primitives
Section 128
//Plane (org.papervision3d.objects.primitives.Plane)
package org.papervision3d.objects.primitives {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.geom.*;
import org.papervision3d.*;
public class Plane extends TriangleMesh3D {
public var segmentsH:Number;
public var segmentsW:Number;
public static var DEFAULT_SCALE:Number = 1;
public static var DEFAULT_SEGMENTS:Number = 1;
public static var DEFAULT_SIZE:Number = 500;
public function Plane(_arg1:MaterialObject3D=null, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0){
super(_arg1, new Array(), new Array(), null);
this.segmentsW = ((_arg4) || (DEFAULT_SEGMENTS));
this.segmentsH = ((_arg5) || (this.segmentsW));
var _local6:Number = DEFAULT_SCALE;
if (!_arg3){
if (_arg2){
_local6 = _arg2;
};
if (((_arg1) && (_arg1.bitmap))){
_arg2 = (_arg1.bitmap.width * _local6);
_arg3 = (_arg1.bitmap.height * _local6);
} else {
_arg2 = (DEFAULT_SIZE * _local6);
_arg3 = (DEFAULT_SIZE * _local6);
};
};
buildPlane(_arg2, _arg3);
}
private function buildPlane(_arg1:Number, _arg2:Number):void{
var _local14:NumberUV;
var _local15:NumberUV;
var _local16:NumberUV;
var _local17:int;
var _local18:Number;
var _local19:Number;
var _local20:Vertex3D;
var _local21:Vertex3D;
var _local22:Vertex3D;
var _local3:Number = this.segmentsW;
var _local4:Number = this.segmentsH;
var _local5:Number = (_local3 + 1);
var _local6:Number = (_local4 + 1);
var _local7:Array = this.geometry.vertices;
var _local8:Array = this.geometry.faces;
var _local9:Number = (_arg1 / 2);
var _local10:Number = (_arg2 / 2);
var _local11:Number = (_arg1 / _local3);
var _local12:Number = (_arg2 / _local4);
var _local13:int;
while (_local13 < (_local3 + 1)) {
_local17 = 0;
while (_local17 < _local6) {
_local18 = ((_local13 * _local11) - _local9);
_local19 = ((_local17 * _local12) - _local10);
_local7.push(new Vertex3D(_local18, _local19, 0));
_local17++;
};
_local13++;
};
_local13 = 0;
while (_local13 < _local3) {
_local17 = 0;
while (_local17 < _local4) {
_local20 = _local7[((_local13 * _local6) + _local17)];
_local21 = _local7[((_local13 * _local6) + (_local17 + 1))];
_local22 = _local7[(((_local13 + 1) * _local6) + _local17)];
_local14 = new NumberUV((_local13 / _local3), (_local17 / _local4));
_local15 = new NumberUV((_local13 / _local3), ((_local17 + 1) / _local4));
_local16 = new NumberUV(((_local13 + 1) / _local3), (_local17 / _local4));
_local8.push(new Triangle3D(this, [_local20, _local22, _local21], material, [_local14, _local16, _local15]));
_local20 = _local7[(((_local13 + 1) * _local6) + (_local17 + 1))];
_local21 = _local7[(((_local13 + 1) * _local6) + _local17)];
_local22 = _local7[((_local13 * _local6) + (_local17 + 1))];
_local14 = new NumberUV(((_local13 + 1) / _local3), ((_local17 + 1) / _local4));
_local15 = new NumberUV(((_local13 + 1) / _local3), (_local17 / _local4));
_local16 = new NumberUV((_local13 / _local3), ((_local17 + 1) / _local4));
_local8.push(new Triangle3D(this, [_local20, _local22, _local21], material, [_local14, _local16, _local15]));
_local17++;
};
_local13++;
};
this.geometry.ready = true;
if (Papervision3D.useRIGHTHANDED){
this.geometry.flipFaces();
};
}
}
}//package org.papervision3d.objects.primitives
Section 129
//Sphere (org.papervision3d.objects.primitives.Sphere)
package org.papervision3d.objects.primitives {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.core.geom.*;
import org.papervision3d.*;
public class Sphere extends TriangleMesh3D {
private var segmentsH:Number;
private var segmentsW:Number;
public static var MIN_SEGMENTSW:Number = 3;
public static var DEFAULT_SCALE:Number = 1;
public static var DEFAULT_RADIUS:Number = 100;
public static var DEFAULT_SEGMENTSH:Number = 6;
public static var MIN_SEGMENTSH:Number = 2;
public static var DEFAULT_SEGMENTSW:Number = 8;
public function Sphere(_arg1:MaterialObject3D=null, _arg2:Number=100, _arg3:int=8, _arg4:int=6, _arg5:String=null){
super(_arg1, new Array(), new Array(), _arg5);
this.segmentsW = Math.max(MIN_SEGMENTSW, ((_arg3) || (DEFAULT_SEGMENTSW)));
this.segmentsH = Math.max(MIN_SEGMENTSH, ((_arg4) || (DEFAULT_SEGMENTSH)));
if (_arg2 == 0){
_arg2 = DEFAULT_RADIUS;
};
var _local6:Number = DEFAULT_SCALE;
buildSphere(_arg2);
}
private function buildSphere(_arg1:Number):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local11:Triangle3D;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Array;
var _local16:Vertex3D;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:int;
var _local21:Boolean;
var _local22:Vertex3D;
var _local23:Vertex3D;
var _local24:Vertex3D;
var _local25:Vertex3D;
var _local26:Number;
var _local27:Number;
var _local28:Number;
var _local29:Number;
var _local30:NumberUV;
var _local31:NumberUV;
var _local32:NumberUV;
var _local33:NumberUV;
var _local5:Number = Math.max(3, this.segmentsW);
var _local6:Number = Math.max(2, this.segmentsH);
var _local7:Array = this.geometry.vertices;
var _local8:Array = this.geometry.faces;
var _local9:Array = new Array();
_local3 = 0;
while (_local3 < (_local6 + 1)) {
_local12 = Number((_local3 / _local6));
_local13 = (-(_arg1) * Math.cos((_local12 * Math.PI)));
_local14 = (_arg1 * Math.sin((_local12 * Math.PI)));
_local15 = new Array();
_local2 = 0;
while (_local2 < _local5) {
_local17 = Number(((2 * _local2) / _local5));
_local18 = (_local14 * Math.sin((_local17 * Math.PI)));
_local19 = (_local14 * Math.cos((_local17 * Math.PI)));
if (!(((((_local3 == 0)) || ((_local3 == _local6)))) && ((_local2 > 0)))){
_local16 = new Vertex3D(_local19, _local13, _local18);
_local7.push(_local16);
};
_local15.push(_local16);
_local2++;
};
_local9.push(_local15);
_local3++;
};
var _local10:int = _local9.length;
_local3 = 0;
while (_local3 < _local10) {
_local20 = _local9[_local3].length;
if (_local3 > 0){
_local2 = 0;
while (_local2 < _local20) {
_local21 = (_local2 == (_local20 - 1));
_local22 = _local9[_local3][(_local21) ? 0 : (_local2 + 1)];
_local23 = _local9[_local3][(_local21) ? (_local20 - 1) : _local2];
_local24 = _local9[(_local3 - 1)][(_local21) ? (_local20 - 1) : _local2];
_local25 = _local9[(_local3 - 1)][(_local21) ? 0 : (_local2 + 1)];
_local26 = (_local3 / (_local10 - 1));
_local27 = ((_local3 - 1) / (_local10 - 1));
_local28 = ((_local2 + 1) / _local20);
_local29 = (_local2 / _local20);
_local30 = new NumberUV(_local28, _local27);
_local31 = new NumberUV(_local28, _local26);
_local32 = new NumberUV(_local29, _local26);
_local33 = new NumberUV(_local29, _local27);
if (_local3 < (_local9.length - 1)){
_local8.push(new Triangle3D(this, new Array(_local22, _local23, _local24), material, new Array(_local31, _local32, _local33)));
};
if (_local3 > 1){
_local8.push(new Triangle3D(this, new Array(_local22, _local24, _local25), material, new Array(_local31, _local33, _local30)));
};
_local2++;
};
};
_local3++;
};
for each (_local11 in _local8) {
_local11.renderCommand.create = createRenderTriangle;
};
this.geometry.ready = true;
if (Papervision3D.useRIGHTHANDED){
this.geometry.flipFaces();
};
}
}
}//package org.papervision3d.objects.primitives
Section 130
//BeginFill (org.papervision3d.objects.special.commands.BeginFill)
package org.papervision3d.objects.special.commands {
import flash.display.*;
public class BeginFill implements IVectorShape {
public var fillColor:uint;
public var fillAlpha:Number;
public function BeginFill(_arg1:uint=0, _arg2:Number=1):void{
this.fillColor = _arg1;
this.fillAlpha = _arg2;
}
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
_arg1.beginFill(fillColor, fillAlpha);
return (true);
}
}
}//package org.papervision3d.objects.special.commands
Section 131
//CurveTo (org.papervision3d.objects.special.commands.CurveTo)
package org.papervision3d.objects.special.commands {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.special.*;
public class CurveTo implements IVectorShape {
public var anchor:Vertex3D;
public var control:Vertex3D;
private static var halfPI:Number = 1.5707963267949;
public function CurveTo(_arg1:Vertex3D, _arg2:Vertex3D){
this.control = _arg1;
this.anchor = _arg2;
}
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
if (((control.vertex3DInstance.visible) && (anchor.vertex3DInstance.visible))){
if (_arg2){
_arg1.curveTo(control.vertex3DInstance.x, control.vertex3DInstance.y, anchor.vertex3DInstance.x, anchor.vertex3DInstance.y);
} else {
_arg1.moveTo(control.vertex3DInstance.x, control.vertex3DInstance.y);
};
return (true);
};
return (false);
}
public function drawScaledStroke(_arg1:Vertex3D, _arg2:Graphics, _arg3:RenderSessionData, _arg4:VectorShapeMaterial):void{
if (((!(control.vertex3DInstance.visible)) || (!(anchor.vertex3DInstance.visible)))){
return;
};
if (!_arg1.vertex3DInstance.visible){
_arg2.moveTo(control.vertex3DInstance.x, control.vertex3DInstance.y);
return;
};
var _local5:Number = _arg3.camera.focus;
var _local6:Number = (_local5 * _arg3.camera.zoom);
var _local7:Number = ((_local6 / (_local5 + anchor.vertex3DInstance.z)) * _arg4.lineThickness);
var _local8:Number = ((_local6 / (_local5 + _arg1.vertex3DInstance.z)) * _arg4.lineThickness);
var _local9:Number = ((_local6 / (_local5 + control.vertex3DInstance.z)) * _arg4.lineThickness);
var _local10:Number = anchor.vertex3DInstance.x;
var _local11:Number = anchor.vertex3DInstance.y;
var _local12:Number = anchor.vertex3DInstance.x;
var _local13:Number = anchor.vertex3DInstance.y;
var _local14:Number = _arg1.vertex3DInstance.x;
var _local15:Number = _arg1.vertex3DInstance.y;
var _local16:Number = _arg1.vertex3DInstance.x;
var _local17:Number = _arg1.vertex3DInstance.y;
var _local18:Number = control.vertex3DInstance.x;
var _local19:Number = control.vertex3DInstance.y;
var _local20:Number = _local18;
var _local21:Number = _local19;
var _local22:Number = Math.atan2((_local14 - _local12), (_local15 - _local13));
var _local23:Number = Math.sin((_local22 - halfPI));
var _local24:Number = Math.cos((_local22 - halfPI));
_local10 = (_local10 - (_local23 * _local7));
_local11 = (_local11 - (_local24 * _local7));
_local12 = (_local12 + (_local23 * _local7));
_local13 = (_local13 + (_local24 * _local7));
_local14 = (_local14 + (_local23 * _local8));
_local15 = (_local15 + (_local24 * _local8));
_local16 = (_local16 - (_local23 * _local8));
_local17 = (_local17 - (_local24 * _local8));
_local18 = (_local18 - (_local23 * _local9));
_local19 = (_local19 - (_local24 * _local9));
_local20 = (_local20 + (_local23 * _local9));
_local21 = (_local21 + (_local24 * _local9));
_arg2.lineStyle();
_arg2.beginFill(_arg4.lineColor, _arg4.lineAlpha);
_arg2.moveTo(_local10, _local11);
_arg2.curveTo((anchor.vertex3DInstance.x - (Math.sin(_local22) * _local7)), (anchor.vertex3DInstance.y - (Math.cos(_local22) * _local7)), _local12, _local13);
_arg2.curveTo(_local20, _local21, _local14, _local15);
_arg2.curveTo((_arg1.vertex3DInstance.x + (Math.sin(_local22) * _local8)), (_arg1.vertex3DInstance.y + (Math.cos(_local22) * _local8)), _local16, _local17);
_arg2.curveTo(_local18, _local19, _local10, _local11);
_arg2.endFill();
}
}
}//package org.papervision3d.objects.special.commands
Section 132
//EndFill (org.papervision3d.objects.special.commands.EndFill)
package org.papervision3d.objects.special.commands {
import flash.display.*;
public class EndFill implements IVectorShape {
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
return (_arg2);
}
}
}//package org.papervision3d.objects.special.commands
Section 133
//IVectorShape (org.papervision3d.objects.special.commands.IVectorShape)
package org.papervision3d.objects.special.commands {
import flash.display.*;
public interface IVectorShape {
function draw(_arg1:Graphics, _arg2:Boolean):Boolean;
}
}//package org.papervision3d.objects.special.commands
Section 134
//LineStyle (org.papervision3d.objects.special.commands.LineStyle)
package org.papervision3d.objects.special.commands {
import flash.display.*;
public class LineStyle implements IVectorShape {
public var caps:String;
public var color:uint;
public var joints:String;
public var scaleMode:String;
public var thickness:Number;
public var pixelHinting:Boolean;
public var miterLimit:Number;
public var alpha:Number;
public function LineStyle(_arg1:Number=-1, _arg2:uint=0, _arg3:Number=1, _arg4:Boolean=false, _arg5:String="normal", _arg6:String=null, _arg7:String=null, _arg8:Number=3){
this.thickness = _arg1;
this.color = _arg2;
this.alpha = _arg3;
this.pixelHinting = _arg4;
this.scaleMode = _arg5;
this.caps = _arg6;
this.joints = _arg7;
this.miterLimit = _arg8;
}
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
if (thickness == -1){
_arg1.lineStyle();
} else {
_arg1.lineStyle(thickness, color, alpha, pixelHinting, scaleMode, caps, joints, miterLimit);
};
return (_arg2);
}
}
}//package org.papervision3d.objects.special.commands
Section 135
//LineTo (org.papervision3d.objects.special.commands.LineTo)
package org.papervision3d.objects.special.commands {
import org.papervision3d.core.render.data.*;
import flash.display.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.special.*;
public class LineTo implements IVectorShape {
public var vertex:Vertex3D;
private static const halfPI:Number = 1.5707963267949;
public function LineTo(_arg1:Vertex3D){
this.vertex = _arg1;
}
public function drawScaledStroke(_arg1:Vertex3D, _arg2:Graphics, _arg3:RenderSessionData, _arg4:VectorShapeMaterial):void{
if (!vertex.vertex3DInstance.visible){
return;
};
if (!_arg1.vertex3DInstance.visible){
_arg2.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y);
return;
};
var _local5:Number = _arg3.camera.focus;
var _local6:Number = (_local5 * _arg3.camera.zoom);
var _local7:Number = ((_local6 / (_local5 + vertex.vertex3DInstance.z)) * _arg4.lineThickness);
var _local8:Number = ((_local6 / (_local5 + _arg1.vertex3DInstance.z)) * _arg4.lineThickness);
var _local9:Number = vertex.vertex3DInstance.x;
var _local10:Number = vertex.vertex3DInstance.y;
var _local11:Number = vertex.vertex3DInstance.x;
var _local12:Number = vertex.vertex3DInstance.y;
var _local13:Number = _arg1.vertex3DInstance.x;
var _local14:Number = _arg1.vertex3DInstance.y;
var _local15:Number = _arg1.vertex3DInstance.x;
var _local16:Number = _arg1.vertex3DInstance.y;
var _local17:Number = Math.atan2((_local13 - _local11), (_local14 - _local12));
var _local18:Number = Math.sin((_local17 - halfPI));
var _local19:Number = Math.cos((_local17 - halfPI));
_local9 = (_local9 - (_local18 * _local7));
_local10 = (_local10 - (_local19 * _local7));
_local11 = (_local11 + (_local18 * _local7));
_local12 = (_local12 + (_local19 * _local7));
_local13 = (_local13 + (_local18 * _local8));
_local14 = (_local14 + (_local19 * _local8));
_local15 = (_local15 - (_local18 * _local8));
_local16 = (_local16 - (_local19 * _local8));
_arg2.lineStyle();
_arg2.beginFill(_arg4.lineColor, _arg4.lineAlpha);
_arg2.moveTo(_local9, _local10);
_arg2.curveTo((vertex.vertex3DInstance.x - (Math.sin(_local17) * _local7)), (vertex.vertex3DInstance.y - (Math.cos(_local17) * _local7)), _local11, _local12);
_arg2.lineTo(_local13, _local14);
_arg2.curveTo((_arg1.vertex3DInstance.x + (Math.sin(_local17) * _local8)), (_arg1.vertex3DInstance.y + (Math.cos(_local17) * _local8)), _local15, _local16);
_arg2.lineTo(_local9, _local10);
_arg2.endFill();
}
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
if (vertex.vertex3DInstance.visible){
if (_arg2){
_arg1.lineTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y);
} else {
_arg1.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y);
};
return (true);
};
return (false);
}
}
}//package org.papervision3d.objects.special.commands
Section 136
//MoveTo (org.papervision3d.objects.special.commands.MoveTo)
package org.papervision3d.objects.special.commands {
import flash.display.*;
import org.papervision3d.core.geom.renderables.*;
public class MoveTo implements IVectorShape {
public var vertex:Vertex3D;
public function MoveTo(_arg1:Vertex3D){
this.vertex = _arg1;
}
public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{
if (vertex.vertex3DInstance.visible){
_arg1.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y);
return (true);
};
return (false);
}
}
}//package org.papervision3d.objects.special.commands
Section 137
//Graphics3D (org.papervision3d.objects.special.Graphics3D)
package org.papervision3d.objects.special {
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.objects.special.commands.*;
public class Graphics3D {
private var vectorshape:VectorShape3D;
public function Graphics3D(_arg1:VectorShape3D){
this.vectorshape = _arg1;
}
public function endFill():void{
vectorshape.graphicsCommands.push(new EndFill());
}
public function drawRect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
moveTo(_arg1, _arg2);
lineTo((_arg1 + _arg3), _arg2);
lineTo((_arg1 + _arg3), (_arg2 + _arg4));
lineTo(_arg1, (_arg2 + _arg4));
lineTo(_arg1, _arg2);
}
public function curveTo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
var _local5:Vertex3D = new Vertex3D(_arg1, _arg2, 0);
vectorshape.geometry.vertices.push(_local5);
var _local6:Vertex3D = new Vertex3D(_arg3, _arg4, 0);
vectorshape.geometry.vertices.push(_local6);
vectorshape.graphicsCommands.push(new CurveTo(_local5, _local6));
}
public function moveTo(_arg1:Number, _arg2:Number):void{
var _local3:Vertex3D = new Vertex3D(_arg1, _arg2, 0);
vectorshape.geometry.vertices.push(_local3);
vectorshape.graphicsCommands.push(new MoveTo(_local3));
}
public function clear():void{
vectorshape.geometry.vertices = [];
vectorshape.geometry.faces = [];
vectorshape.graphicsCommands = [];
}
public function drawRoundRect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{
moveTo(_arg1, (_arg2 + _arg6));
curveTo(_arg1, _arg2, (_arg1 + _arg5), _arg2);
lineTo(((_arg1 + _arg3) - _arg5), _arg2);
curveTo((_arg1 + _arg3), _arg2, (_arg1 + _arg3), (_arg2 + _arg6));
lineTo((_arg1 + _arg3), ((_arg2 + _arg4) - _arg6));
curveTo((_arg1 + _arg3), (_arg2 + _arg4), ((_arg1 + _arg3) - _arg6), (_arg2 + _arg4));
lineTo((_arg1 + _arg5), (_arg2 + _arg4));
curveTo(_arg1, (_arg2 + _arg4), _arg1, ((_arg2 + _arg4) - _arg6));
lineTo(_arg1, (_arg2 + _arg6));
}
public function lineTo(_arg1:Number, _arg2:Number):void{
var _local3:Vertex3D = new Vertex3D(_arg1, _arg2, 0);
vectorshape.geometry.vertices.push(_local3);
vectorshape.graphicsCommands.push(new LineTo(_local3));
}
public function drawCircle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:int=8):void{
drawEllipse(_arg1, _arg2, _arg3, _arg3, _arg4);
}
public function drawEllipse(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int=8):void{
var _local11:Number;
var _local12:Number;
var _local6:Array = new Array();
var _local7:Number = ((2 * Math.PI) / _arg5);
var _local8:int;
while (_local8 < _arg5) {
_local6[_local8] = new Object();
_local6[_local8].x = (_arg1 + (Math.sin((_local8 * _local7)) * _arg3));
_local6[_local8].y = (_arg2 + (Math.cos((_local8 * _local7)) * _arg4));
_local8++;
};
var _local9:Number = ((_local6[0].x + _local6[(_arg5 - 1)].x) / 2);
var _local10:Number = ((_local6[0].y + _local6[(_arg5 - 1)].y) / 2);
moveTo(_local9, _local10);
_local8 = 0;
while (_local8 < (_arg5 - 1)) {
_local11 = ((_local6[_local8].x + _local6[(_local8 + 1)].x) / 2);
_local12 = ((_local6[_local8].y + _local6[(_local8 + 1)].y) / 2);
curveTo(_local6[_local8].x, _local6[_local8].y, _local11, _local12);
_local8++;
};
curveTo(_local6[_local8].x, _local6[_local8].y, _local9, _local10);
}
public function beginFill(_arg1:uint, _arg2:Number=1):void{
vectorshape.graphicsCommands.push(new BeginFill(_arg1, _arg2));
}
public function lineStyle(_arg1:Number=-1, _arg2:uint=0, _arg3:Number=1, _arg4:Boolean=false, _arg5:String="normal", _arg6:String=null, _arg7:String=null, _arg8:Number=3):void{
vectorshape.graphicsCommands.push(new LineStyle(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8));
}
}
}//package org.papervision3d.objects.special
Section 138
//VectorShape3D (org.papervision3d.objects.special.VectorShape3D)
package org.papervision3d.objects.special {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.core.geom.*;
public class VectorShape3D extends Vertices3D {
public var graphicsCommands:Array;
public var renderCommand:RenderVectorShape;
public var graphics:Graphics3D;
public function VectorShape3D(_arg1:MaterialObject3D, _arg2:Array=null, _arg3:String=null){
graphics = new Graphics3D(this);
graphicsCommands = [];
renderCommand = new RenderVectorShape(this);
renderCommand.renderer = (_arg1 as VectorShapeMaterial);
this.material = _arg1;
super(_arg2, _arg3);
}
override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
var _local6:Vertex3D;
var _local3:Number = super.project(_arg1, _arg2);
var _local4:Boolean;
var _local5:Number = 0;
for each (_local6 in geometry.vertices) {
_local5 = (_local5 + _local6.vertex3DInstance.z);
_local4 = (((_local6.vertex3DInstance.z > 0)) || (_local4));
};
if (_local4){
_arg2.renderer.addToRenderList(renderCommand);
this.screenZ = (_local5 / geometry.vertices.length);
renderCommand.screenZ = this.screenZ;
};
return (_local3);
}
override public function set material(_arg1:MaterialObject3D):void{
super.material = _arg1;
renderCommand.renderer = (_arg1 as VectorShapeMaterial);
}
}
}//package org.papervision3d.objects.special
Section 139
//DisplayObject3D (org.papervision3d.objects.DisplayObject3D)
package org.papervision3d.objects {
import org.papervision3d.core.proto.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.view.*;
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.core.math.*;
import org.papervision3d.materials.shaders.*;
import org.papervision3d.view.layer.*;
import org.papervision3d.core.log.*;
import org.papervision3d.core.data.*;
import org.papervision3d.*;
import org.papervision3d.core.material.*;
public class DisplayObject3D extends DisplayObjectContainer3D {
public var extra:Object;
public var frustumTestMethod:int;// = 0
private var _rot:Quaternion;
public var id:int;
private var _rotationY:Number;
private var _rotationZ:Number;
public var cullTest:Number;// = 0
private var _lookatTarget:Number3D;
public var materials:MaterialsList;
public var meshSort:uint;// = 1
private var _rotationX:Number;
private var _qYaw:Quaternion;
private var _xAxis:Number3D;
private var _zAxis:Number3D;
private var _scaleDirty:Boolean;// = false
private var _autoCalcScreenCoords:Boolean;// = false
private var _tempScale:Number3D;
private var _numClones:uint;// = 0
public var alpha:Number;// = 1
public var useClipping:Boolean;// = true
public var screen:Number3D;
private var _scaleX:Number;
private var _scaleY:Number;
private var _scaleZ:Number;
public var geometry:GeometryObject3D;
private var _qPitch:Quaternion;
public var visible:Boolean;
protected var _userData:UserData;
public var screenZ:Number;
public var container:ViewportLayer;
protected var _useOwnContainer:Boolean;// = false
public var transform:Matrix3D;
private var _material:MaterialObject3D;
private var _position:Number3D;
public var name:String;
protected var _scene:SceneObject3D;// = null
private var _qRoll:Quaternion;
private var _localRotationZ:Number;// = 0
public var culled:Boolean;
public var world:Matrix3D;
public var blendMode:String;// = "normal"
private var _localRotationX:Number;// = 0
private var _localRotationY:Number;// = 0
public var view:Matrix3D;
public var parent:DisplayObjectContainer3D;
public var faces:Array;
private var _yAxis:Number3D;
public var flipLightDirection:Boolean;// = false
private var _rotation:Number3D;
protected var _transformDirty:Boolean;// = false
protected var _sorted:Array;
private var _rotationDirty:Boolean;// = false
public var parentContainer:DisplayObject3D;
public var testQuad:Boolean;// = true
public var filters:Array;
public static const MESH_SORT_CENTER:uint = 1;
private static const LEFT:Number3D = new Number3D(-1, 0, 0);
public static const MESH_SORT_CLOSE:uint = 3;
private static const BACKWARD:Number3D = new Number3D(0, 0, -1);
private static const FORWARD:Number3D = new Number3D(0, 0, 1);
public static const MESH_SORT_FAR:uint = 2;
private static const DOWN:Number3D = new Number3D(0, -1, 0);
private static const UP:Number3D = new Number3D(0, 1, 0);
private static const RIGHT:Number3D = new Number3D(1, 0, 0);
private static var entry_count:uint = 0;
private static var _newID:int = 0;
private static var _tempMatrix:Matrix3D = Matrix3D.IDENTITY;
public static var sortedArray:Array = new Array();
public static var faceLevelMode:Boolean;
private static var _tempQuat:Quaternion = new Quaternion();
private static var toRADIANS:Number = 0.0174532925199433;
private static var toDEGREES:Number = 57.2957795130823;
public function DisplayObject3D(_arg1:String=null, _arg2:GeometryObject3D=null):void{
faces = new Array();
filters = [];
screen = new Number3D();
_position = Number3D.ZERO;
_lookatTarget = Number3D.ZERO;
_zAxis = Number3D.ZERO;
_xAxis = Number3D.ZERO;
_yAxis = Number3D.ZERO;
_rotation = Number3D.ZERO;
_rot = new Quaternion();
_qPitch = new Quaternion();
_qYaw = new Quaternion();
_qRoll = new Quaternion();
super();
if (_arg1 != null){
PaperLogger.info(("DisplayObject3D: " + _arg1));
};
this.culled = false;
this.transform = Matrix3D.IDENTITY;
this.world = Matrix3D.IDENTITY;
this.view = Matrix3D.IDENTITY;
this.x = 0;
this.y = 0;
this.z = 0;
rotationX = 0;
rotationY = 0;
rotationZ = 0;
_localRotationX = (_localRotationY = (_localRotationZ = 0));
var _local3:Number = (Papervision3D.usePERCENT) ? 100 : 1;
scaleX = _local3;
scaleY = _local3;
scaleZ = _local3;
_tempScale = new Number3D();
this.visible = true;
this.id = _newID++;
this.name = ((_arg1) || (String(this.id)));
_numClones = 0;
if (_arg2){
addGeometry(_arg2);
};
}
public function set localRotationX(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (this._transformDirty){
updateTransform();
};
_qPitch.setFromAxisAngle(transform.n11, transform.n21, transform.n31, (_localRotationX - _arg1));
this.transform.calculateMultiply3x3(_qPitch.matrix, transform);
_localRotationX = _arg1;
_rotationDirty = true;
}
public function set y(_arg1:Number):void{
this.transform.n24 = _arg1;
}
public function set z(_arg1:Number):void{
this.transform.n34 = _arg1;
}
override public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{
_arg1 = super.addChild(_arg1, _arg2);
if (_arg1.scene == null){
_arg1.scene = scene;
};
if (this.useOwnContainer){
_arg1.parentContainer = this;
};
return (_arg1);
}
public function setChildMaterialByName(_arg1:String, _arg2:MaterialObject3D):void{
setChildMaterial(getChildByName(_arg1, true), _arg2);
}
public function moveDown(_arg1:Number):void{
translate(_arg1, DOWN);
}
public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{
var _local5:DisplayObject3D;
if (this._transformDirty){
updateTransform();
};
this.world.calculateMultiply(_arg1.world, this.transform);
if (_arg2.camera.culler){
if (this === _arg2.camera){
this.culled = true;
} else {
this.culled = (_arg2.camera.culler.testObject(this) < 0);
};
if (this.culled){
_arg2.renderStatistics.culledObjects++;
return (0);
};
} else {
this.culled = false;
};
if (_arg1 !== _arg2.camera){
if (_arg2.camera.useProjectionMatrix){
this.view.calculateMultiply4x4(_arg1.view, this.transform);
} else {
this.view.calculateMultiply(_arg1.view, this.transform);
};
} else {
if (_arg2.camera.useProjectionMatrix){
this.view.calculateMultiply4x4(_arg2.camera.eye, this.transform);
} else {
this.view.calculateMultiply(_arg2.camera.eye, this.transform);
};
};
if (_autoCalcScreenCoords){
calculateScreenCoords(_arg2.camera);
};
var _local3:Number = 0;
var _local4:Number = 0;
for each (_local5 in this._childrenByName) {
if (_local5.visible){
_local3 = (_local3 + _local5.project(this, _arg2));
_local4++;
};
};
return ((this.screenZ = (_local3 / _local4)));
}
public function set scene(_arg1:SceneObject3D):void{
var _local2:DisplayObject3D;
_scene = _arg1;
for each (_local2 in this._childrenByName) {
if (_local2.scene == null){
_local2.scene = _scene;
};
};
}
public function setChildMaterial(_arg1:DisplayObject3D, _arg2:MaterialObject3D, _arg3:MaterialObject3D=null):void{
var _local4:Triangle3D;
if (!_arg1){
return;
};
if (((!(_arg3)) || ((_arg1.material === _arg3)))){
_arg1.material = _arg2;
};
if (((_arg1.geometry) && (_arg1.geometry.faces))){
for each (_local4 in _arg1.geometry.faces) {
if (((!(_arg3)) || ((_local4.material === _arg3)))){
_local4.material = _arg2;
};
};
};
}
public function get userData():UserData{
return (_userData);
}
public function get material():MaterialObject3D{
return (_material);
}
public function set userData(_arg1:UserData):void{
_userData = _arg1;
}
public function set rotationX(_arg1:Number):void{
this._rotationX = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
this._transformDirty = true;
}
public function calculateScreenCoords(_arg1:CameraObject3D):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
if (_arg1.useProjectionMatrix){
_local2 = 0;
_local3 = 0;
_local4 = 0;
_local5 = ((((_local2 * view.n41) + (_local3 * view.n42)) + (_local4 * view.n43)) + view.n44);
_local6 = (_arg1.viewport.width / 2);
_local7 = (_arg1.viewport.height / 2);
screen.x = (((((_local2 * view.n11) + (_local3 * view.n12)) + (_local4 * view.n13)) + view.n14) / _local5);
screen.y = (((((_local2 * view.n21) + (_local3 * view.n22)) + (_local4 * view.n23)) + view.n24) / _local5);
screen.z = ((((_local2 * view.n31) + (_local3 * view.n32)) + (_local4 * view.n33)) + view.n34);
screen.x = (screen.x * _local6);
screen.y = (screen.y * _local7);
} else {
_local8 = ((_arg1.focus * _arg1.zoom) / (_arg1.focus + view.n34));
screen.x = (view.n14 * _local8);
screen.y = (view.n24 * _local8);
screen.z = view.n34;
};
}
public function lookAt(_arg1:DisplayObject3D, _arg2:Number3D=null):void{
var _local3:DisplayObject3D;
var _local4:Matrix3D;
if ((this is CameraObject3D)){
_position.reset(this.x, this.y, this.z);
} else {
_local3 = (this.parent as DisplayObject3D);
if (_local3){
world.calculateMultiply(_local3.world, transform);
} else {
world.copy(transform);
};
_position.reset(world.n14, world.n24, world.n34);
};
if ((_arg1 is CameraObject3D)){
_lookatTarget.reset(_arg1.x, _arg1.y, _arg1.z);
} else {
_local3 = (_arg1.parent as DisplayObject3D);
if (_local3){
_arg1.world.calculateMultiply(_local3.world, _arg1.transform);
} else {
_arg1.world.copy(_arg1.transform);
};
_lookatTarget.reset(_arg1.world.n14, _arg1.world.n24, _arg1.world.n34);
};
_zAxis.copyFrom(_lookatTarget);
_zAxis.minusEq(_position);
_zAxis.normalize();
if (_zAxis.modulo > 0.1){
_xAxis = Number3D.cross(_zAxis, ((_arg2) || (UP)), _xAxis);
_xAxis.normalize();
_yAxis = Number3D.cross(_zAxis, _xAxis, _yAxis);
_yAxis.normalize();
_local4 = this.transform;
_local4.n11 = (_xAxis.x * _scaleX);
_local4.n21 = (_xAxis.y * _scaleX);
_local4.n31 = (_xAxis.z * _scaleX);
_local4.n12 = (-(_yAxis.x) * _scaleY);
_local4.n22 = (-(_yAxis.y) * _scaleY);
_local4.n32 = (-(_yAxis.z) * _scaleY);
_local4.n13 = (_zAxis.x * _scaleZ);
_local4.n23 = (_zAxis.y * _scaleZ);
_local4.n33 = (_zAxis.z * _scaleZ);
_localRotationX = (_localRotationY = (_localRotationZ = 0));
this._transformDirty = false;
this._rotationDirty = true;
} else {
PaperLogger.error("lookAt error");
};
}
public function set rotationZ(_arg1:Number):void{
this._rotationZ = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
this._transformDirty = true;
}
public function pitch(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (this._transformDirty){
updateTransform();
};
_qPitch.setFromAxisAngle(transform.n11, transform.n21, transform.n31, _arg1);
this.transform.calculateMultiply3x3(_qPitch.matrix, transform);
_localRotationX = (_localRotationX + _arg1);
_rotationDirty = true;
}
public function set rotationY(_arg1:Number):void{
this._rotationY = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
this._transformDirty = true;
}
public function get position():Number3D{
_position.reset(this.x, this.y, this.z);
return (_position);
}
public function get sceneX():Number{
return (this.world.n14);
}
public function get scaleX():Number{
if (Papervision3D.usePERCENT){
return ((this._scaleX * 100));
};
return (this._scaleX);
}
public function get scaleY():Number{
if (Papervision3D.usePERCENT){
return ((this._scaleY * 100));
};
return (this._scaleY);
}
public function get scaleZ():Number{
if (Papervision3D.usePERCENT){
return ((this._scaleZ * 100));
};
return (this._scaleZ);
}
public function get scale():Number{
if ((((this._scaleX == this._scaleY)) && ((this._scaleX == this._scaleZ)))){
if (Papervision3D.usePERCENT){
return ((this._scaleX * 100));
};
return (this._scaleX);
//unresolved jump
};
return (NaN);
}
public function set position(_arg1:Number3D):void{
this.x = _arg1.x;
this.y = _arg1.y;
this.z = _arg1.z;
}
public function moveUp(_arg1:Number):void{
translate(_arg1, UP);
}
public function get sceneZ():Number{
return (this.world.n34);
}
public function get sceneY():Number{
return (this.world.n24);
}
public function distanceTo(_arg1:DisplayObject3D):Number{
var _local2:Number = (this.x - _arg1.x);
var _local3:Number = (this.y - _arg1.y);
var _local4:Number = (this.z - _arg1.z);
return (Math.sqrt((((_local2 * _local2) + (_local3 * _local3)) + (_local4 * _local4))));
}
public function addGeometry(_arg1:GeometryObject3D=null):void{
if (_arg1){
this.geometry = _arg1;
};
}
protected function setParentContainer(_arg1:DisplayObject3D, _arg2:Boolean=true):void{
var _local3:DisplayObject3D;
if (((_arg2) && (!((_arg1 == this))))){
parentContainer = _arg1;
};
for each (_local3 in children) {
_local3.setParentContainer(_arg1, _arg2);
};
}
private function updateMaterials(_arg1:DisplayObject3D, _arg2:MaterialObject3D, _arg3:MaterialObject3D):void{
var _local4:DisplayObject3D;
var _local5:Triangle3D;
_arg2.unregisterObject(_arg1);
if ((((_arg3 is AbstractLightShadeMaterial)) || ((_arg3 is ShadedMaterial)))){
_arg3.registerObject(_arg1);
};
if (_arg1.material === _arg2){
_arg1.material = _arg3;
};
if (((((_arg1.geometry) && (_arg1.geometry.faces))) && (_arg1.geometry.faces.length))){
for each (_local5 in _arg1.geometry.faces) {
if (_local5.material === _arg2){
_local5.material = _arg3;
};
};
};
for each (_local4 in _arg1.children) {
updateMaterials(_local4, _arg2, _arg3);
};
}
public function clone():DisplayObject3D{
var _local3:DisplayObject3D;
var _local1:String = ((this.name + "_") + _numClones++);
var _local2:DisplayObject3D = new DisplayObject3D(_local1);
if (this.material){
_local2.material = this.material;
};
if (this.materials){
_local2.materials = this.materials.clone();
};
if (this.geometry){
_local2.geometry = this.geometry.clone(_local2);
_local2.geometry.ready = true;
};
_local2.copyTransform(this);
for each (_local3 in this.children) {
_local2.addChild(_local3.clone());
};
return (_local2);
}
public function set material(_arg1:MaterialObject3D):void{
if (_material){
_material.unregisterObject(this);
};
_material = _arg1;
if (_material){
_material.registerObject(this);
};
}
private function updateRotation():void{
_tempScale.x = (Papervision3D.usePERCENT) ? (_scaleX * 100) : _scaleX;
_tempScale.y = (Papervision3D.usePERCENT) ? (_scaleY * 100) : _scaleY;
_tempScale.z = (Papervision3D.usePERCENT) ? (_scaleZ * 100) : _scaleZ;
_rotation = Matrix3D.matrix2euler(this.transform, _rotation, _tempScale);
this._rotationX = (_rotation.x * toRADIANS);
this._rotationY = (_rotation.y * toRADIANS);
this._rotationZ = (_rotation.z * toRADIANS);
this._rotationDirty = false;
}
public function hitTestObject(_arg1:DisplayObject3D, _arg2:Number=1):Boolean{
var _local3:Number = (this.x - _arg1.x);
var _local4:Number = (this.y - _arg1.y);
var _local5:Number = (this.z - _arg1.z);
var _local6:Number = (((_local3 * _local3) + (_local4 * _local4)) + (_local5 * _local5));
var _local7:Number = (this.geometry) ? this.geometry.boundingSphere.maxDistance : 0;
var _local8:Number = (_arg1.geometry) ? _arg1.geometry.boundingSphere.maxDistance : 0;
_local7 = (_local7 * _arg2);
return (((_local7 + _local8) > _local6));
}
public function translate(_arg1:Number, _arg2:Number3D):void{
var _local3:Number3D = _arg2.clone();
if (this._transformDirty){
updateTransform();
};
Matrix3D.rotateAxis(transform, _local3);
this.x = (this.x + (_arg1 * _local3.x));
this.y = (this.y + (_arg1 * _local3.y));
this.z = (this.z + (_arg1 * _local3.z));
}
public function get localRotationZ():Number{
return ((Papervision3D.useDEGREES) ? (_localRotationZ * toDEGREES) : _localRotationZ);
}
public function get localRotationY():Number{
return ((Papervision3D.useDEGREES) ? (_localRotationY * toDEGREES) : _localRotationY);
}
public function get z():Number{
return (this.transform.n34);
}
public function get localRotationX():Number{
return ((Papervision3D.useDEGREES) ? (_localRotationX * toDEGREES) : _localRotationX);
}
public function get x():Number{
return (this.transform.n14);
}
public function get y():Number{
return (this.transform.n24);
}
public function moveLeft(_arg1:Number):void{
translate(_arg1, LEFT);
}
public function replaceMaterialByName(_arg1:MaterialObject3D, _arg2:String):void{
if (!this.materials){
return;
};
var _local3:MaterialObject3D = this.materials.getMaterialByName(_arg2);
if (!_local3){
return;
};
if (this.material === _local3){
this.material = _arg1;
};
_local3 = this.materials.removeMaterial(_local3);
_arg1 = this.materials.addMaterial(_arg1, _arg2);
updateMaterials(this, _local3, _arg1);
}
public function get scene():SceneObject3D{
return (_scene);
}
public function set useOwnContainer(_arg1:Boolean):void{
_useOwnContainer = _arg1;
setParentContainer(this, true);
}
public function getMaterialByName(_arg1:String):MaterialObject3D{
var _local3:DisplayObject3D;
var _local2:MaterialObject3D = (this.materials) ? this.materials.getMaterialByName(_arg1) : null;
if (_local2){
return (_local2);
};
for each (_local3 in this._childrenByName) {
_local2 = _local3.getMaterialByName(_arg1);
if (_local2){
return (_local2);
};
};
return (null);
}
public function copyTransform(_arg1):void{
var _local4:DisplayObject3D;
if ((_arg1 is DisplayObject3D)){
_local4 = DisplayObject3D(_arg1);
if (_local4._transformDirty){
_local4.updateTransform();
};
};
var _local2:Matrix3D = this.transform;
var _local3:Matrix3D = ((_arg1 is DisplayObject3D)) ? _arg1.transform : _arg1;
_local2.n11 = _local3.n11;
_local2.n12 = _local3.n12;
_local2.n13 = _local3.n13;
_local2.n14 = _local3.n14;
_local2.n21 = _local3.n21;
_local2.n22 = _local3.n22;
_local2.n23 = _local3.n23;
_local2.n24 = _local3.n24;
_local2.n31 = _local3.n31;
_local2.n32 = _local3.n32;
_local2.n33 = _local3.n33;
_local2.n34 = _local3.n34;
this._transformDirty = false;
this._rotationDirty = true;
}
public function get rotationY():Number{
if (this._rotationDirty){
updateRotation();
};
return ((Papervision3D.useDEGREES) ? (this._rotationY * toDEGREES) : this._rotationY);
}
public function get rotationZ():Number{
if (this._rotationDirty){
updateRotation();
};
return ((Papervision3D.useDEGREES) ? (this._rotationZ * toDEGREES) : this._rotationZ);
}
public function set scaleY(_arg1:Number):void{
if (this._rotationDirty){
updateRotation();
};
if (Papervision3D.usePERCENT){
this._scaleY = (_arg1 / 100);
} else {
this._scaleY = _arg1;
};
this._transformDirty = true;
}
public function roll(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (_transformDirty){
updateTransform();
};
_qRoll.setFromAxisAngle(transform.n13, transform.n23, transform.n33, _arg1);
transform.calculateMultiply3x3(_qRoll.matrix, transform);
_localRotationZ = (_localRotationZ + _arg1);
_rotationDirty = true;
}
public function set scaleZ(_arg1:Number):void{
if (this._rotationDirty){
updateRotation();
};
if (Papervision3D.usePERCENT){
this._scaleZ = (_arg1 / 100);
} else {
this._scaleZ = _arg1;
};
this._transformDirty = true;
}
public function get rotationX():Number{
if (this._rotationDirty){
updateRotation();
};
return ((Papervision3D.useDEGREES) ? (this._rotationX * toDEGREES) : this._rotationX);
}
public function set scale(_arg1:Number):void{
if (this._rotationDirty){
updateRotation();
};
if (Papervision3D.usePERCENT){
_arg1 = (_arg1 / 100);
};
this._scaleX = (this._scaleY = (this._scaleZ = _arg1));
this._transformDirty = true;
}
public function get autoCalcScreenCoords():Boolean{
return (_autoCalcScreenCoords);
}
public function yaw(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (_transformDirty){
updateTransform();
};
_qYaw.setFromAxisAngle(transform.n12, transform.n22, transform.n32, _arg1);
transform.calculateMultiply3x3(_qYaw.matrix, transform);
_localRotationY = (_localRotationY + _arg1);
_rotationDirty = true;
}
public function set scaleX(_arg1:Number):void{
if (this._rotationDirty){
updateRotation();
};
if (Papervision3D.usePERCENT){
this._scaleX = (_arg1 / 100);
} else {
this._scaleX = _arg1;
};
this._transformDirty = true;
}
public function createViewportLayer(_arg1:Viewport3D, _arg2:Boolean=true):ViewportLayer{
var _local3:ViewportLayer = _arg1.getChildLayer(this, true);
if (_arg2){
addChildrenToLayer(this, _local3);
};
return (_local3);
}
override public function toString():String{
return (((((((this.name + ": x:") + Math.round(this.x)) + " y:") + Math.round(this.y)) + " z:") + Math.round(this.z)));
}
public function moveForward(_arg1:Number):void{
translate(_arg1, FORWARD);
}
public function addChildrenToLayer(_arg1:DisplayObject3D, _arg2:ViewportLayer):void{
var _local3:DisplayObject3D;
for each (_local3 in _arg1.children) {
_arg2.addDisplayObject3D(_local3);
_local3.addChildrenToLayer(_local3, _arg2);
};
}
public function copyPosition(_arg1):void{
var _local2:Matrix3D = this.transform;
var _local3:Matrix3D = ((_arg1 is DisplayObject3D)) ? _arg1.transform : _arg1;
_local2.n14 = _local3.n14;
_local2.n24 = _local3.n24;
_local2.n34 = _local3.n34;
}
public function get useOwnContainer():Boolean{
return (_useOwnContainer);
}
public function updateTransform():void{
_rot.setFromEuler(_rotationY, _rotationZ, _rotationX);
this.transform.copy3x3(_rot.matrix);
_tempMatrix.reset();
_tempMatrix.n11 = this._scaleX;
_tempMatrix.n22 = this._scaleY;
_tempMatrix.n33 = this._scaleZ;
this.transform.calculateMultiply(this.transform, _tempMatrix);
_transformDirty = false;
}
public function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Number):Boolean{
var _local4:Number = (this.x - _arg1);
var _local5:Number = (this.y - _arg2);
var _local6:Number = (this.z - _arg3);
var _local7:Number = (((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6));
var _local8:Number = (this.geometry) ? this.geometry.boundingSphere.maxDistance : 0;
return ((_local8 > _local7));
}
public function moveBackward(_arg1:Number):void{
translate(_arg1, BACKWARD);
}
public function set localRotationY(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (_transformDirty){
updateTransform();
};
_qYaw.setFromAxisAngle(transform.n12, transform.n22, transform.n32, (_localRotationY - _arg1));
transform.calculateMultiply3x3(_qYaw.matrix, transform);
_localRotationY = _arg1;
_rotationDirty = true;
}
public function set localRotationZ(_arg1:Number):void{
_arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1;
if (_transformDirty){
updateTransform();
};
_qRoll.setFromAxisAngle(transform.n13, transform.n23, transform.n33, (_localRotationZ - _arg1));
transform.calculateMultiply3x3(_qRoll.matrix, transform);
_localRotationZ = _arg1;
_rotationDirty = true;
}
public function moveRight(_arg1:Number):void{
translate(_arg1, RIGHT);
}
public function set x(_arg1:Number):void{
this.transform.n14 = _arg1;
}
public function materialsList():String{
var _local2:String;
var _local3:DisplayObject3D;
var _local1 = "";
for (_local2 in this.materials) {
_local1 = (_local1 + (_local2 + "\n"));
};
for each (_local3 in this._childrenByName) {
for (_local2 in _local3.materials.materialsByName) {
_local1 = (_local1 + (("+ " + _local2) + "\n"));
};
};
return (_local1);
}
public function set autoCalcScreenCoords(_arg1:Boolean):void{
_autoCalcScreenCoords = _arg1;
}
public static function get ZERO():DisplayObject3D{
return (new (DisplayObject3D));
}
}
}//package org.papervision3d.objects
Section 140
//BasicRenderEngine (org.papervision3d.render.BasicRenderEngine)
package org.papervision3d.render {
import org.papervision3d.core.proto.*;
import org.papervision3d.core.render.data.*;
import org.papervision3d.view.*;
import org.papervision3d.core.render.command.*;
import flash.geom.*;
import org.papervision3d.core.render.material.*;
import org.papervision3d.view.layer.*;
import org.papervision3d.core.render.*;
import org.papervision3d.core.clipping.*;
import org.papervision3d.core.render.sort.*;
import org.papervision3d.core.render.filter.*;
import org.papervision3d.core.render.project.*;
import org.papervision3d.events.*;
import org.papervision3d.core.utils.*;
public class BasicRenderEngine extends AbstractRenderEngine implements IRenderEngine {
public var clipping:DefaultClipping;
protected var renderDoneEvent:RendererEvent;
public var sorter:IRenderSorter;
public var projectionPipeline:ProjectionPipeline;
protected var renderList:Array;
protected var renderStatistics:RenderStatistics;
protected var cleanRHD:RenderHitData;
protected var projectionDoneEvent:RendererEvent;
protected var renderSessionData:RenderSessionData;
protected var stopWatch:StopWatch;
public var filter:IRenderFilter;
public function BasicRenderEngine():void{
cleanRHD = new RenderHitData();
super();
init();
}
protected function doRender(_arg1:RenderSessionData, _arg2:Array=null):RenderStatistics{
var _local3:RenderableListItem;
var _local5:ViewportLayer;
stopWatch.reset();
stopWatch.start();
MaterialManager.getInstance().updateMaterialsBeforeRender(_arg1);
filter.filter(renderList);
sorter.sort(renderList);
var _local4:Viewport3D = _arg1.viewPort;
while ((_local3 = renderList.pop())) {
_local5 = _local4.accessLayerFor(_local3, true);
_local3.render(_arg1, _local5.graphicsChannel);
_local4.lastRenderList.push(_local3);
_local5.processRenderItem(_local3);
};
MaterialManager.getInstance().updateMaterialsAfterRender(_arg1);
_arg1.renderStatistics.renderTime = stopWatch.stop();
_arg1.viewPort.updateAfterRender(_arg1);
return (renderStatistics);
}
protected function init():void{
renderStatistics = new RenderStatistics();
projectionPipeline = new BasicProjectionPipeline();
stopWatch = new StopWatch();
sorter = new BasicRenderSorter();
filter = new BasicRenderFilter();
renderList = new Array();
clipping = null;
renderSessionData = new RenderSessionData();
renderSessionData.renderer = this;
projectionDoneEvent = new RendererEvent(RendererEvent.PROJECTION_DONE, renderSessionData);
renderDoneEvent = new RendererEvent(RendererEvent.RENDER_DONE, renderSessionData);
}
override public function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics{
_arg2.viewport = _arg3.sizeRectangle;
renderSessionData.scene = _arg1;
renderSessionData.camera = _arg2;
renderSessionData.viewPort = _arg3;
renderSessionData.container = _arg3.containerSprite;
renderSessionData.triangleCuller = _arg3.triangleCuller;
renderSessionData.particleCuller = _arg3.particleCuller;
renderSessionData.renderObjects = _arg1.objects;
renderSessionData.renderLayers = null;
renderSessionData.renderStatistics.clear();
renderSessionData.clipping = clipping;
if (clipping){
clipping.reset(renderSessionData);
};
_arg3.updateBeforeRender(renderSessionData);
projectionPipeline.project(renderSessionData);
if (hasEventListener(RendererEvent.PROJECTION_DONE)){
dispatchEvent(projectionDoneEvent);
};
doRender(renderSessionData, null);
if (hasEventListener(RendererEvent.RENDER_DONE)){
dispatchEvent(renderDoneEvent);
};
return (renderSessionData.renderStatistics);
}
public function hitTestPoint2D(_arg1:Point, _arg2:Viewport3D):RenderHitData{
return (_arg2.hitTestPoint2D(_arg1));
}
override public function removeFromRenderList(_arg1:IRenderListItem):int{
return (renderList.splice(renderList.indexOf(_arg1), 1));
}
override public function addToRenderList(_arg1:RenderableListItem):int{
return (renderList.push(_arg1));
}
private function getLayerObjects(_arg1:Array):Array{
var _local3:ViewportLayer;
var _local2:Array = new Array();
for each (_local3 in _arg1) {
_local2 = _local2.concat(_local3.getLayerObjects());
};
return (_local2);
}
public function destroy():void{
renderDoneEvent = null;
projectionDoneEvent = null;
projectionPipeline = null;
sorter = null;
filter = null;
renderStatistics = null;
renderList = null;
renderSessionData.destroy();
renderSessionData = null;
cleanRHD = null;
stopWatch = null;
clipping = null;
}
public function renderLayers(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D, _arg4:Array=null):RenderStatistics{
renderSessionData.scene = _arg1;
renderSessionData.camera = _arg2;
renderSessionData.viewPort = _arg3;
renderSessionData.container = _arg3.containerSprite;
renderSessionData.triangleCuller = _arg3.triangleCuller;
renderSessionData.particleCuller = _arg3.particleCuller;
renderSessionData.renderObjects = getLayerObjects(_arg4);
renderSessionData.renderLayers = _arg4;
renderSessionData.renderStatistics.clear();
renderSessionData.clipping = clipping;
_arg3.updateBeforeRender(renderSessionData);
projectionPipeline.project(renderSessionData);
if (hasEventListener(RendererEvent.PROJECTION_DONE)){
dispatchEvent(projectionDoneEvent);
};
doRender(renderSessionData);
if (hasEventListener(RendererEvent.RENDER_DONE)){
dispatchEvent(renderDoneEvent);
};
return (renderSessionData.renderStatistics);
}
}
}//package org.papervision3d.render
Section 141
//Scene3D (org.papervision3d.scenes.Scene3D)
package org.papervision3d.scenes {
import org.papervision3d.core.proto.*;
public class Scene3D extends SceneObject3D {
}
}//package org.papervision3d.scenes
Section 142
//AlteHaasGrotesk (org.papervision3d.typography.fonts.AlteHaasGrotesk)
package org.papervision3d.typography.fonts {
import org.papervision3d.typography.*;
public class AlteHaasGrotesk extends Font3D {
public static var __motifs:Object = {};
public static var __initialized:Boolean = false;
public static var __heights:Number = 118;
public static var __widths:Object = {};
override public function get motifs():Object{
if (!__initialized){
initialize();
};
return (__motifs);
}
override public function get widths():Object{
if (!__initialized){
initialize();
};
return (__widths);
}
override public function get height():Number{
if (!__initialized){
initialize();
};
return (__heights);
}
public static function initialize():void{
initializeMotifs();
initializeWidths();
__initialized = true;
}
private static function initializeMotifs():void{
__motifs[" "] = [];
__motifs["A"] = [["M", [32.15, 49.1]], ["C", [31.8, 50.55, 31.3, 51.8]], ["C", [30.1, 54.65, 29.15, 57.5]], ["C", [28.2, 60.4, 27.1, 63.3]], ["C", [26.7, 64.3, 26.4, 65.25]], ["C", [26.1, 66.2, 25.8, 67.3]], ["C", [25.5, 68.1, 25.9, 69.15]], ["C", [26.4, 69.8, 27.55, 69.9]], ["C", [28.7, 70, 29.9, 70]], ["L", [37.5, 70]], ["C", [38.4, 70, 39.5, 70]], ["C", [40.6, 70, 41.4, 69.8]], ["C", [42.7, 69.35, 42.6, 68.1]], ["C", [42.5, 66.95, 42, 65.8]], ["C", [41.8, 65.4, 41.8, 65.1]], ["C", [41.8, 64.7, 41.6, 64.3]], ["C", [40.3, 60.95, 39.2, 57.4]], ["C", [38.1, 53.9, 36.7, 50.45]], ["C", [36.5, 49.9, 36.3, 49.15]], ["C", [36.1, 48.45, 35.8, 47.75]], ["C", [35.5, 47.1, 35.1, 46.6]], ["C", [34.7, 46.15, 34.1, 46.15]], ["C", [33.9, 46.35, 33.7, 46.45]], ["C", [33.5, 46.5, 33.3, 46.7]], ["C", [32.5, 47.7, 32.15, 49.1]], ["M", [50.5, 47.75]], ["C", [52.5, 52.7, 54.25, 57.85]], ["C", [56, 62.95, 58.1, 67.9]], ["C", [58.3, 68.35, 58.35, 68.7]], ["C", [58.4, 69.05, 58.6, 69.4]], ["C", [59.2, 71.05, 59.8, 72.65]], ["C", [60.4, 74.25, 61, 75.8]], ["C", [61.4, 76.65, 61.6, 77.4]], ["C", [61.8, 78.1, 62.1, 78.95]], ["C", [63.4, 82.1, 64.5, 85.35]], ["C", [65.6, 88.5, 66.9, 91.65]], ["C", [67.1, 91.95, 67.1, 92.2]], ["C", [67.1, 92.4, 67.3, 92.7]], ["C", [67.4, 93.15, 67.65, 93.75]], ["C", [67.9, 94.35, 68.05, 94.95]], ["C", [68.2, 95.65, 68.1, 96.25]], ["C", [68, 96.8, 67.4, 97.1]], ["C", [66.6, 97.65, 64.75, 97.55]], ["C", [62.9, 97.45, 61.7, 97.45]], ["L", [57, 97.45]], ["C", [56.2, 97.45, 55.55, 97.5]], ["C", [54.9, 97.55, 54.3, 97.35]], ["C", [53.2, 97, 52.7, 96.15]], ["C", [52.2, 95.35, 51.95, 94.4]], ["C", [51.7, 93.55, 51.3, 92.6]], ["C", [50.8, 91.05, 50.25, 89.45]], ["C", [49.7, 87.85, 49.1, 86.3]], ["C", [48.8, 85.45, 48.55, 84.65]], ["C", [48.3, 83.95, 48, 83.35]], ["C", [47.7, 82.75, 47.1, 82.25]], ["C", [46.5, 81.85, 45.5, 81.65]], ["C", [45, 81.65, 44.55, 81.6]], ["C", [44.1, 81.55, 43.6, 81.55]], ["L", [27.8, 81.55]], ["C", [26.1, 81.55, 24.15, 81.5]], ["C", [22.2, 81.45, 21.1, 82.2]], ["C", [20.3, 82.85, 20, 83.85]], ["C", [19.7, 84.85, 19.3, 85.85]], ["C", [18.5, 87.55, 17.95, 89.4]], ["C", [17.4, 91.25, 16.7, 93]], ["C", [16.3, 94.05, 15.95, 95.1]], ["C", [15.6, 96.25, 14.8, 96.8]], ["C", [14.3, 97.2, 13.35, 97.4]], ["C", [12.4, 97.55, 11.25, 97.55]], ["C", [10.1, 97.55, 8.9, 97.5]], ["C", [7.7, 97.45, 6.8, 97.45]], ["C", [5.5, 97.45, 3.65, 97.5]], ["C", [1.8, 97.55, 1, 97]], ["C", [0.5, 96.7, 0.45, 96.15]], ["C", [0.4, 95.55, 0.55, 94.85]], ["C", [0.7, 94.25, 0.9, 93.65]], ["C", [1.1, 93, 1.3, 92.6]], ["C", [2.3, 90.3, 3.15, 87.95]], ["C", [4, 85.55, 4.9, 83.25]], ["C", [5.3, 82.4, 5.5, 81.65]], ["C", [5.7, 80.85, 6.1, 80]], ["C", [6.9, 77.9, 7.7, 75.7]], ["C", [8.5, 73.55, 9.3, 71.45]], ["C", [10.1, 69.4, 10.8, 67.45]], ["C", [11.5, 65.5, 12.3, 63.5]], ["C", [14.6, 58.05, 16.55, 52.45]], ["C", [18.5, 46.8, 20.8, 41.35]], ["C", [21, 40.8, 21.1, 40.4]], ["C", [21.2, 40.05, 21.4, 39.55]], ["C", [22.2, 37.45, 23, 35.25]], ["C", [23.8, 33.05, 24.7, 30.95]], ["C", [25.2, 29.8, 25.55, 28.7]], ["C", [25.9, 27.55, 26.8, 26.85]], ["C", [27.3, 26.55, 28.1, 26.35]], ["C", [28.3, 26.2, 28.5, 26.25]], ["C", [28.7, 26.35, 28.9, 26.2]], ["L", [37.7, 26.2]], ["C", [38.8, 26.2, 39.95, 26.15]], ["C", [41.1, 26.1, 41.8, 26.65]], ["C", [42.9, 27.25, 43.25, 28.35]], ["C", [43.6, 29.55, 44.1, 30.75]], ["C", [44.8, 32.4, 45.4, 34.05]], ["C", [46, 35.75, 46.7, 37.45]], ["C", [46.9, 38.05, 47.1, 38.6]], ["C", [47.3, 39.25, 47.5, 39.85]], ["C", [48.3, 41.85, 49, 43.8]], ["C", [49.7, 45.75, 50.5, 47.75]]];
__motifs["B"] = [["M", [22.5, 71.15]], ["L", [22.5, 80]], ["C", [22.5, 81.2, 22.55, 82.45]], ["C", [22.6, 83.7, 23.1, 84.4]], ["C", [23.5, 84.9, 24.4, 85.15]], ["C", [25.3, 85.4, 26.45, 85.45]], ["C", [27.6, 85.5, 28.8, 85.45]], ["C", [30.05, 85.4, 30.9, 85.4]], ["C", [33.9, 85.4, 36.7, 85.45]], ["C", [39.5, 85.5, 42, 85.15]], ["C", [44.55, 84.8, 46.5, 83.95]], ["C", [48.4, 83.1, 49.6, 81.3]], ["C", [50.1, 80.5, 50.4, 79.45]], ["C", [50.75, 78.4, 51.05, 77.3]], ["L", [51.05, 76.7]], ["C", [51.2, 75.3, 50.9, 73.7]], ["C", [50.5, 72.1, 50.1, 71.35]], ["C", [48.75, 67.7, 44.65, 66.3]], ["C", [42.9, 65.8, 40.85, 65.7]], ["C", [38.8, 65.6, 36.6, 65.6]], ["L", [25.3, 65.6]], ["C", [25.1, 65.8, 24.95, 65.75]], ["C", [24.8, 65.7, 24.6, 65.7]], ["C", [23.4, 66, 23, 66.75]], ["C", [22.5, 67.5, 22.5, 68.75]], ["C", [22.5, 70, 22.5, 71.15]], ["M", [40.7, 38.5]], ["C", [40.35, 38.4, 39.5, 38.4]], ["C", [38.35, 38.15, 36.75, 38.15]], ["C", [35.2, 38.2, 33.8, 38.2]], ["L", [25.3, 38.2]], ["C", [25.1, 38.3, 24.85, 38.3]], ["C", [24.6, 38.3, 24.4, 38.4]], ["C", [23.4, 38.7, 23, 39.35]], ["C", [22.5, 40.05, 22.5, 41.05]], ["C", [22.5, 42.15, 22.5, 43.2]], ["L", [22.5, 48.6]], ["C", [22.5, 49.3, 22.45, 50.1]], ["C", [22.4, 50.8, 22.5, 51.3]], ["L", [22.5, 52.35]], ["C", [22.7, 52.9, 22.8, 53.35]], ["C", [22.9, 53.8, 23.1, 54.25]], ["C", [23.5, 54.75, 24.35, 54.9]], ["C", [25.2, 55.1, 26.25, 55.15]], ["C", [27.3, 55.2, 28.4, 55.15]], ["C", [29.5, 55.1, 30.4, 55.1]], ["C", [31.95, 55.1, 33.55, 55.15]], ["C", [35.2, 55.2, 36.85, 55.2]], ["C", [38.55, 55.2, 40, 55.05]], ["C", [41.5, 54.9, 42.65, 54.55]], ["C", [45.6, 53.5, 47.1, 51]], ["C", [47.8, 49.7, 48, 47.6]], ["C", [48.2, 44.25, 47, 42.3]], ["C", [45.8, 40.3, 43.5, 39.2]], ["C", [42.9, 39, 42.2, 38.85]], ["C", [41.5, 38.7, 40.7, 38.5]], ["M", [60.55, 33.75]], ["C", [61.8, 35.85, 62.65, 38.5]], ["C", [62.85, 39.2, 62.9, 39.95]], ["C", [62.95, 40.6, 63.15, 41.4]], ["C", [63.25, 41.8, 63.2, 42.25]], ["C", [63.15, 42.6, 63.25, 43]], ["C", [63.35, 43.3, 63.3, 43.75]], ["C", [63.25, 44.25, 63.15, 44.4]], ["L", [63.15, 45.3]], ["C", [63.15, 45.6, 63.1, 46]], ["C", [63.05, 46.45, 63.05, 46.6]], ["C", [62.85, 47.3, 62.8, 47.85]], ["C", [62.75, 48.45, 62.55, 48.9]], ["C", [61.25, 52.55, 59.15, 54.8]], ["C", [58.45, 55.5, 57.6, 56]], ["C", [56.85, 56.5, 56.25, 57.3]], ["C", [56.05, 57.5, 55.75, 57.85]], ["C", [55.5, 58.2, 55.7, 58.75]], ["C", [55.9, 59.5, 57.05, 60.05]], ["C", [58.15, 60.6, 58.95, 61.1]], ["C", [61.6, 62.95, 63.35, 65.3]], ["C", [64.95, 67.6, 65.8, 70.7]], ["C", [66.1, 71.5, 66.2, 72.35]], ["C", [66.3, 73.2, 66.55, 74]], ["L", [66.55, 75.1]], ["C", [66.75, 76.2, 66.6, 78]], ["C", [66.45, 79.8, 66.2, 80.8]], ["C", [66, 81.85, 65.8, 82.7]], ["C", [65.65, 83.6, 65.35, 84.4]], ["C", [63.25, 89.4, 58.85, 92.6]], ["C", [57.15, 93.8, 55.2, 94.65]], ["C", [53.2, 95.5, 51.05, 96.2]], ["C", [49.95, 96.6, 48.75, 96.75]], ["C", [47.5, 96.9, 46.45, 97.1]], ["C", [45.95, 97.2, 45.45, 97.2]], ["C", [45, 97.2, 44.55, 97.3]], ["C", [44.15, 97.4, 43.7, 97.3]], ["C", [43.2, 97.2, 42.7, 97.4]], ["C", [42.35, 97.5, 41.9, 97.45]], ["C", [41.45, 97.4, 40.9, 97.4]], ["L", [11.7, 97.4]], ["C", [10, 97.4, 8.9, 97.25]], ["C", [7.7, 97.1, 7.25, 95.9]], ["C", [6.95, 95.1, 7, 93.45]], ["C", [7.05, 91.8, 7.05, 90.7]], ["L", [7.05, 32]], ["C", [7.05, 30.8, 7, 29.5]], ["C", [6.95, 28.1, 7.4, 27.35]], ["C", [7.8, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [39.55, 26.2]], ["C", [40.25, 26.2, 40.9, 26.15]], ["C", [41.65, 26.1, 42.25, 26.2]], ["C", [42.7, 26.4, 43.2, 26.3]], ["C", [43.75, 26.2, 44.25, 26.3]], ["L", [44.8, 26.3]], ["C", [45.4, 26.5, 46.1, 26.45]], ["C", [46.75, 26.4, 47.4, 26.6]], ["C", [48.25, 26.8, 48.95, 26.9]], ["C", [49.75, 27, 50.55, 27.2]], ["C", [52.45, 27.9, 54.15, 28.55]], ["C", [55.8, 29.2, 57.25, 30.2]], ["C", [59.25, 31.65, 60.55, 33.75]]];
__motifs["C"] = [["M", [53.9, 47.5]], ["C", [53.5, 46.3, 52.9, 45.4]], ["C", [51, 42.1, 47.9, 40.2]], ["C", [45.8, 38.9, 43.2, 38.1]], ["C", [41.5, 37.5, 38.95, 37.5]], ["C", [36.4, 37.5, 34.5, 38]], ["C", [33.7, 38.15, 33.05, 38.3]], ["C", [32.4, 38.45, 31.7, 38.8]], ["C", [24.9, 41.7, 22.1, 48.4]], ["C", [21.6, 49.6, 21.2, 50.85]], ["C", [20.8, 52.2, 20.3, 53.6]], ["C", [20.2, 54.3, 20.1, 54.85]], ["C", [20, 55.5, 19.9, 56.2]], ["C", [19.7, 56.8, 19.75, 57.45]], ["C", [19.8, 58.1, 19.6, 58.8]], ["C", [19.4, 59.6, 19.45, 60.45]], ["C", [19.5, 61.3, 19.5, 62.1]], ["C", [19.5, 62.5, 19.45, 62.9]], ["C", [19.4, 63.3, 19.5, 63.7]], ["L", [19.5, 64.6]], ["C", [19.7, 65.15, 19.65, 65.6]], ["C", [19.6, 66.1, 19.8, 66.6]], ["C", [19.8, 67.25, 20, 68.2]], ["C", [20.2, 69.35, 20.4, 70.25]], ["C", [20.6, 71.25, 20.9, 72.1]], ["C", [22.3, 76.3, 24.5, 79.25]], ["C", [26.7, 82.2, 30.3, 84.1]], ["C", [31.4, 84.6, 32.6, 84.95]], ["C", [33.8, 85.3, 35.2, 85.75]], ["C", [35.7, 85.85, 36.15, 85.9]], ["C", [36.6, 85.95, 37.1, 85.95]], ["L", [37.9, 85.95]], ["C", [38.4, 86.1, 39.2, 86.05]], ["C", [40, 86.05, 40.5, 85.95]], ["C", [41.1, 85.95, 41.4, 85.85]], ["C", [42.6, 85.6, 43.65, 85.4]], ["C", [44.7, 85.2, 45.7, 84.7]], ["C", [48, 83.75, 49.65, 82.05]], ["C", [51.3, 80.4, 52.6, 78.3]], ["C", [53.2, 77.3, 53.6, 76.1]], ["C", [54, 74.9, 54.5, 73.7]], ["C", [54.8, 72.6, 55.1, 71.7]], ["C", [55.4, 70.8, 56.4, 70.3]], ["C", [57, 70.1, 57.9, 70.1]], ["C", [58.8, 70.1, 59.6, 70.1]], ["L", [65.7, 70.1]], ["C", [66.6, 70.1, 67.55, 70.1]], ["C", [68.5, 70.1, 69.1, 70.5]], ["C", [69.8, 71, 69.85, 72.1]], ["C", [69.9, 73.2, 69.6, 74.2]], ["L", [69, 76.9]], ["C", [68.5, 78.4, 68.05, 79.8]], ["C", [67.6, 81.2, 66.9, 82.5]], ["C", [66.4, 83.3, 66.1, 84]], ["C", [65.8, 84.8, 65.3, 85.5]], ["C", [59.8, 94.1, 49.3, 97.5]], ["C", [48.2, 97.9, 47.1, 98.1]], ["C", [46, 98.3, 44.9, 98.5]], ["C", [44.4, 98.7, 43.95, 98.65]], ["C", [43.5, 98.55, 43, 98.8]], ["C", [42.3, 98.8, 41.65, 98.85]], ["C", [41, 98.9, 40.3, 99]], ["L", [38.7, 99]], ["C", [37.8, 99, 36.9, 99]], ["C", [36, 99, 35.2, 98.8]], ["C", [34.9, 98.7, 34.2, 98.7]], ["C", [33.5, 98.6, 32.8, 98.55]], ["C", [32.1, 98.4, 31.3, 98.3]], ["C", [30.3, 98, 29.35, 97.8]], ["C", [28.4, 97.6, 27.4, 97.3]], ["C", [26.5, 96.95, 25.6, 96.6]], ["C", [24.7, 96.3, 23.9, 95.9]], ["C", [17.9, 93.3, 13.75, 88.95]], ["C", [9.6, 84.55, 7, 78.6]], ["C", [6.4, 77.1, 6, 75.6]], ["C", [5.6, 74.1, 5.1, 72.5]], ["C", [4.9, 72, 4.9, 71.6]], ["C", [4.9, 71.3, 4.8, 70.9]], ["C", [4.6, 70, 4.5, 69]], ["C", [4.4, 68, 4.2, 67.1]], ["C", [4, 66.6, 4.05, 66.25]], ["C", [4.1, 65.9, 4, 65.45]], ["L", [4, 63.6]], ["C", [3.8, 63.1, 3.8, 62.1]], ["C", [3.8, 61.05, 4, 60.6]], ["C", [4.1, 60.3, 4.05, 59.95]], ["C", [4, 59.6, 4, 59.4]], ["L", [4, 58.5]], ["C", [4.2, 57.7, 4.25, 56.8]], ["C", [4.3, 55.9, 4.4, 54.95]], ["C", [4.6, 54.2, 4.7, 53.45]], ["C", [4.8, 52.7, 5, 51.9]], ["C", [5.4, 50.5, 5.7, 49.15]], ["C", [6, 47.8, 6.5, 46.55]], ["C", [7, 45.3, 7.55, 44]], ["C", [8.1, 42.7, 8.8, 41.6]], ["C", [10.4, 38.8, 12.1, 36.6]], ["C", [12.6, 35.9, 13.2, 35.3]], ["C", [13.8, 34.7, 14.4, 34.05]], ["C", [16.9, 31.6, 19.65, 29.8]], ["C", [22.4, 28.1, 25.9, 26.7]], ["C", [27.1, 26.2, 28.4, 25.8]], ["C", [29.7, 25.5, 31.1, 25.2]], ["C", [31.7, 25, 32.3, 25]], ["C", [32.9, 25, 33.4, 24.8]], ["C", [34.2, 24.7, 34.95, 24.65]], ["C", [35.7, 24.6, 36.5, 24.5]], ["C", [36.7, 24.4, 37, 24.5]], ["C", [37.3, 24.6, 37.5, 24.5]], ["C", [48, 24.3, 54.8, 28.1]], ["C", [61.6, 31.9, 65.6, 38.15]], ["C", [66.7, 39.9, 67.4, 41.65]], ["C", [68.1, 43.4, 68.7, 45.5]], ["C", [68.9, 46.2, 69.1, 47.1]], ["C", [69.3, 48, 69, 48.75]], ["C", [68.8, 49.4, 68.25, 49.55]], ["C", [67.7, 49.7, 67, 49.9]], ["L", [66.2, 49.9]], ["C", [65.6, 50.1, 64.85, 50.05]], ["C", [64.1, 50, 63.4, 50]], ["C", [62.5, 50, 61.25, 50.05]], ["C", [60, 50.1, 58.8, 50.05]], ["C", [57.6, 50, 56.6, 49.85]], ["C", [55.6, 49.7, 55.1, 49.4]], ["C", [54.3, 48.65, 53.9, 47.5]]];
__motifs["D"] = [["M", [41.3, 40.15]], ["C", [40.45, 39.9, 39.5, 39.7]], ["C", [38.7, 39.6, 38.05, 39.55]], ["C", [37.4, 39.5, 36.6, 39.3]], ["C", [36.25, 39.2, 35.8, 39.25]], ["C", [35.4, 39.3, 35.1, 39.2]], ["L", [32.9, 39.2]], ["C", [32.4, 39.1, 31.8, 39.15]], ["C", [31.2, 39.2, 30.6, 39.2]], ["L", [26.1, 39.2]], ["C", [25.95, 39.4, 25.45, 39.3]], ["C", [25, 39.2, 24.7, 39.3]], ["C", [24.2, 39.5, 23.75, 39.65]], ["C", [23.2, 39.8, 22.9, 40.3]], ["C", [22.5, 40.8, 22.5, 41.7]], ["C", [22.5, 42.6, 22.5, 43.7]], ["C", [22.5, 45, 22.45, 46.45]], ["C", [22.4, 47.8, 22.4, 49.2]], ["L", [22.4, 77.1]], ["C", [22.4, 77.7, 22.35, 78.4]], ["C", [22.3, 79.1, 22.5, 79.65]], ["L", [22.5, 80.6]], ["C", [22.5, 81.3, 22.55, 81.95]], ["C", [22.6, 82.6, 22.8, 83.1]], ["C", [23.4, 84.3, 25.1, 84.35]], ["C", [26.8, 84.4, 28.6, 84.4]], ["C", [32.5, 84.4, 36.5, 84.35]], ["C", [40.55, 84.3, 43.3, 83.2]], ["C", [47, 81.75, 49.15, 79.2]], ["C", [51.3, 76.7, 52.85, 73]], ["C", [53.2, 72.2, 53.4, 71.25]], ["C", [53.6, 70.2, 53.9, 69.25]], ["L", [53.9, 68.4]], ["C", [54.1, 67.7, 54.1, 66.9]], ["C", [54.1, 66.1, 54.3, 65.3]], ["L", [54.3, 64.3]], ["C", [54.5, 63.8, 54.5, 62.7]], ["C", [54.5, 61.6, 54.3, 61.1]], ["L", [54.3, 59.2]], ["C", [54.1, 58.3, 54.05, 57.3]], ["C", [54, 56.3, 53.8, 55.5]], ["C", [53.6, 55, 53.65, 54.55]], ["C", [53.7, 54.1, 53.5, 53.6]], ["C", [53.05, 52, 52.55, 50.6]], ["C", [52.1, 49.1, 51.3, 47.8]], ["C", [49.8, 45.4, 47.85, 43.65]], ["C", [45.9, 41.9, 43.1, 40.7]], ["C", [42.2, 40.4, 41.3, 40.15]], ["M", [59.35, 33.75]], ["C", [60.35, 34.5, 61.15, 35.5]], ["L", [62, 36.3]], ["C", [62.55, 37.1, 63.2, 37.9]], ["C", [63.8, 38.6, 64.35, 39.4]], ["C", [65.65, 41.5, 66.65, 43.85]], ["C", [67.65, 46.25, 68.45, 48.8]], ["C", [68.95, 50.1, 69.1, 51.5]], ["C", [69.25, 52.9, 69.55, 54.3]], ["C", [69.55, 54.8, 69.6, 55.15]], ["C", [69.65, 55.5, 69.65, 55.9]], ["C", [69.8, 56.5, 69.8, 57.2]], ["C", [69.75, 57.9, 69.9, 58.4]], ["L", [69.9, 59.5]], ["C", [69.9, 59.8, 69.95, 60.3]], ["C", [70, 60.85, 70, 61.4]], ["C", [70, 62, 69.95, 62.5]], ["C", [69.9, 63.05, 69.9, 63.2]], ["C", [69.9, 63.9, 69.85, 64.55]], ["C", [69.8, 65.2, 69.8, 65.8]], ["C", [69.65, 66.3, 69.7, 66.8]], ["C", [69.75, 67.3, 69.65, 67.8]], ["C", [69.45, 68.9, 69.35, 70]], ["C", [69.25, 71.1, 68.95, 72.2]], ["C", [68.45, 73.9, 68, 75.5]], ["C", [67.65, 77, 67.05, 78.5]], ["C", [65.35, 82.7, 62.85, 86.1]], ["C", [60.35, 89.5, 56.85, 91.9]], ["C", [54.85, 93.3, 52.7, 94.35]], ["C", [50.55, 95.3, 48.05, 96.1]], ["C", [47, 96.45, 46, 96.55]], ["C", [44.9, 96.7, 43.85, 97]], ["C", [43.3, 97.1, 42.85, 97.1]], ["C", [42.45, 97.1, 41.95, 97.2]], ["C", [41.55, 97.3, 41.1, 97.25]], ["C", [40.7, 97.2, 40.25, 97.3]], ["C", [40.05, 97.4, 39.65, 97.35]], ["C", [39.25, 97.3, 39, 97.4]], ["C", [38.25, 97.6, 37, 97.5]], ["C", [35.85, 97.4, 34.9, 97.4]], ["L", [11.6, 97.4]], ["C", [9.9, 97.4, 8.8, 97.25]], ["C", [7.6, 97.1, 7.15, 95.9]], ["C", [6.85, 95.1, 6.9, 93.45]], ["C", [6.95, 91.8, 6.95, 90.7]], ["L", [6.95, 32]], ["C", [6.95, 30.8, 6.9, 29.5]], ["C", [6.85, 28.1, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.25, 26.25]], ["C", [9.4, 26.3, 9.6, 26.2]], ["L", [36.5, 26.2]], ["C", [37.15, 26.2, 37.8, 26.15]], ["C", [38.45, 26.1, 38.9, 26.2]], ["L", [40.15, 26.2]], ["C", [40.65, 26.4, 41.2, 26.35]], ["C", [41.85, 26.3, 42.35, 26.5]], ["C", [42.9, 26.7, 43.5, 26.65]], ["C", [44.05, 26.6, 44.65, 26.8]], ["C", [46.05, 27.1, 47.3, 27.4]], ["C", [48.65, 27.65, 49.85, 28.1]], ["C", [50.95, 28.6, 52.05, 29]], ["C", [53.15, 29.45, 54.15, 30]], ["C", [56.65, 31.65, 58.75, 33.1]], ["L", [59.35, 33.75]]];
__motifs["E"] = [["M", [58, 26.3]], ["C", [59.15, 26.4, 59.6, 27.1]], ["C", [59.8, 27.45, 59.85, 27.8]], ["C", [59.9, 28.2, 60.1, 28.6]], ["L", [60.1, 29.75]], ["C", [60.2, 30.4, 60.15, 31.2]], ["C", [60.1, 32, 60.1, 32.7]], ["C", [60.1, 33.5, 60.15, 34.25]], ["C", [60.2, 35, 60.1, 35.7]], ["C", [60, 36.2, 60, 37.2]], ["C", [59.7, 38.4, 59.05, 38.8]], ["C", [58.4, 39.2, 57.5, 39.2]], ["C", [56.6, 39.2, 55.6, 39.2]], ["L", [30.6, 39.2]], ["C", [29.85, 39.2, 28.75, 39.15]], ["C", [27.75, 39.1, 26.65, 39.15]], ["C", [25.65, 39.2, 24.7, 39.35]], ["C", [23.85, 39.5, 23.4, 39.8]], ["C", [22.7, 40.3, 22.55, 41.25]], ["C", [22.4, 42.2, 22.4, 43.4]], ["L", [22.4, 52]], ["C", [22.6, 52.75, 22.8, 53.3]], ["C", [23, 53.9, 23.55, 54.2]], ["C", [24.1, 54.6, 24.9, 54.65]], ["C", [25.75, 54.7, 26.6, 54.7]], ["L", [49.2, 54.7]], ["C", [49.9, 54.7, 51, 54.65]], ["C", [52, 54.6, 53.05, 54.65]], ["C", [54, 54.7, 54.9, 54.8]], ["C", [55.7, 54.85, 56.1, 55.15]], ["C", [56.6, 55.45, 56.85, 56.4]], ["C", [57.05, 57.25, 57.1, 58.35]], ["C", [57.15, 59.35, 57.1, 60.5]], ["C", [57.05, 61.55, 57.05, 62.4]], ["C", [57.05, 63.1, 57.05, 63.8]], ["C", [57.05, 64.5, 56.85, 65]], ["C", [56.6, 65.8, 56, 66.3]], ["C", [55.5, 66.6, 54.65, 66.7]], ["C", [53.8, 66.8, 52.8, 66.8]], ["C", [51.7, 66.8, 50.7, 66.75]], ["C", [49.6, 66.7, 48.95, 66.7]], ["L", [29.4, 66.7]], ["C", [28.2, 66.7, 27.1, 66.65]], ["C", [26.05, 66.6, 25.05, 66.75]], ["C", [24.1, 66.9, 23.5, 67.3]], ["C", [22.8, 67.8, 22.5, 68.7]], ["C", [22.4, 69.2, 22.4, 69.75]], ["C", [22.4, 70.3, 22.4, 70.8]], ["L", [22.4, 80.2]], ["C", [22.4, 81.4, 22.55, 82.35]], ["C", [22.7, 83.3, 23.4, 83.85]], ["C", [23.75, 84.1, 24.15, 84.15]], ["C", [24.6, 84.2, 25.1, 84.4]], ["L", [26.1, 84.4]], ["C", [26.6, 84.5, 27.2, 84.45]], ["C", [27.85, 84.4, 28.3, 84.4]], ["L", [56.6, 84.4]], ["C", [57.4, 84.4, 58.15, 84.4]], ["C", [58.95, 84.4, 59.5, 84.7]], ["C", [60.3, 85, 60.6, 85.85]], ["C", [60.8, 86.3, 60.85, 87]], ["C", [60.9, 87.75, 60.9, 88.5]], ["L", [60.9, 93.1]], ["C", [60.9, 94.35, 60.8, 95.35]], ["C", [60.7, 96.45, 59.9, 96.9]], ["C", [59.35, 97.4, 58.35, 97.4]], ["C", [57.4, 97.4, 56.3, 97.4]], ["L", [11.35, 97.4]], ["C", [9.9, 97.4, 8.9, 97.25]], ["C", [7.8, 97.1, 7.3, 96.3]], ["C", [6.95, 95.7, 6.95, 94.75]], ["C", [6.95, 93.8, 6.95, 92.9]], ["L", [6.95, 30.5]], ["C", [6.95, 29.65, 6.95, 28.7]], ["C", [6.95, 27.8, 7.3, 27.35]], ["C", [7.7, 26.6, 8.85, 26.3]], ["C", [9.05, 26.2, 9.25, 26.25]], ["C", [9.4, 26.3, 9.6, 26.2]], ["L", [55.7, 26.2]], ["C", [56.95, 26.2, 58, 26.3]]];
__motifs["F"] = [["M", [56.95, 37.1]], ["C", [56.7, 37.6, 56.55, 38.05]], ["C", [56.4, 38.5, 56, 38.8]], ["C", [55.2, 39.4, 53.25, 39.35]], ["C", [51.3, 39.3, 49.9, 39.3]], ["L", [30.6, 39.3]], ["C", [29, 39.3, 26.75, 39.25]], ["C", [24.5, 39.2, 23.55, 39.8]], ["C", [22.9, 40.2, 22.5, 41.3]], ["C", [22.3, 42, 22.35, 43.1]], ["C", [22.4, 44.2, 22.4, 45]], ["L", [22.4, 49.8]], ["C", [22.4, 50.3, 22.35, 51]], ["C", [22.3, 51.7, 22.4, 52.2]], ["L", [22.4, 53.3]], ["C", [22.6, 54.2, 22.85, 54.8]], ["C", [23.1, 55.4, 23.95, 55.7]], ["C", [24.4, 55.9, 25.1, 55.95]], ["C", [25.85, 56, 26.6, 56]], ["L", [44.35, 56]], ["C", [45.1, 56, 46.15, 55.95]], ["C", [47.2, 55.9, 48.25, 55.95]], ["C", [49.3, 56, 50.15, 56.1]], ["C", [51.05, 56.2, 51.4, 56.5]], ["C", [52.4, 57.2, 52.35, 59.15]], ["C", [52.3, 61.1, 52.3, 62.7]], ["C", [52.3, 63.5, 52.35, 64.45]], ["C", [52.4, 65.4, 52.2, 66.2]], ["C", [51.8, 67.3, 51.1, 67.7]], ["C", [50.4, 68.1, 48.4, 68.05]], ["C", [46.45, 68, 45.1, 68]], ["L", [28.7, 68]], ["C", [26.8, 68, 25, 68.1]], ["C", [23.2, 68.2, 22.7, 69.5]], ["C", [22.5, 69.8, 22.5, 70.15]], ["C", [22.5, 70.5, 22.4, 70.8]], ["L", [22.4, 90.15]], ["C", [22.4, 91.5, 22.45, 93.55]], ["C", [22.5, 95.6, 22, 96.5]], ["C", [21.75, 97, 21.2, 97.15]], ["C", [20.7, 97.3, 20.2, 97.5]], ["C", [19.55, 97.7, 18.7, 97.6]], ["C", [17.9, 97.5, 17.15, 97.5]], ["L", [11.35, 97.5]], ["C", [10.2, 97.5, 9.3, 97.45]], ["C", [8.35, 97.4, 7.7, 96.9]], ["C", [7.05, 96.45, 7, 95.35]], ["C", [6.95, 94.35, 6.95, 93.2]], ["L", [6.95, 33.4]], ["C", [6.95, 32, 6.9, 30.1]], ["C", [6.85, 28.2, 7.3, 27.45]], ["C", [7.7, 26.7, 8.85, 26.4]], ["C", [9.05, 26.3, 9.25, 26.35]], ["C", [9.4, 26.4, 9.6, 26.3]], ["L", [52.75, 26.3]], ["C", [53.8, 26.3, 54.85, 26.4]], ["C", [55.8, 26.5, 56.3, 27.1]], ["C", [56.7, 27.65, 56.9, 28.45]], ["C", [57.05, 29.3, 57.05, 30.35]], ["C", [57.05, 31.4, 57, 32.45]], ["C", [56.95, 33.5, 56.95, 34.4]], ["C", [56.95, 35.1, 57, 35.8]], ["C", [57.05, 36.5, 56.95, 37.1]]];
__motifs["G"] = [["M", [48.1, 40.1]], ["C", [46.2, 38.75, 43.5, 38]], ["C", [43, 37.8, 42.4, 37.75]], ["C", [41.8, 37.7, 41.3, 37.6]], ["C", [41, 37.5, 40.4, 37.5]], ["C", [39.2, 37.3, 37.4, 37.45]], ["C", [35.6, 37.6, 34.6, 37.8]], ["C", [33.9, 38, 33.3, 38.1]], ["C", [32.7, 38.15, 32.1, 38.45]], ["C", [29.5, 39.6, 27.45, 41.1]], ["C", [25.4, 42.55, 23.9, 44.85]], ["C", [22.5, 46.75, 21.7, 48.95]], ["C", [20.9, 51.15, 20.2, 53.7]], ["C", [19.9, 54.8, 19.8, 55.9]], ["C", [19.7, 56.95, 19.5, 58.1]], ["L", [19.5, 59.35]], ["C", [19.3, 60, 19.35, 60.7]], ["C", [19.4, 61.35, 19.4, 62.1]], ["C", [19.4, 63.8, 19.5, 65.45]], ["C", [19.6, 67.2, 20, 68.7]], ["C", [20.1, 69.1, 20.1, 69.4]], ["C", [20.1, 69.7, 20.2, 70.1]], ["C", [21.6, 75.2, 24, 78.75]], ["C", [26.4, 82.3, 30.9, 84.3]], ["C", [31.8, 84.7, 32.75, 85]], ["C", [33.7, 85.3, 34.8, 85.6]], ["C", [35.4, 85.7, 35.95, 85.65]], ["C", [36.5, 85.6, 37, 85.8]], ["C", [37.6, 86.05, 38.5, 86.05]], ["C", [39.4, 86.05, 40.1, 85.8]], ["C", [40.6, 85.7, 41, 85.75]], ["C", [41.4, 85.8, 41.8, 85.7]], ["C", [42.3, 85.6, 42.65, 85.65]], ["C", [43, 85.7, 43.4, 85.5]], ["C", [44.8, 85.1, 46, 84.75]], ["C", [47.2, 84.4, 48.3, 83.8]], ["C", [50.8, 82.3, 52.3, 80.35]], ["C", [53.8, 78.4, 54.9, 75.5]], ["C", [55.3, 74.4, 55.45, 72.9]], ["C", [55.6, 71.4, 54.5, 70.8]], ["C", [53.9, 70.4, 52.95, 70.4]], ["C", [52, 70.4, 51.1, 70.4]], ["L", [46, 70.4]], ["C", [45.4, 70.4, 44.7, 70.45]], ["C", [44, 70.5, 43.4, 70.3]], ["L", [42.5, 70.3]], ["C", [42.1, 70.2, 41.7, 70.15]], ["C", [41.3, 70.1, 41, 69.9]], ["C", [40.5, 69.5, 40.3, 68.7]], ["C", [40.1, 67.9, 40.05, 66.95]], ["C", [40, 66, 40.05, 64.95]], ["C", [40.1, 63.9, 40.1, 63]], ["C", [40.1, 62.2, 40.15, 61.45]], ["C", [40.2, 60.8, 40.4, 60.3]], ["C", [40.8, 59.35, 41.5, 59.05]], ["C", [42.1, 58.9, 42.5, 58.9]], ["L", [43.6, 58.9]], ["C", [43.9, 58.8, 44.35, 58.8]], ["C", [44.8, 58.8, 45.2, 58.8]], ["L", [62.7, 58.8]], ["C", [64.4, 58.8, 66.55, 58.8]], ["C", [68.7, 58.8, 69.4, 59.65]], ["C", [69.9, 60.5, 69.9, 61.8]], ["C", [69.9, 63.1, 69.9, 64.3]], ["L", [69.9, 91.1]], ["C", [69.9, 93, 69.85, 94.75]], ["C", [69.8, 96.5, 68.5, 97]], ["C", [67.9, 97.3, 67.05, 97.3]], ["C", [66.2, 97.3, 65.4, 97.3]], ["C", [63.4, 97.3, 61.95, 97.15]], ["C", [60.5, 97, 59.9, 95.6]], ["C", [59.5, 94.7, 59.3, 93.6]], ["C", [59.1, 92.5, 58.6, 91.7]], ["C", [58.4, 91.5, 58.1, 91.25]], ["C", [57.8, 91, 57.3, 91.1]], ["C", [56.5, 91.3, 55.95, 91.9]], ["C", [55.4, 92.5, 54.8, 93]], ["C", [53.8, 93.8, 52.9, 94.45]], ["C", [52, 95.1, 50.9, 95.8]], ["C", [49.6, 96.6, 48.15, 97.1]], ["C", [46.7, 97.6, 45.2, 98.1]], ["C", [44.7, 98.3, 44.15, 98.35]], ["C", [43.6, 98.4, 43.1, 98.55]], ["C", [42.3, 98.7, 41.4, 98.7]], ["C", [40.5, 98.7, 39.6, 98.9]], ["C", [39.2, 99, 38.45, 98.95]], ["C", [37.7, 98.9, 37.4, 98.8]], ["L", [36.4, 98.8]], ["C", [35.9, 98.7, 35.45, 98.7]], ["C", [35, 98.7, 34.5, 98.6]], ["L", [33.7, 98.6]], ["C", [32.9, 98.4, 32.1, 98.3]], ["C", [31.3, 98.2, 30.5, 98]], ["C", [29.8, 97.8, 29.1, 97.65]], ["C", [28.4, 97.5, 27.7, 97.3]], ["C", [24.7, 96.4, 22.4, 95.2]], ["C", [16.5, 92.1, 12.8, 87.85]], ["C", [9.1, 83.6, 6.5, 77.3]], ["C", [5.9, 75.9, 5.6, 74.5]], ["C", [5.3, 73.1, 4.8, 71.7]], ["C", [4.7, 71.2, 4.7, 70.85]], ["C", [4.7, 70.5, 4.5, 70]], ["C", [4.3, 69.3, 4.3, 68.55]], ["C", [4.3, 67.8, 4.1, 67]], ["C", [3.9, 66.5, 3.95, 66.15]], ["C", [4, 65.8, 3.9, 65.25]], ["L", [3.9, 63.45]], ["C", [3.7, 63, 3.7, 61.95]], ["C", [3.7, 60.9, 3.9, 60.4]], ["L", [3.9, 59.25]], ["C", [4, 58.7, 3.95, 58.05]], ["C", [3.9, 57.35, 4.1, 56.9]], ["C", [4.3, 56, 4.3, 55.05]], ["C", [4.3, 54.2, 4.5, 53.35]], ["C", [4.8, 52.3, 5, 51.2]], ["C", [5.2, 50.2, 5.6, 49.05]], ["C", [6.1, 47.7, 6.55, 46.35]], ["C", [7, 44.95, 7.6, 43.7]], ["C", [8.2, 42.3, 9, 40.9]], ["C", [9.8, 39.6, 10.6, 38.35]], ["C", [13.6, 34.15, 17.4, 31.25]], ["C", [21.2, 28.25, 26.6, 26.25]], ["C", [27.7, 25.75, 29, 25.55]], ["C", [30.3, 25.3, 31.6, 25]], ["C", [32.1, 24.8, 32.65, 24.8]], ["C", [33.2, 24.8, 33.7, 24.6]], ["C", [34.4, 24.35, 35.05, 24.5]], ["C", [35.7, 24.6, 36.4, 24.35]], ["C", [36.6, 24.25, 36.95, 24.35]], ["C", [37.3, 24.5, 37.5, 24.35]], ["C", [47.6, 24.15, 54.4, 27.95]], ["C", [61.2, 31.8, 65, 37.8]], ["C", [66.9, 40.95, 68.1, 45.15]], ["C", [68.3, 45.9, 68.4, 46.9]], ["C", [68.5, 48, 68, 48.5]], ["C", [67.5, 49.15, 66.6, 49.25]], ["C", [65.7, 49.35, 64.6, 49.35]], ["L", [58.1, 49.35]], ["C", [57, 49.35, 56.05, 49.3]], ["C", [55.1, 49.25, 54.5, 48.75]], ["C", [53.6, 48.2, 53.25, 47.05]], ["C", [52.9, 46, 52.4, 44.95]], ["C", [51.5, 43.6, 50.5, 42.3]], ["C", [49.5, 41.1, 48.1, 40.1]]];
__motifs["H"] = [["M", [51.6, 33.4]], ["C", [51.6, 31.9, 51.55, 29.9]], ["C", [51.5, 27.9, 52.2, 27.1]], ["C", [52.5, 26.6, 53.45, 26.4]], ["C", [54.4, 26.2, 55.6, 26.15]], ["C", [56.8, 26.1, 58, 26.15]], ["C", [59.2, 26.2, 60.1, 26.2]], ["C", [61.8, 26.2, 63.65, 26.15]], ["C", [65.55, 26.1, 66.4, 26.9]], ["C", [67.1, 27.4, 67.1, 28.55]], ["C", [67.1, 29.75, 67.1, 30.8]], ["L", [67.1, 92.35]], ["C", [67.1, 93.6, 67.1, 94.9]], ["C", [67.1, 96.2, 66.4, 96.65]], ["C", [65.55, 97.5, 63.55, 97.45]], ["C", [61.6, 97.4, 59.9, 97.4]], ["C", [59, 97.4, 57.85, 97.45]], ["C", [56.7, 97.5, 55.55, 97.45]], ["C", [54.4, 97.4, 53.45, 97.25]], ["C", [52.5, 97.1, 52.2, 96.55]], ["C", [51.9, 96.2, 51.75, 95.25]], ["C", [51.6, 94.3, 51.55, 93.25]], ["C", [51.5, 92.2, 51.55, 91.15]], ["C", [51.6, 90.1, 51.6, 89.3]], ["L", [51.6, 71.9]], ["C", [51.6, 71.45, 51.65, 71.1]], ["C", [51.7, 70.7, 51.6, 70.3]], ["L", [51.6, 69.3]], ["C", [51.5, 69, 51.5, 68.7]], ["C", [51.5, 68.4, 51.4, 68.1]], ["C", [50.75, 66.7, 48.85, 66.7]], ["C", [46.9, 66.7, 44.9, 66.7]], ["L", [25.15, 66.7]], ["C", [24.35, 66.9, 23.85, 67.05]], ["C", [23.35, 67.2, 22.95, 67.8]], ["C", [22.75, 68.3, 22.55, 69.3]], ["L", [22.55, 70.3]], ["C", [22.45, 70.8, 22.5, 71.45]], ["C", [22.55, 72.1, 22.55, 72.6]], ["L", [22.55, 90.8]], ["C", [22.55, 92.3, 22.55, 94]], ["C", [22.55, 95.7, 21.95, 96.55]], ["C", [21.7, 97.1, 20.7, 97.25]], ["C", [19.8, 97.4, 18.6, 97.45]], ["C", [17.5, 97.5, 16.25, 97.45]], ["C", [15.1, 97.4, 14.15, 97.4]], ["C", [12.8, 97.4, 10.8, 97.45]], ["C", [8.8, 97.5, 7.95, 96.9]], ["C", [7.2, 96.3, 7.1, 95]], ["C", [7, 93.7, 7, 92.3]], ["L", [7, 31.5]], ["C", [7, 30.4, 7, 29.2]], ["C", [7, 28, 7.35, 27.3]], ["C", [7.75, 26.6, 8.8, 26.3]], ["C", [9, 26.3, 9.25, 26.25]], ["C", [9.45, 26.2, 9.65, 26.2]], ["L", [17.7, 26.2]], ["C", [19.4, 26.2, 20.6, 26.35]], ["C", [21.9, 26.5, 22.35, 27.9]], ["C", [22.55, 28.4, 22.55, 28.95]], ["C", [22.55, 29.5, 22.55, 30]], ["L", [22.55, 45.6]], ["C", [22.55, 47.3, 22.45, 49.45]], ["C", [22.35, 51.6, 23.15, 52.7]], ["C", [23.65, 53.3, 24.3, 53.35]], ["C", [24.95, 53.4, 25.75, 53.6]], ["L", [45, 53.6]], ["C", [46.85, 53.6, 48.75, 53.55]], ["C", [50.65, 53.5, 51.3, 52.3]], ["C", [51.8, 51.4, 51.7, 49.6]], ["C", [51.6, 47.8, 51.6, 46.45]], ["L", [51.6, 33.4]]];
__motifs["I"] = [["M", [9.45, 26.3]], ["L", [18.05, 26.3]], ["C", [19.2, 26.3, 20.15, 26.35]], ["C", [21.2, 26.4, 21.7, 27.1]], ["C", [22.15, 27.8, 22.2, 28.9]], ["C", [22.25, 30, 22.25, 31.3]], ["L", [22.25, 91.1]], ["C", [22.25, 92.4, 22.3, 94]], ["C", [22.35, 95.6, 21.9, 96.45]], ["C", [21.5, 97.1, 20.05, 97.5]], ["C", [19.4, 97.7, 18.55, 97.6]], ["C", [17.75, 97.5, 17, 97.5]], ["L", [11.1, 97.5]], ["C", [9.95, 97.5, 9.05, 97.4]], ["C", [8.1, 97.3, 7.45, 96.8]], ["C", [7, 96.35, 6.9, 95.3]], ["C", [6.8, 94.35, 6.8, 93.2]], ["L", [6.8, 33.4]], ["C", [6.8, 32, 6.75, 30.1]], ["C", [6.7, 28.2, 7.2, 27.4]], ["C", [7.55, 26.8, 8.5, 26.4]], ["C", [8.8, 26.4, 9.05, 26.35]], ["C", [9.3, 26.3, 9.45, 26.3]]];
__motifs["J"] = [["M", [48.6, 34.6]], ["L", [48.6, 71.7]], ["C", [48.6, 74, 48.65, 76.45]], ["C", [48.7, 78.9, 48.2, 80.9]], ["C", [48, 81.4, 48.05, 81.85]], ["C", [48.1, 82.3, 47.9, 82.8]], ["C", [47.6, 83.7, 47.35, 84.65]], ["C", [47.15, 85.6, 46.8, 86.5]], ["C", [44.6, 92, 40.5, 94.9]], ["C", [39.1, 95.9, 37.45, 96.55]], ["C", [35.8, 97.3, 34, 97.9]], ["C", [33.2, 98.1, 32.45, 98.25]], ["C", [31.7, 98.4, 30.9, 98.55]], ["C", [30.15, 98.8, 29.15, 98.8]], ["C", [28.2, 98.8, 27.3, 99]], ["L", [26.2, 99]], ["C", [25.6, 99.2, 24.55, 99.15]], ["C", [23.5, 99.1, 22.9, 98.9]], ["C", [21.85, 98.9, 21.3, 98.8]], ["C", [20.3, 98.55, 19.35, 98.5]], ["C", [18.4, 98.4, 17.65, 98.2]], ["C", [16.5, 97.8, 15.45, 97.5]], ["C", [14.3, 97.2, 13.35, 96.7]], ["C", [10.1, 95.3, 7.5, 92.85]], ["C", [4.95, 90.35, 3.5, 87.2]], ["C", [3.15, 86.15, 2.85, 85.2]], ["C", [2.5, 84.2, 2.2, 83.1]], ["C", [2, 82.3, 2, 81.9]], ["C", [1.8, 81.4, 1.85, 81]], ["C", [1.9, 80.6, 1.7, 80.1]], ["C", [1.6, 79.85, 1.6, 79.55]], ["C", [1.6, 79.2, 1.6, 79]], ["L", [1.6, 78]], ["C", [1.5, 77.5, 1.5, 76.95]], ["C", [1.5, 76.4, 1.5, 75.9]], ["C", [1.5, 74.5, 1.6, 73.25]], ["C", [1.7, 72, 2.5, 71.45]], ["C", [3.3, 71, 4.65, 71]], ["C", [6, 71, 7.25, 71]], ["C", [8.1, 71, 9.35, 70.95]], ["C", [10.5, 70.9, 11.65, 70.95]], ["C", [12.8, 71, 13.75, 71.2]], ["C", [14.7, 71.4, 15, 71.9]], ["C", [15.7, 72.9, 15.6, 74.5]], ["C", [15.45, 76.1, 15.7, 77.5]], ["C", [15.9, 78.1, 15.95, 78.65]], ["C", [16, 79.2, 16.2, 79.8]], ["C", [16.6, 81.2, 17.2, 82.35]], ["C", [17.8, 83.5, 18.9, 84.3]], ["C", [20.1, 85.2, 22.2, 85.8]], ["C", [24.3, 86.4, 26.5, 85.9]], ["C", [27, 85.7, 27.4, 85.7]], ["C", [27.85, 85.7, 28.2, 85.5]], ["C", [31.2, 84.3, 32.25, 81.4]], ["C", [32.6, 80.5, 32.7, 79.55]], ["C", [32.8, 78.6, 33, 77.5]], ["C", [33, 76.9, 33, 76.35]], ["C", [33, 75.75, 33.1, 75.2]], ["C", [33.2, 74.7, 33.15, 74.05]], ["C", [33.1, 73.4, 33.1, 72.8]], ["L", [33.1, 31.6]], ["C", [33.1, 30.5, 33.05, 29.3]], ["C", [33, 28.1, 33.5, 27.3]], ["C", [33.9, 26.7, 35, 26.3]], ["C", [35.6, 26.3, 35.8, 26.2]], ["L", [44.3, 26.2]], ["C", [45.4, 26.2, 46.4, 26.3]], ["C", [47.35, 26.4, 47.9, 26.9]], ["C", [48.3, 27.4, 48.45, 28.35]], ["C", [48.6, 29.3, 48.65, 30.4]], ["C", [48.7, 31.5, 48.65, 32.6]], ["C", [48.6, 33.7, 48.6, 34.6]]];
__motifs["K"] = [["M", [55.5, 26.2]], ["L", [63.25, 26.2]], ["C", [64.3, 26.2, 65.6, 26.15]], ["C", [66.8, 26.1, 67.55, 26.6]], ["C", [68.1, 27.1, 67.8, 27.75]], ["C", [67.55, 28.4, 67.35, 28.8]], ["C", [66.8, 29.3, 66.3, 29.75]], ["C", [65.8, 30.2, 65.35, 30.7]], ["C", [64.6, 31.5, 63.95, 32.2]], ["C", [63.35, 32.9, 62.5, 33.6]], ["C", [59.05, 37.1, 55.5, 40.7]], ["C", [52, 44.3, 48.5, 47.8]], ["C", [46.9, 49.6, 45.1, 51.2]], ["C", [44.45, 51.9, 43.8, 52.55]], ["C", [43.2, 53.2, 43, 54.3]], ["C", [42.8, 55.1, 43.3, 55.85]], ["C", [43.8, 56.6, 44.1, 57.1]], ["C", [45.1, 58.6, 46.15, 60.05]], ["C", [47.2, 61.5, 48.2, 63]], ["C", [52.4, 69, 56.6, 74.85]], ["C", [60.8, 80.7, 65, 86.7]], ["L", [68.6, 91.8]], ["C", [69, 92.4, 69.5, 92.95]], ["C", [69.9, 93.5, 70.3, 94.1]], ["C", [70.6, 94.6, 71, 95.5]], ["C", [71.4, 96.4, 70.7, 96.9]], ["C", [70, 97.4, 68.7, 97.4]], ["C", [67.45, 97.4, 66.3, 97.4]], ["L", [58.4, 97.4]], ["C", [57.3, 97.4, 56.2, 97.45]], ["C", [55.15, 97.5, 54.2, 97.3]], ["C", [53.15, 96.9, 52.45, 96.15]], ["C", [51.8, 95.4, 51.2, 94.5]], ["C", [50.6, 93.7, 50.05, 92.85]], ["C", [49.5, 92, 48.95, 91.1]], ["C", [46.2, 86.9, 43.4, 82.9]], ["C", [40.65, 78.9, 37.8, 74.7]], ["C", [36.7, 73, 35.65, 71.4]], ["C", [34.6, 69.8, 33.5, 68.2]], ["C", [33.1, 67.7, 32.5, 67.05]], ["C", [31.95, 66.4, 30.9, 66.6]], ["C", [29.95, 66.9, 28.9, 67.95]], ["C", [27.95, 69, 27.2, 69.7]], ["C", [26.7, 70.2, 26.2, 70.75]], ["C", [25.75, 71.3, 25.2, 71.8]], ["C", [24.5, 72.5, 23.95, 73.15]], ["C", [23.3, 73.8, 22.9, 74.7]], ["C", [22.6, 75.3, 22.55, 76]], ["C", [22.5, 76.7, 22.5, 77.5]], ["L", [22.5, 78.8]], ["C", [22.4, 79.3, 22.45, 79.95]], ["C", [22.5, 80.6, 22.5, 81.1]], ["L", [22.5, 92.9]], ["C", [22.5, 94, 22.45, 95]], ["C", [22.4, 96, 21.9, 96.6]], ["C", [21.45, 97.2, 20.4, 97.3]], ["C", [19.45, 97.4, 18.3, 97.4]], ["L", [11.5, 97.4]], ["C", [10.45, 97.4, 9.4, 97.35]], ["C", [8.45, 97.3, 7.7, 96.8]], ["C", [7.05, 96.3, 7.05, 94.95]], ["C", [7.05, 93.6, 7.05, 92.3]], ["L", [7.05, 31.5]], ["C", [7.05, 30.4, 7, 29.2]], ["C", [6.95, 28, 7.3, 27.3]], ["C", [7.9, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [17.45, 26.2]], ["C", [19.35, 26.2, 20.6, 26.35]], ["C", [21.9, 26.5, 22.4, 28.1]], ["C", [22.5, 28.6, 22.5, 29.15]], ["C", [22.5, 29.7, 22.5, 30.3]], ["L", [22.5, 49.5]], ["C", [22.5, 50.4, 22.5, 51.3]], ["C", [22.5, 52.2, 22.8, 52.9]], ["C", [22.9, 53.1, 23.15, 53.3]], ["C", [23.4, 53.5, 23.65, 53.5]], ["C", [24.3, 53.7, 24.95, 53.1]], ["C", [25.6, 52.5, 25.95, 52.2]], ["C", [26.7, 51.4, 27.5, 50.6]], ["C", [28.3, 49.8, 29, 48.9]], ["C", [29.3, 48.7, 29.85, 48.2]], ["C", [30.2, 47.8, 30.6, 47.35]], ["C", [31, 46.9, 31.3, 46.4]], ["C", [31.5, 46.2, 31.7, 46.1]], ["C", [31.95, 46, 32.15, 45.8]], ["C", [32.6, 45, 33.3, 44.45]], ["C", [34.05, 43.9, 34.5, 43.2]], ["C", [35.1, 42.4, 35.6, 41.9]], ["C", [35.8, 41.8, 36.15, 41.5]], ["C", [37.3, 39.9, 38.8, 38.6]], ["C", [40.35, 37.3, 41.5, 35.7]], ["L", [42, 35.2]], ["C", [42.35, 34.9, 42.65, 34.6]], ["C", [42.9, 34.3, 43.2, 33.9]], ["C", [43.3, 33.7, 43.4, 33.65]], ["C", [43.5, 33.6, 43.7, 33.4]], ["C", [44.3, 33, 44.65, 32.3]], ["C", [44.8, 32.1, 45.1, 31.9]], ["C", [45.4, 31.7, 45.6, 31.5]], ["C", [45.9, 31, 46.3, 30.6]], ["C", [46.75, 30.2, 47.1, 29.7]], ["C", [47.3, 29.5, 47.45, 29.4]], ["C", [47.6, 29.3, 47.8, 29.1]], ["C", [48.5, 28.1, 49.4, 27.35]], ["C", [50.3, 26.6, 51.7, 26.3]], ["C", [52.5, 26.1, 53.55, 26.15]], ["C", [54.6, 26.2, 55.5, 26.2]]];
__motifs["L"] = [["M", [9.7, 26.2]], ["L", [18.2, 26.2]], ["C", [19.35, 26.2, 20.35, 26.25]], ["C", [21.45, 26.3, 21.9, 27]], ["C", [22.4, 27.7, 22.4, 28.85]], ["C", [22.4, 30, 22.4, 31.3]], ["L", [22.4, 76.6]], ["C", [22.4, 77.45, 22.35, 78.15]], ["C", [22.3, 78.9, 22.5, 79.65]], ["L", [22.5, 80.6]], ["C", [22.5, 81.35, 22.55, 81.95]], ["C", [22.6, 82.6, 22.8, 83.1]], ["C", [23.5, 84.4, 25.6, 84.4]], ["C", [27.75, 84.4, 29.7, 84.4]], ["L", [49.1, 84.4]], ["C", [49.9, 84.4, 51.1, 84.35]], ["C", [52.3, 84.3, 53.4, 84.35]], ["C", [54.5, 84.4, 55.45, 84.6]], ["C", [56.4, 84.8, 56.7, 85.2]], ["C", [57.25, 85.85, 57.25, 86.7]], ["C", [57.25, 87.6, 57.25, 88.6]], ["L", [57.25, 93.2]], ["C", [57.25, 94, 57.3, 94.7]], ["C", [57.3, 95.4, 57.15, 95.9]], ["C", [56.7, 96.7, 56.1, 97]], ["C", [55.6, 97.4, 54.6, 97.4]], ["C", [53.6, 97.4, 52.75, 97.4]], ["L", [11.35, 97.4]], ["C", [9.9, 97.4, 8.9, 97.25]], ["C", [7.8, 97.1, 7.3, 96.3]], ["C", [6.95, 95.7, 6.95, 94.75]], ["C", [6.95, 93.8, 6.95, 92.9]], ["L", [6.95, 30.5]], ["C", [6.95, 29.65, 7, 28.7]], ["C", [7.05, 27.8, 7.3, 27.3]], ["C", [7.7, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]]];
__motifs["M"] = [["M", [83.7, 32.2]], ["L", [83.7, 93.1]], ["C", [83.7, 94.2, 83.65, 95.25]], ["C", [83.6, 96.3, 83, 96.8]], ["C", [82.4, 97.3, 81.5, 97.35]], ["C", [80.6, 97.4, 79.5, 97.4]], ["L", [71.95, 97.4]], ["C", [71.2, 97.2, 70.65, 97.1]], ["C", [70.05, 97, 69.7, 96.4]], ["C", [69.3, 95.9, 69.3, 95.1]], ["C", [69.3, 94.3, 69.3, 93.4]], ["L", [69.3, 62.6]], ["C", [69.2, 61.2, 69.2, 59.95]], ["C", [69.2, 58.7, 69.2, 57.4]], ["C", [69.2, 56.6, 69.25, 55.75]], ["C", [69.3, 54.9, 69.1, 54.1]], ["C", [68.9, 53.4, 68.9, 52.6]], ["C", [68.9, 51.8, 68.3, 51.6]], ["C", [67.95, 51.5, 67.8, 51.7]], ["C", [67.7, 51.9, 67.6, 52]], ["C", [67.2, 52.4, 66.95, 52.95]], ["C", [66.7, 53.5, 66.5, 54]], ["C", [65.85, 55.5, 65.35, 57.1]], ["C", [64.8, 58.7, 64.2, 60.3]], ["C", [64, 60.9, 63.8, 61.5]], ["C", [63.65, 62.1, 63.4, 62.7]], ["C", [62.9, 64, 62.5, 65.3]], ["C", [62.1, 66.6, 61.55, 67.9]], ["C", [61.4, 68.2, 61.4, 68.55]], ["C", [61.4, 68.9, 61.2, 69.2]], ["C", [60.8, 70.1, 60.55, 71.1]], ["C", [60.3, 72.1, 59.75, 73.1]], ["C", [59.4, 74, 59.15, 75]], ["C", [58.9, 76, 58.5, 77]], ["C", [57.3, 79.9, 56.4, 82.85]], ["C", [55.45, 85.8, 54.4, 88.7]], ["C", [54.2, 89, 54.2, 89.3]], ["C", [54.2, 89.6, 54, 89.9]], ["C", [53.45, 91, 53.15, 92.15]], ["C", [52.9, 93.3, 52.4, 94.4]], ["C", [52.1, 95.1, 51.85, 95.7]], ["C", [51.6, 96.3, 51.05, 96.7]], ["C", [50.6, 97.1, 50.1, 97.15]], ["C", [49.6, 97.2, 48.9, 97.4]], ["L", [46.6, 97.4]], ["C", [45.9, 97.4, 44.9, 97.45]], ["C", [44, 97.5, 43, 97.5]], ["C", [42.1, 97.5, 41.3, 97.4]], ["C", [40.5, 97.3, 40.1, 97]], ["C", [39.3, 96.5, 38.95, 95.85]], ["C", [38.65, 95.2, 38.3, 94.3]], ["C", [37.8, 93.1, 37.45, 91.85]], ["C", [37.05, 90.6, 36.55, 89.4]], ["L", [36.3, 88.5]], ["C", [35.8, 87.3, 35.4, 85.95]], ["C", [34.95, 84.6, 34.45, 83.4]], ["C", [34.4, 83.1, 34.35, 82.85]], ["C", [34.3, 82.6, 34.2, 82.3]], ["C", [33.7, 81.4, 33.4, 80.4]], ["C", [33.1, 79.4, 32.65, 78.4]], ["C", [32.55, 78.2, 32.5, 77.9]], ["C", [32.45, 77.6, 32.35, 77.4]], ["C", [32, 76.4, 31.75, 75.4]], ["C", [31.5, 74.4, 31, 73.4]], ["C", [30.2, 71.4, 29.5, 69.2]], ["C", [28.75, 67, 28, 64.9]], ["C", [27.1, 62.4, 26.25, 59.8]], ["C", [25.5, 57.2, 24.35, 54.8]], ["C", [23.9, 53.4, 23.3, 52.5]], ["C", [23.1, 52.3, 22.9, 52.15]], ["C", [22.65, 52, 22.35, 52.2]], ["C", [21.9, 52.5, 21.9, 53.2]], ["C", [21.9, 53.9, 21.7, 54.6]], ["C", [21.5, 55.3, 21.55, 56.05]], ["C", [21.6, 56.8, 21.6, 57.6]], ["C", [21.6, 58.7, 21.6, 59.8]], ["C", [21.6, 60.9, 21.5, 62]], ["L", [21.5, 93.5]], ["C", [21.5, 94.3, 21.5, 95.1]], ["C", [21.5, 95.9, 21.1, 96.4]], ["C", [20.7, 97.1, 19.6, 97.3]], ["C", [18.9, 97.5, 18.1, 97.45]], ["C", [17.3, 97.4, 16.5, 97.4]], ["L", [11.3, 97.4]], ["C", [10.2, 97.4, 9.3, 97.35]], ["C", [8.4, 97.3, 7.75, 96.8]], ["C", [7.2, 96.3, 7.1, 95.25]], ["C", [7, 94.2, 7, 93.1]], ["L", [7, 33.1]], ["C", [7, 32.5, 7, 31.65]], ["C", [7, 30.8, 7, 30]], ["C", [7, 29.2, 7.1, 28.45]], ["C", [7.2, 27.7, 7.35, 27.3]], ["C", [7.75, 26.6, 9, 26.3]], ["C", [9.2, 26.2, 9.4, 26.25]], ["C", [9.55, 26.3, 9.75, 26.2]], ["L", [22.9, 26.2]], ["C", [24.45, 26.2, 26.1, 26.2]], ["C", [27.8, 26.2, 28.65, 26.9]], ["C", [29.4, 27.4, 29.7, 28.35]], ["C", [30, 29.3, 30.25, 30.2]], ["C", [30.85, 31.8, 31.45, 33.45]], ["C", [32, 35.1, 32.55, 36.8]], ["C", [34.85, 43.1, 36.9, 49.6]], ["C", [38.95, 56.1, 41.35, 62.5]], ["C", [42.2, 64.5, 42.75, 66.6]], ["C", [43.35, 68.7, 44.2, 70.7]], ["C", [44.4, 71.2, 44.6, 71.7]], ["C", [44.8, 72.2, 45.25, 72.5]], ["C", [45.45, 72.6, 45.7, 72.7]], ["C", [45.9, 72.8, 46.1, 72.6]], ["C", [46.9, 72.4, 47.15, 71.4]], ["C", [47.45, 70.4, 47.8, 69.6]], ["C", [48.6, 67.3, 49.2, 65.05]], ["C", [49.9, 62.8, 50.7, 60.5]], ["C", [52.7, 54.4, 54.7, 48.25]], ["C", [56.7, 42.1, 58.7, 35.9]], ["C", [59.2, 34.3, 59.65, 32.75]], ["C", [60.2, 31.2, 60.7, 29.6]], ["C", [61, 28.8, 61.3, 28]], ["C", [61.55, 27.2, 62.4, 26.7]], ["C", [63, 26.2, 63.9, 26.2]], ["C", [64.9, 26.2, 65.85, 26.2]], ["L", [79.3, 26.2]], ["C", [80.2, 26.2, 81.15, 26.2]], ["C", [82.1, 26.2, 82.55, 26.6]], ["C", [83.7, 27.2, 83.7, 28.85]], ["C", [83.7, 30.5, 83.7, 32.2]]];
__motifs["N"] = [["M", [52.55, 31.3]], ["C", [52.5, 30.8, 52.6, 30.4]], ["L", [52.6, 29.3]], ["C", [52.6, 27.9, 53.15, 27.1]], ["C", [53.65, 26.4, 54.55, 26.3]], ["C", [55.35, 26.2, 56.5, 26.2]], ["L", [62.6, 26.2]], ["C", [63.4, 26.2, 64.2, 26.2]], ["C", [65, 26.2, 65.6, 26.4]], ["C", [66.9, 26.9, 67, 28.15]], ["C", [67.1, 29.4, 67.1, 31.1]], ["L", [67.1, 92.4]], ["C", [67.1, 93.5, 67.15, 94.6]], ["C", [67.2, 95.7, 66.8, 96.35]], ["C", [66.4, 96.9, 65.85, 97.05]], ["C", [65.3, 97.2, 64.5, 97.4]], ["L", [55.5, 97.4]], ["C", [54.6, 97.4, 53.75, 97.4]], ["C", [52.9, 97.4, 52.3, 97.1]], ["C", [51.15, 96.6, 50.6, 95.75]], ["C", [50, 94.9, 49.4, 93.9]], ["C", [48.5, 92.5, 47.65, 91.05]], ["C", [46.8, 89.6, 45.9, 88.2]], ["L", [30.9, 64.2]], ["C", [29.5, 61.9, 28.15, 59.75]], ["C", [26.8, 57.6, 25.4, 55.3]], ["C", [24.9, 54.65, 24.2, 53.55]], ["C", [23.6, 52.55, 22.45, 52.55]], ["C", [21.7, 53.2, 21.65, 54.1]], ["C", [21.6, 55, 21.6, 56.4]], ["L", [21.6, 91.2]], ["C", [21.6, 91.7, 21.65, 92.25]], ["C", [21.7, 92.7, 21.5, 93.2]], ["L", [21.5, 94.35]], ["C", [21.5, 95.9, 21, 96.6]], ["C", [20.5, 97.2, 19.65, 97.3]], ["C", [18.8, 97.4, 17.7, 97.4]], ["L", [11.55, 97.4]], ["C", [10.8, 97.4, 10, 97.4]], ["C", [9.2, 97.4, 8.6, 97.2]], ["C", [7.3, 96.7, 7.15, 95.4]], ["C", [7, 94.15, 7, 92.4]], ["L", [7, 31.5]], ["C", [7, 30.4, 7, 29.2]], ["C", [7, 28, 7.35, 27.3]], ["C", [7.75, 26.6, 8.8, 26.3]], ["C", [9, 26.3, 9.25, 26.25]], ["C", [9.45, 26.2, 9.65, 26.2]], ["L", [17.75, 26.2]], ["C", [18.9, 26.2, 19.9, 26.15]], ["C", [21, 26.1, 21.8, 26.5]], ["C", [22.75, 26.9, 23.35, 27.7]], ["C", [23.9, 28.5, 24.35, 29.3]], ["L", [28, 35]], ["C", [31.5, 40.7, 35, 46.4]], ["C", [38.55, 52, 42.1, 57.7]], ["C", [43.8, 60.4, 45.45, 63.15]], ["C", [47.05, 65.9, 48.9, 68.5]], ["C", [49.25, 69.15, 49.65, 69.7]], ["C", [50, 70.3, 50.6, 70.8]], ["C", [50.8, 71, 51.05, 71.25]], ["C", [51.35, 71.45, 51.7, 71.25]], ["C", [52.4, 71, 52.4, 70.3]], ["C", [52.4, 69.6, 52.6, 68.8]], ["C", [52.7, 68.1, 52.65, 67.3]], ["C", [52.6, 66.4, 52.6, 65.6]], ["L", [52.6, 32.3]], ["C", [52.6, 31.85, 52.55, 31.3]]];
__motifs["O"] = [["M", [49.65, 40.75]], ["C", [45.5, 37.6, 38.1, 37.6]], ["C", [37.9, 37.7, 37.65, 37.65]], ["C", [37.4, 37.6, 37.2, 37.7]], ["C", [36.8, 37.8, 36.4, 37.75]], ["C", [36, 37.7, 35.5, 37.9]], ["C", [34.4, 38.1, 33.35, 38.3]], ["C", [32.3, 38.55, 31.4, 39]], ["C", [27.2, 40.8, 24.75, 44]], ["C", [22.3, 47.2, 20.8, 51.7]], ["C", [20.5, 52.75, 20.35, 53.85]], ["C", [20.2, 54.85, 19.9, 56]], ["C", [19.8, 56.4, 19.8, 56.75]], ["C", [19.8, 57.05, 19.7, 57.5]], ["C", [19.5, 58, 19.6, 58.6]], ["C", [19.7, 59.15, 19.6, 59.7]], ["C", [19.4, 60.2, 19.35, 61.5]], ["C", [19.3, 62.9, 19.5, 63.35]], ["L", [19.5, 64.5]], ["C", [19.6, 64.9, 19.6, 65.3]], ["C", [19.6, 65.8, 19.7, 66.2]], ["C", [19.7, 66.6, 19.75, 66.95]], ["C", [19.8, 67.3, 19.8, 67.65]], ["C", [20.1, 68.8, 20.25, 69.9]], ["C", [20.4, 71, 20.8, 72]], ["C", [21.9, 75.2, 23.5, 77.9]], ["C", [25.1, 80.7, 27.5, 82.4]], ["C", [28, 82.9, 28.55, 83.2]], ["C", [29.1, 83.5, 29.7, 83.8]], ["C", [30.8, 84.5, 32.05, 84.9]], ["C", [33.3, 85.3, 34.7, 85.7]], ["C", [35.2, 85.9, 35.65, 85.85]], ["C", [36.1, 85.8, 36.6, 85.9]], ["C", [37.2, 86.05, 37.8, 86.05]], ["C", [38.4, 86.05, 39.1, 86.05]], ["L", [39.9, 86.05]], ["C", [40.4, 86, 40.8, 86.05]], ["C", [41.2, 86.05, 41.7, 85.9]], ["C", [42.7, 85.7, 43.7, 85.55]], ["C", [44.7, 85.4, 45.6, 85]], ["C", [49.9, 83.3, 52.35, 80.6]], ["C", [54.8, 77.85, 56.5, 73.55]], ["C", [57, 72.5, 57.25, 71.2]], ["C", [57.5, 69.9, 57.9, 68.6]], ["L", [58.2, 66.2]], ["C", [58.3, 65.8, 58.3, 65.3]], ["C", [58.3, 64.9, 58.3, 64.4]], ["L", [58.3, 63.55]], ["C", [58.5, 63.1, 58.5, 62.15]], ["C", [58.5, 61.15, 58.3, 60.7]], ["L", [58.3, 58.95]], ["C", [58.2, 58.6, 58.25, 58.25]], ["C", [58.3, 57.9, 58.1, 57.5]], ["C", [57.9, 56.7, 57.85, 55.95]], ["C", [57.8, 55.15, 57.6, 54.5]], ["C", [57.6, 54, 57.4, 53.4]], ["C", [57.1, 52.3, 56.8, 51.2]], ["C", [56.5, 50.1, 56, 48.95]], ["C", [53.8, 43.9, 49.65, 40.75]], ["M", [59.2, 30.6]], ["C", [60.5, 31.5, 61.9, 32.65]], ["C", [63.3, 33.8, 64.2, 35]], ["C", [64.7, 35.5, 65.2, 36.05]], ["C", [65.7, 36.6, 66.1, 37.1]], ["C", [67.2, 38.7, 68.3, 40.3]], ["C", [69.4, 42, 70.2, 43.9]], ["C", [70.8, 45.3, 71.25, 46.55]], ["C", [71.7, 47.9, 72.2, 49.4]], ["C", [72.5, 50.4, 72.7, 51.45]], ["C", [72.9, 52.5, 73.2, 53.6]], ["C", [73.4, 54.3, 73.4, 54.9]], ["C", [73.4, 55.6, 73.6, 56.2]], ["C", [73.8, 56.8, 73.75, 57.45]], ["C", [73.7, 58.1, 73.8, 58.6]], ["L", [73.8, 59.4]], ["C", [74, 60, 74.05, 61.45]], ["C", [74.1, 62.9, 73.9, 63.5]], ["L", [73.9, 64.8]], ["C", [73.7, 65.8, 73.7, 66.9]], ["C", [73.7, 68, 73.5, 69.1]], ["C", [73.3, 69.8, 73.2, 70.5]], ["C", [73.1, 71.2, 72.9, 71.9]], ["C", [72.4, 73.65, 71.95, 75.4]], ["C", [71.5, 77.1, 70.8, 78.7]], ["C", [67.8, 85.7, 62.7, 90.3]], ["C", [57.6, 95, 50.1, 97.5]], ["C", [49, 97.9, 47.9, 98.1]], ["C", [46.8, 98.3, 45.7, 98.5]], ["C", [45.2, 98.65, 44.65, 98.65]], ["C", [44.1, 98.65, 43.6, 98.75]], ["L", [40.3, 99.1]], ["C", [39.9, 99.2, 38.9, 99.15]], ["C", [37.9, 99.1, 37.6, 99]], ["C", [37.1, 98.9, 36.65, 98.95]], ["C", [36.2, 99, 35.7, 98.9]], ["L", [34.6, 98.9]], ["C", [33.8, 98.65, 33.1, 98.6]], ["C", [32.4, 98.55, 31.6, 98.4]], ["C", [30.8, 98.2, 30, 98.05]], ["C", [29.2, 97.9, 28.4, 97.7]], ["C", [27.3, 97.3, 26.15, 96.9]], ["C", [25, 96.45, 23.9, 96]], ["C", [17.9, 93.4, 13.75, 89.05]], ["C", [9.6, 84.7, 7, 78.7]], ["C", [6.4, 77.3, 6, 75.7]], ["C", [5.6, 74.2, 5.1, 72.6]], ["C", [4.9, 72.1, 4.9, 71.7]], ["C", [4.9, 71.4, 4.8, 71]], ["C", [4.6, 70.3, 4.5, 69.5]], ["C", [4.4, 68.8, 4.2, 68]], ["C", [4.1, 67.45, 4.15, 67.05]], ["C", [4.2, 66.6, 4, 66.2]], ["C", [3.9, 65.6, 4, 64.95]], ["C", [4.1, 64.3, 4, 63.7]], ["C", [3.8, 63.15, 3.8, 62.15]], ["C", [3.8, 61.05, 4, 60.6]], ["C", [4.1, 60.1, 4, 59.65]], ["C", [3.9, 59.15, 4, 58.7]], ["L", [4, 58.1]], ["C", [4.2, 57.4, 4.15, 56.75]], ["C", [4.1, 56.1, 4.3, 55.5]], ["C", [4.5, 54.95, 4.5, 54.45]], ["C", [4.5, 53.9, 4.7, 53.4]], ["C", [5.2, 51.7, 5.5, 50.05]], ["C", [5.8, 48.4, 6.4, 46.8]], ["C", [7.2, 45.1, 7.9, 43.4]], ["C", [8.6, 41.7, 9.6, 40.2]], ["C", [12.6, 35.4, 16.5, 32.2]], ["C", [20.4, 29, 26, 26.7]], ["C", [27.3, 26.2, 28.75, 25.85]], ["C", [30.2, 25.6, 31.6, 25.2]], ["C", [32.1, 25, 32.55, 25]], ["C", [33, 25, 33.5, 24.9]], ["L", [36.5, 24.6]], ["C", [36.7, 24.5, 37.05, 24.6]], ["C", [37.4, 24.7, 37.6, 24.6]], ["C", [44.7, 24.4, 49.9, 26.05]], ["C", [55.1, 27.7, 59.2, 30.6]]];
__motifs["P"] = [["M", [44, 40.15]], ["C", [42.55, 39.2, 40.35, 38.75]], ["C", [38.15, 38.3, 35.55, 38.2]], ["C", [33, 38.15, 30.3, 38.15]], ["C", [27.65, 38.2, 25.2, 38.2]], ["C", [24.9, 38.3, 24.65, 38.35]], ["C", [24.4, 38.4, 24.1, 38.4]], ["C", [23.1, 38.8, 22.8, 39.65]], ["C", [22.4, 40.4, 22.4, 41.8]], ["C", [22.4, 43.1, 22.4, 44.25]], ["L", [22.4, 53.7]], ["C", [22.4, 54.9, 22.4, 56.35]], ["C", [22.4, 57.8, 22.9, 58.6]], ["C", [23.3, 59.2, 24.1, 59.5]], ["C", [24.9, 59.8, 25.95, 59.85]], ["C", [26.9, 59.9, 28.1, 59.85]], ["C", [29.2, 59.8, 30.2, 59.8]], ["C", [35.5, 59.8, 39.9, 59.3]], ["C", [44.35, 58.85, 46.65, 55.8]], ["C", [47.2, 54.9, 47.6, 53.85]], ["C", [48, 52.8, 48.4, 51.5]], ["C", [48.65, 50.45, 48.6, 48.75]], ["C", [48.55, 47.1, 48.2, 46.05]], ["C", [47.6, 43.85, 46.75, 42.5]], ["C", [45.8, 41.2, 44, 40.15]], ["M", [59.4, 35.1]], ["C", [61.7, 38.3, 62.75, 42.25]], ["C", [63.8, 46.15, 63.55, 51.6]], ["C", [63.35, 53.8, 62.8, 55.65]], ["C", [62.3, 57.5, 61.6, 59.1]], ["C", [61.45, 59.5, 61.3, 59.85]], ["C", [61.15, 60.2, 60.9, 60.65]], ["C", [60.5, 61.3, 60.15, 61.95]], ["C", [59.8, 62.65, 59.35, 63.2]], ["C", [57.3, 66, 54.45, 67.75]], ["C", [51.6, 69.5, 48, 70.7]], ["C", [46.9, 71.15, 45.7, 71.25]], ["C", [44.55, 71.35, 43.3, 71.6]], ["C", [42.7, 71.7, 42.1, 71.7]], ["C", [41.5, 71.7, 40.9, 71.8]], ["L", [28.4, 71.8]], ["C", [27.1, 71.8, 25.7, 71.8]], ["C", [24.2, 71.8, 23.4, 72.4]], ["C", [22.4, 73.15, 22.4, 74.85]], ["C", [22.4, 76.6, 22.4, 78.3]], ["L", [22.4, 91.5]], ["C", [22.4, 92.7, 22.45, 94.15]], ["C", [22.5, 95.5, 22, 96.35]], ["C", [21.65, 97, 20.2, 97.4]], ["C", [19.55, 97.6, 18.7, 97.5]], ["C", [17.9, 97.4, 17.15, 97.4]], ["L", [11.35, 97.4]], ["C", [10.2, 97.4, 9.3, 97.35]], ["C", [8.35, 97.3, 7.7, 96.8]], ["C", [7.15, 96.35, 7.05, 95.25]], ["C", [6.95, 94.25, 6.95, 93.1]], ["L", [6.95, 33.3]], ["C", [6.95, 31.9, 6.9, 30]], ["C", [6.85, 28.1, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.3, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [38.6, 26.2]], ["C", [39.5, 26.2, 40.45, 26.15]], ["C", [41.3, 26.1, 42.1, 26.3]], ["L", [42.65, 26.3]], ["C", [43.1, 26.5, 43.7, 26.5]], ["C", [44.35, 26.5, 44.8, 26.7]], ["C", [45.3, 26.8, 45.7, 26.8]], ["C", [46.1, 26.8, 46.65, 27]], ["C", [48.2, 27.55, 49.8, 27.95]], ["C", [51.4, 28.4, 52.85, 29.2]], ["C", [53.3, 29.65, 53.9, 29.9]], ["C", [54.5, 30.2, 55.15, 30.7]], ["C", [55.6, 31, 55.95, 31.35]], ["C", [56.3, 31.75, 56.85, 32.1]], ["L", [57.4, 32.7]], ["C", [58.6, 33.95, 59.4, 35.1]]];
__motifs["Q"] = [["M", [44.8, 38.35]], ["C", [41.9, 37.5, 38.1, 37.5]], ["C", [37.5, 37.6, 36.95, 37.6]], ["C", [36.4, 37.6, 35.9, 37.7]], ["C", [34.8, 38, 33.7, 38.15]], ["C", [32.6, 38.35, 31.6, 38.8]], ["C", [27.4, 40.55, 24.85, 43.85]], ["C", [22.3, 47.1, 20.8, 51.6]], ["C", [20.5, 52.7, 20.35, 53.75]], ["C", [20.2, 54.8, 19.9, 55.9]], ["C", [19.8, 56.3, 19.8, 56.65]], ["C", [19.8, 56.95, 19.7, 57.4]], ["C", [19.5, 57.9, 19.6, 58.5]], ["C", [19.7, 59.05, 19.5, 59.6]], ["L", [19.5, 60.7]], ["C", [19.4, 61.15, 19.4, 62]], ["C", [19.4, 62.8, 19.5, 63.25]], ["L", [19.5, 64.4]], ["C", [19.7, 65.1, 19.65, 65.85]], ["C", [19.6, 66.6, 19.8, 67.3]], ["C", [19.9, 67.55, 19.9, 67.9]], ["C", [19.9, 68.2, 20, 68.5]], ["C", [20.2, 69.4, 20.4, 70.3]], ["C", [20.6, 71.2, 20.8, 72.1]], ["C", [22.2, 76.3, 24.55, 79.45]], ["C", [26.9, 82.6, 30.7, 84.25]], ["L", [32.2, 84.9]], ["C", [32.9, 85.2, 33.55, 85.35]], ["C", [34.2, 85.5, 35, 85.7]], ["C", [35.5, 85.8, 36.1, 85.85]], ["C", [36.7, 85.9, 37.2, 85.9]], ["L", [37.9, 85.9]], ["C", [38.4, 86.05, 39.05, 86.05]], ["C", [39.7, 86, 40.2, 86]], ["L", [41.1, 86]], ["C", [41.6, 85.9, 42, 85.9]], ["C", [42.4, 85.9, 42.8, 85.7]], ["C", [44.5, 84.8, 43.3, 83.3]], ["C", [42.7, 82.4, 41.85, 81.75]], ["C", [41, 81.1, 40.3, 80.2]], ["C", [40.1, 79.85, 39.8, 79.5]], ["C", [39.5, 79.1, 39.7, 78.4]], ["C", [39.9, 77.4, 40.6, 76.85]], ["C", [41.3, 76.3, 41.8, 75.5]], ["C", [42, 75.2, 42.25, 74.95]], ["C", [42.5, 74.7, 42.7, 74.4]], ["C", [42.9, 74.3, 43.2, 74]], ["C", [43.4, 73.65, 43.7, 73.35]], ["C", [44, 73, 44.4, 72.8]], ["C", [44.9, 72.3, 45.65, 72.15]], ["C", [46.4, 72, 47.2, 72.5]], ["C", [48.3, 73.2, 49.1, 74.1]], ["C", [49.9, 75, 51, 75.75]], ["L", [51.6, 76.4]], ["C", [52, 76.7, 52.65, 77.1]], ["C", [53.3, 77.5, 54.1, 77.3]], ["C", [54.6, 77.1, 55.2, 76.3]], ["C", [55.4, 75.95, 55.65, 75.65]], ["C", [55.9, 75.3, 56.1, 74.9]], ["C", [56.6, 73.65, 56.95, 72.4]], ["C", [57.3, 71.1, 57.7, 69.65]], ["C", [57.8, 69.1, 57.9, 68.5]], ["C", [58, 67.9, 58.1, 67.3]], ["C", [58.2, 66.6, 58.25, 65.95]], ["C", [58.3, 65.25, 58.3, 64.6]], ["L", [58.3, 63.7]], ["C", [58.5, 63.15, 58.5, 62.15]], ["C", [58.5, 61.05, 58.3, 60.6]], ["L", [58.3, 58.9]], ["C", [58.2, 58.5, 58.25, 58.15]], ["C", [58.3, 57.8, 58.1, 57.4]], ["C", [57.9, 56.7, 57.9, 56]], ["C", [57.9, 55.3, 57.7, 54.6]], ["C", [57.3, 53.2, 57.05, 52]], ["C", [56.8, 50.75, 56.3, 49.7]], ["C", [55.2, 47, 53.65, 44.7]], ["C", [52.1, 42.45, 49.9, 40.9]], ["C", [47.7, 39.3, 44.8, 38.35]], ["M", [57.7, 29.5]], ["C", [59.3, 30.4, 61.1, 31.9]], ["C", [61.5, 32.1, 61.8, 32.5]], ["C", [62.1, 32.9, 62.5, 33.1]], ["C", [63.2, 33.7, 63.85, 34.35]], ["C", [64.5, 35, 65, 35.8]], ["C", [65.2, 36.05, 65.55, 36.4]], ["C", [65.9, 36.7, 66.1, 37]], ["C", [67.2, 38.6, 68.3, 40.25]], ["C", [69.4, 42, 70.2, 43.8]], ["C", [70.8, 45.2, 71.25, 46.45]], ["C", [71.7, 47.8, 72.2, 49.3]], ["C", [72.5, 50.3, 72.7, 51.35]], ["C", [72.9, 52.4, 73.2, 53.5]], ["C", [73.4, 54.2, 73.4, 54.8]], ["C", [73.4, 55.5, 73.6, 56.1]], ["C", [73.8, 56.7, 73.75, 57.35]], ["C", [73.7, 58, 73.8, 58.5]], ["L", [73.8, 59.3]], ["C", [74, 59.9, 74.05, 61.35]], ["C", [74.1, 62.8, 73.9, 63.4]], ["C", [73.9, 63.9, 73.9, 64.45]], ["C", [73.9, 65, 73.8, 65.5]], ["C", [73.6, 66.6, 73.6, 67.65]], ["C", [73.6, 68.7, 73.3, 69.8]], ["C", [73.1, 70.6, 72.95, 71.45]], ["C", [72.8, 72.4, 72.6, 73.2]], ["C", [71.9, 75.2, 71.3, 77]], ["C", [70.7, 78.8, 69.8, 80.5]], ["C", [69.6, 80.8, 69.5, 81.15]], ["C", [69.4, 81.5, 69.2, 81.8]], ["C", [68.7, 82.6, 68.25, 83.4]], ["C", [67.8, 84.2, 67.3, 85]], ["C", [66.8, 85.6, 66.35, 86.1]], ["C", [65.9, 86.7, 65.7, 87.5]], ["C", [65.4, 88.4, 65.8, 88.95]], ["C", [66.2, 89.5, 66.5, 90]], ["C", [67.3, 91, 68.5, 91.8]], ["C", [68.6, 92, 68.9, 92.3]], ["C", [70.1, 93.2, 71.2, 94.3]], ["C", [71.6, 94.8, 72.2, 95.5]], ["C", [72.8, 96.2, 72.4, 97.3]], ["C", [71.9, 98.3, 71.05, 99.1]], ["C", [70.2, 99.9, 69.4, 100.65]], ["C", [68.9, 101.2, 68.3, 101.85]], ["C", [67.7, 102.5, 66.9, 102.75]], ["C", [65.8, 103.3, 64.95, 102.6]], ["C", [64.1, 101.9, 63.6, 101.5]], ["C", [62.5, 100.6, 61.45, 99.55]], ["C", [60.4, 98.5, 59.2, 97.6]], ["C", [58.5, 97.1, 57.9, 96.45]], ["C", [57.3, 95.8, 56.2, 95.6]], ["C", [55.4, 95.4, 54.8, 95.65]], ["C", [54.2, 95.9, 53.8, 96.1]], ["C", [52.7, 96.55, 51.6, 96.95]], ["C", [50.5, 97.3, 49.4, 97.7]], ["C", [48.1, 98.1, 46.65, 98.25]], ["C", [45.2, 98.4, 43.8, 98.65]], ["C", [43.2, 98.8, 42.6, 98.8]], ["C", [42, 98.8, 41.3, 98.9]], ["C", [40.8, 99, 39.55, 99.05]], ["C", [38.3, 99.1, 37.8, 98.9]], ["L", [36.6, 98.9]], ["C", [35.7, 98.65, 34.7, 98.65]], ["C", [33.7, 98.65, 32.8, 98.5]], ["C", [32.1, 98.3, 31.4, 98.25]], ["C", [30.7, 98.2, 30, 98]], ["C", [28.3, 97.5, 26.7, 97.05]], ["C", [25.1, 96.55, 23.6, 95.9]], ["C", [18.3, 93.6, 14.1, 89.3]], ["C", [9.9, 85, 7.6, 79.8]], ["C", [7, 78.4, 6.5, 77]], ["C", [6, 75.6, 5.5, 74.1]], ["C", [5.2, 73, 4.95, 71.85]], ["C", [4.7, 70.7, 4.5, 69.6]], ["C", [4.3, 69, 4.3, 68.35]], ["C", [4.3, 67.7, 4.1, 67.1]], ["C", [4, 66.5, 4.05, 65.9]], ["C", [4.1, 65.25, 4, 64.7]], ["L", [4, 63.6]], ["C", [3.8, 63.1, 3.8, 62.05]], ["C", [3.8, 61, 4, 60.5]], ["C", [4, 60.2, 3.95, 59.9]], ["C", [3.9, 59.6, 4, 59.4]], ["C", [4, 58.9, 4.05, 58.4]], ["C", [4.1, 57.9, 4.1, 57.4]], ["C", [4.2, 56.6, 4.3, 55.75]], ["C", [4.4, 54.85, 4.5, 54.1]], ["C", [4.9, 52.7, 5.1, 51.3]], ["C", [5.3, 49.9, 5.8, 48.55]], ["C", [8.6, 40.35, 13.4, 35.1]], ["C", [18.2, 29.8, 26, 26.6]], ["C", [27.3, 26.1, 28.75, 25.75]], ["C", [30.2, 25.5, 31.6, 25.1]], ["C", [32.1, 24.9, 32.55, 24.9]], ["C", [33, 24.9, 33.5, 24.8]], ["L", [36.5, 24.5]], ["C", [36.7, 24.4, 37.05, 24.5]], ["C", [37.4, 24.6, 37.6, 24.5]], ["C", [44, 24.3, 48.95, 25.65]], ["C", [53.9, 27, 57.7, 29.5]]];
__motifs["R"] = [["M", [41.5, 38.3]], ["C", [39.3, 38.2, 36.9, 38.2]], ["L", [25.3, 38.2]], ["C", [25.1, 38.4, 24.9, 38.35]], ["C", [24.7, 38.3, 24.5, 38.3]], ["C", [23.3, 38.6, 22.9, 39.3]], ["C", [22.4, 40.15, 22.45, 41.35]], ["C", [22.5, 42.6, 22.5, 43.8]], ["L", [22.5, 53.1]], ["C", [22.5, 54.3, 22.5, 55.5]], ["C", [22.5, 56.7, 23, 57.4]], ["C", [23.4, 58, 24.3, 58.2]], ["C", [25.2, 58.4, 26.3, 58.5]], ["C", [27.4, 58.6, 28.6, 58.55]], ["C", [29.85, 58.5, 30.7, 58.5]], ["L", [36.6, 58.5]], ["C", [37.3, 58.5, 38.1, 58.55]], ["C", [38.9, 58.6, 39.5, 58.4]], ["L", [40.8, 58.4]], ["C", [41.6, 58.2, 42.4, 58.2]], ["C", [43.1, 58.2, 43.8, 58]], ["C", [45.5, 57.5, 46.85, 56.7]], ["C", [48.1, 55.9, 49, 54.6]], ["C", [49.6, 53.7, 49.9, 52.6]], ["C", [50.2, 51.5, 50.5, 50.1]], ["C", [50.75, 49, 50.55, 47.4]], ["C", [50.4, 45.8, 50.2, 45]], ["C", [50, 44.6, 50, 44.35]], ["C", [50, 44.05, 49.8, 43.7]], ["C", [48.65, 40.6, 45.4, 39.2]], ["C", [43.7, 38.4, 41.5, 38.3]], ["M", [59.05, 30.6]], ["C", [61.15, 32.2, 62.5, 34.3]], ["C", [62.9, 34.8, 63.2, 35.35]], ["C", [63.45, 35.9, 63.8, 36.4]], ["C", [64.6, 37.8, 65, 39.3]], ["C", [65.45, 40.8, 65.9, 42.6]], ["C", [66, 43, 65.95, 43.4]], ["C", [65.9, 43.8, 66.1, 44.2]], ["L", [66.1, 45.1]], ["C", [66.3, 45.9, 66.2, 47.05]], ["C", [66.1, 48.2, 65.9, 48.85]], ["C", [65.7, 49.7, 65.7, 50.35]], ["C", [65.7, 50.95, 65.55, 51.7]], ["C", [65, 53.15, 64.5, 54.55]], ["C", [64, 55.9, 63.25, 57.05]], ["C", [63, 57.35, 62.7, 57.75]], ["C", [62.4, 58.1, 62.2, 58.4]], ["C", [61.9, 58.8, 61.55, 59.15]], ["C", [61.25, 59.55, 60.8, 59.9]], ["C", [60.2, 60.4, 59.6, 60.9]], ["C", [59.05, 61.35, 58.3, 61.85]], ["C", [57.9, 62.2, 57.5, 62.55]], ["C", [57.15, 62.9, 56.95, 63.35]], ["C", [56.7, 63.95, 57.15, 64.4]], ["C", [57.5, 64.8, 57.8, 65]], ["C", [58.8, 65.75, 59.8, 66.6]], ["C", [60.8, 67.35, 61.5, 68.5]], ["C", [62.7, 70.15, 63.45, 71.95]], ["C", [64.1, 73.75, 64.7, 76.05]], ["C", [64.9, 77, 64.95, 77.95]], ["C", [65, 79, 65.25, 79.85]], ["C", [65.25, 80.45, 65.3, 81.05]], ["C", [65.35, 81.6, 65.35, 82.15]], ["C", [65.45, 82.55, 65.4, 83.05]], ["C", [65.35, 83.5, 65.45, 83.95]], ["C", [65.55, 84.35, 65.5, 84.75]], ["C", [65.45, 85.2, 65.55, 85.7]], ["C", [65.7, 86.65, 65.7, 87.8]], ["C", [65.7, 88.85, 65.9, 89.9]], ["L", [66.2, 91.7]], ["C", [66.4, 92.55, 66.6, 93.5]], ["C", [66.8, 94.4, 67, 95.15]], ["C", [67.2, 95.8, 66.95, 96.3]], ["C", [66.7, 96.75, 66.4, 96.95]], ["C", [65.8, 97.45, 64.75, 97.4]], ["C", [63.7, 97.35, 62.6, 97.35]], ["L", [57.15, 97.35]], ["C", [55.5, 97.35, 54.3, 97.2]], ["C", [53.15, 97.05, 52.5, 96.1]], ["C", [51.7, 94.75, 51.6, 92.85]], ["C", [51.5, 90.95, 51.1, 89.3]], ["C", [51.1, 88.85, 51.05, 88.5]], ["C", [51.05, 88.15, 51.05, 87.9]], ["C", [50.75, 86.65, 50.75, 85.35]], ["C", [50.75, 83.95, 50.5, 82.85]], ["C", [50.4, 82.55, 50.4, 81.95]], ["C", [50.2, 80.85, 50.05, 79.75]], ["C", [49.9, 78.55, 49.6, 77.5]], ["C", [48.85, 75.2, 47.7, 73.4]], ["C", [46.65, 71.55, 44.65, 70.7]], ["C", [44.1, 70.45, 43.6, 70.35]], ["C", [43.1, 70.25, 42.55, 70.05]], ["C", [40.7, 69.45, 38.4, 69.45]], ["C", [36, 69.45, 33.7, 69.45]], ["L", [25.5, 69.45]], ["C", [24.7, 69.65, 24.1, 69.75]], ["C", [23.5, 69.85, 23.1, 70.35]], ["C", [22.3, 71.4, 22.4, 73.5]], ["C", [22.5, 75.6, 22.5, 77.3]], ["L", [22.5, 90.1]], ["C", [22.5, 90.85, 22.45, 91.75]], ["C", [22.4, 92.55, 22.4, 93.35]], ["C", [22.4, 94.2, 22.4, 94.8]], ["C", [22.4, 95.45, 22.2, 96]], ["C", [21.9, 96.85, 21, 97.15]], ["C", [20.5, 97.35, 19.8, 97.35]], ["C", [19.15, 97.35, 18.3, 97.35]], ["L", [13.8, 97.35]], ["C", [12.2, 97.35, 10.45, 97.4]], ["C", [8.65, 97.45, 7.7, 96.75]], ["C", [6.95, 96.3, 6.95, 94.9]], ["C", [6.95, 93.6, 6.95, 92.3]], ["L", [6.95, 31.5]], ["C", [6.95, 30.4, 6.9, 29.2]], ["C", [6.85, 28, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.3, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [43.7, 26.2]], ["C", [45.3, 26.2, 46.8, 26.25]], ["C", [48.2, 26.3, 49.5, 26.6]], ["C", [50, 26.8, 50.55, 26.8]], ["C", [51.1, 26.8, 51.6, 27]], ["C", [52.3, 27.2, 53.05, 27.45]], ["C", [53.7, 27.65, 54.4, 27.9]], ["C", [56.95, 29, 59.05, 30.6]]];
__motifs["S"] = [["M", [41.5, 39.75]], ["C", [40.1, 38.7, 38.8, 38.05]], ["C", [37.6, 37.55, 35.85, 37.2]], ["C", [34.1, 36.8, 32.25, 36.7]], ["C", [30.4, 36.6, 28.6, 36.8]], ["C", [26.8, 37, 25.4, 37.65]], ["C", [23.1, 38.6, 21.85, 40]], ["C", [20.6, 41.35, 20.1, 44.05]], ["C", [19.9, 44.7, 20, 45.6]], ["C", [20.1, 46.45, 20.3, 46.9]], ["C", [21.1, 49, 22.55, 49.9]], ["C", [24, 50.7, 26, 51.5]], ["C", [27.1, 52.05, 28.25, 52.3]], ["C", [29.4, 52.55, 30.6, 52.9]], ["C", [33.3, 53.85, 36.15, 54.5]], ["C", [39, 55.1, 41.8, 55.95]], ["C", [42.3, 56.15, 42.8, 56.15]], ["C", [43.3, 56.15, 43.8, 56.35]], ["C", [45.8, 57, 47.95, 57.6]], ["C", [50.1, 58.25, 51.8, 59.3]], ["C", [54.5, 61.05, 56.45, 62.75]], ["C", [58.4, 64.45, 60.1, 67.15]], ["C", [60.6, 67.9, 60.95, 68.95]], ["C", [61.3, 69.9, 61.7, 70.95]], ["C", [61.8, 71.25, 61.8, 71.45]], ["C", [61.8, 71.7, 61.9, 71.9]], ["C", [62.3, 73.55, 62.3, 75.9]], ["C", [62.5, 76.4, 62.3, 76.95]], ["L", [62.3, 78.7]], ["C", [62.1, 79.8, 61.95, 80.8]], ["C", [61.8, 81.85, 61.5, 82.8]], ["C", [60.9, 84.6, 60.2, 86.1]], ["C", [59.5, 87.65, 58.5, 89]], ["C", [58.1, 89.55, 57.7, 89.9]], ["C", [57.3, 90.2, 57, 90.7]], ["C", [56.5, 91.35, 55.9, 91.9]], ["C", [55.3, 92.4, 54.6, 92.9]], ["C", [54.1, 93.3, 53.55, 93.75]], ["C", [53, 94.15, 52.4, 94.5]], ["C", [50.7, 95.65, 48.85, 96.35]], ["C", [47, 97, 45, 97.75]], ["C", [43.6, 98.25, 42.1, 98.4]], ["C", [40.6, 98.55, 39.1, 98.8]], ["C", [38.4, 99, 37.75, 98.95]], ["C", [37.1, 98.9, 36.5, 99.1]], ["L", [35.7, 99.1]], ["C", [35.5, 99.1, 35.15, 99.05]], ["C", [34.8, 99, 34.6, 99.1]], ["C", [34.1, 99.2, 32.9, 99.2]], ["C", [31.7, 99.2, 31.2, 99.1]], ["L", [30.2, 99.1]], ["C", [29.5, 98.9, 28.75, 98.95]], ["C", [28, 99, 27.4, 98.8]], ["C", [26.9, 98.8, 26.5, 98.75]], ["C", [26.1, 98.7, 25.6, 98.6]], ["C", [24.4, 98.35, 23.1, 98.15]], ["C", [21.8, 97.95, 20.7, 97.5]], ["C", [15.8, 95.95, 12.1, 93.5]], ["C", [8.4, 91, 5.9, 87]], ["C", [4.3, 84.6, 3.4, 81.35]], ["C", [3.2, 80.7, 3.15, 80.1]], ["C", [3.1, 79.55, 2.9, 78.85]], ["C", [2.7, 78, 2.6, 76.9]], ["C", [2.5, 75.7, 3, 75.15]], ["C", [3.5, 74.3, 4.45, 74.15]], ["C", [5.4, 74, 6.6, 74]], ["L", [12.9, 74]], ["C", [13.7, 74, 14.6, 74]], ["C", [15.5, 74, 16.2, 74.3]], ["C", [17.3, 74.85, 17.5, 75.95]], ["C", [17.7, 77.15, 18.2, 78.3]], ["C", [18.6, 79.55, 19.2, 80.5]], ["C", [19.8, 81.55, 20.5, 82.4]], ["C", [21, 83.05, 21.6, 83.55]], ["C", [22.2, 84, 22.8, 84.4]], ["C", [25, 85.85, 28.2, 86.7]], ["C", [28.9, 86.9, 29.55, 86.9]], ["C", [30.2, 86.9, 31, 87.1]], ["L", [31.5, 87.1]], ["C", [32.3, 87.35, 33.7, 87.35]], ["C", [35.1, 87.35, 35.9, 87.1]], ["C", [36.2, 87, 36.9, 87]], ["C", [37.4, 86.9, 37.95, 86.85]], ["C", [38.5, 86.8, 39, 86.6]], ["C", [42.4, 85.75, 44.4, 84.2]], ["C", [46.4, 82.7, 47.2, 79.25]], ["C", [47.4, 78.5, 47.25, 77.65]], ["C", [47.1, 76.7, 46.9, 76.2]], ["C", [45.9, 73.55, 43.5, 72]], ["C", [43.2, 71.8, 42.4, 71.45]], ["C", [40.9, 70.55, 39.05, 69.95]], ["C", [37.2, 69.4, 35.4, 68.85]], ["C", [34.7, 68.65, 34.05, 68.5]], ["C", [33.4, 68.3, 32.6, 68.1]], ["C", [31, 67.6, 29.35, 67.3]], ["C", [27.7, 66.95, 26.2, 66.45]], ["C", [25.7, 66.2, 25.4, 66.2]], ["C", [25.1, 66.2, 24.7, 66]], ["C", [23.9, 65.8, 23.25, 65.6]], ["C", [22.6, 65.4, 21.8, 65.2]], ["C", [19.5, 64.45, 17.4, 63.55]], ["C", [15.3, 62.75, 13.5, 61.6]], ["C", [11.2, 60.15, 9.3, 58.15]], ["C", [7.4, 56.15, 6.3, 53.5]], ["C", [5.9, 52.65, 5.7, 51.65]], ["C", [5.5, 50.7, 5.2, 49.6]], ["C", [5, 48.7, 4.9, 47]], ["C", [4.8, 45.3, 5, 44.25]], ["C", [5.1, 43.85, 5.1, 43]], ["C", [5.4, 41.95, 5.6, 40.9]], ["C", [5.8, 39.95, 6.2, 38.9]], ["C", [7.7, 35.45, 10.05, 32.95]], ["C", [12.4, 30.5, 15.5, 28.5]], ["C", [17.5, 27.35, 19.8, 26.6]], ["C", [22.1, 25.9, 24.7, 25.35]], ["C", [25.7, 25.15, 26.65, 25.1]], ["C", [27.6, 25.05, 28.6, 24.85]], ["C", [28.9, 24.75, 29.55, 24.85]], ["C", [30.2, 24.95, 30.4, 24.75]], ["C", [49.8, 24.4, 57.1, 36.2]], ["C", [58.1, 37.85, 58.65, 39.55]], ["C", [59.2, 41.2, 59.7, 43.2]], ["C", [59.9, 44.05, 59.85, 45.05]], ["C", [59.8, 46.15, 59.4, 46.6]], ["C", [58.9, 47.2, 58, 47.35]], ["C", [57.1, 47.5, 56, 47.5]], ["L", [49.7, 47.5]], ["C", [48.8, 47.5, 47.9, 47.5]], ["C", [47, 47.5, 46.4, 47.3]], ["C", [45.2, 46.8, 44.9, 45.75]], ["C", [44.6, 44.6, 44.1, 43.55]], ["C", [43.7, 42.5, 43, 41.45]], ["C", [42.3, 40.3, 41.5, 39.75]]];
__motifs["T"] = [["M", [58.9, 26.8]], ["C", [59.2, 27, 59.35, 27.5]], ["C", [59.45, 27.9, 59.55, 28.4]], ["L", [59.55, 28.9]], ["C", [59.65, 29.3, 59.65, 29.8]], ["C", [59.65, 30.3, 59.65, 30.8]], ["L", [59.65, 34.7]], ["C", [59.65, 35.4, 59.7, 36.05]], ["C", [59.75, 36.7, 59.55, 37.3]], ["C", [59.1, 39, 57.55, 39.1]], ["C", [56.1, 39.2, 54, 39.2]], ["L", [43.8, 39.2]], ["C", [41.8, 39.2, 40.35, 39.35]], ["C", [38.85, 39.5, 38.4, 41.2]], ["C", [38.3, 41.7, 38.4, 42.1]], ["C", [38.5, 42.5, 38.3, 43]], ["C", [38.2, 43.6, 38.25, 44.35]], ["C", [38.3, 45.1, 38.3, 45.7]], ["L", [38.3, 92.8]], ["C", [38.3, 94.4, 38.15, 95.55]], ["C", [38, 96.7, 36.85, 97.2]], ["C", [36.2, 97.4, 35.3, 97.4]], ["C", [34.4, 97.4, 33.6, 97.4]], ["L", [26.8, 97.4]], ["C", [25.7, 97.4, 24.75, 97.3]], ["C", [23.8, 97.2, 23.3, 96.6]], ["C", [22.8, 95.8, 22.8, 94.55]], ["C", [22.8, 93.3, 22.8, 92]], ["L", [22.8, 45.7]], ["C", [22.8, 45, 22.85, 44.25]], ["C", [22.9, 43.5, 22.7, 42.9]], ["C", [22.6, 42.4, 22.7, 42]], ["C", [22.8, 41.6, 22.6, 41.2]], ["C", [22.1, 39.5, 20.55, 39.35]], ["C", [19, 39.2, 16.9, 39.2]], ["L", [7.6, 39.2]], ["C", [6.5, 39.2, 5.2, 39.25]], ["C", [3.8, 39.3, 3.05, 39.1]], ["C", [2.2, 38.8, 1.8, 38.2]], ["C", [1.5, 37.7, 1.45, 36.9]], ["C", [1.4, 36.1, 1.4, 35.3]], ["L", [1.4, 30.4]], ["C", [1.4, 29.1, 1.55, 28.1]], ["C", [1.7, 27.1, 2.5, 26.6]], ["C", [2.8, 26.4, 3.6, 26.2]], ["L", [54.3, 26.2]], ["C", [55.55, 26.2, 56.85, 26.25]], ["C", [58.1, 26.3, 58.9, 26.8]]];
__motifs["U"] = [["M", [51.75, 29.5]], ["C", [51.7, 27.75, 52.3, 27]], ["C", [52.8, 26.35, 53.7, 26.2]], ["C", [54.6, 26.05, 55.7, 26.05]], ["L", [62.1, 26.05]], ["C", [62.9, 26.05, 63.6, 26]], ["C", [64.4, 25.95, 65.1, 26.15]], ["C", [66.5, 26.45, 66.9, 27.2]], ["C", [67.4, 27.95, 67.35, 29.45]], ["C", [67.3, 30.9, 67.3, 32.05]], ["L", [67.3, 65.65]], ["C", [67.3, 69.45, 67.2, 73.1]], ["C", [67.1, 76.7, 66.3, 79.6]], ["C", [64.9, 84.25, 62.75, 87.75]], ["C", [60.6, 91.15, 57.1, 93.6]], ["C", [54, 95.8, 49.8, 97.15]], ["C", [48.9, 97.5, 47.95, 97.7]], ["C", [46.95, 97.9, 46.1, 98.1]], ["C", [45.5, 98.3, 44.9, 98.3]], ["C", [44.4, 98.3, 43.8, 98.5]], ["C", [42.6, 98.7, 41.05, 98.8]], ["C", [39.6, 98.9, 38.2, 98.9]], ["C", [28.7, 99, 21.95, 96.5]], ["C", [15.3, 94.1, 11.45, 88.55]], ["C", [10.2, 86.75, 9.35, 84.8]], ["C", [8.5, 82.9, 7.8, 80.55]], ["C", [7.55, 80.05, 7.55, 79.75]], ["C", [7.55, 79.4, 7.35, 78.9]], ["C", [6.6, 76.05, 6.6, 72.6]], ["C", [6.6, 69.1, 6.6, 65.55]], ["L", [6.6, 30.65]], ["C", [6.6, 29.7, 6.6, 28.75]], ["C", [6.6, 27.75, 6.9, 27.2]], ["C", [7.45, 26.45, 8.5, 26.15]], ["C", [8.7, 26.15, 8.9, 26.15]], ["C", [9.1, 26.15, 9.3, 26.05]], ["L", [17.75, 26.05]], ["C", [18.9, 26.05, 19.9, 26.15]], ["C", [21, 26.25, 21.5, 26.9]], ["C", [21.95, 27.7, 22, 28.95]], ["C", [22.05, 30.15, 22.05, 31.5]], ["L", [22.05, 65.65]], ["C", [22.05, 66.05, 22, 66.55]], ["C", [21.95, 67, 22.05, 67.35]], ["L", [22.05, 69]], ["C", [22.05, 69.85, 22, 70.9]], ["C", [21.95, 71.85, 22.15, 72.7]], ["C", [22.15, 73.4, 22.25, 73.75]], ["C", [22.45, 74.9, 22.6, 75.95]], ["C", [22.75, 77.1, 23.15, 78.15]], ["C", [24.25, 80.8, 26.05, 82.45]], ["C", [27.8, 84.15, 30.65, 85.2]], ["C", [31.5, 85.4, 32.3, 85.5]], ["C", [33.05, 85.6, 33.9, 85.8]], ["C", [34.4, 86, 34.75, 85.95]], ["C", [35.2, 85.9, 35.7, 86]], ["C", [36.1, 86.05, 36.95, 86.05]], ["C", [37.9, 86, 38.2, 85.9]], ["L", [39.7, 85.9]], ["C", [40.5, 85.7, 41.3, 85.6]], ["C", [42.1, 85.5, 42.75, 85.3]], ["C", [44.2, 85, 45, 84.55]], ["C", [46.8, 83.8, 48.15, 82.4]], ["C", [49.5, 81.1, 50.3, 79.4]], ["C", [51.4, 76.8, 51.6, 73.25]], ["C", [51.8, 69.65, 51.8, 65.85]], ["L", [51.8, 32.55]], ["C", [51.8, 31.2, 51.75, 29.5]]];
__motifs["V"] = [["M", [60.6, 26.2]], ["C", [61.6, 26.2, 62.2, 26.6]], ["C", [63.2, 27.1, 62.9, 28.45]], ["C", [62.6, 29.8, 62.3, 30.7]], ["C", [61.4, 33, 60.65, 35.45]], ["C", [59.9, 37.9, 59.1, 40.3]], ["C", [58.8, 40.9, 58.65, 41.5]], ["C", [58.5, 42.1, 58.3, 42.7]], ["C", [57.5, 44.8, 56.85, 47]], ["C", [56.2, 49.2, 55.4, 51.4]], ["C", [52.7, 59.5, 50, 67.65]], ["C", [47.3, 75.8, 44.6, 83.9]], ["C", [43.7, 86.2, 43, 88.55]], ["C", [42.3, 90.9, 41.5, 93.2]], ["C", [41, 94.6, 40.5, 95.75]], ["C", [40, 96.9, 38.5, 97.3]], ["C", [37.7, 97.5, 36.7, 97.45]], ["C", [35.7, 97.4, 34.8, 97.4]], ["L", [27.6, 97.4]], ["C", [26.5, 97.4, 25.25, 97.45]], ["C", [24, 97.5, 23.2, 97]], ["C", [22.1, 96.4, 21.75, 95.15]], ["C", [21.4, 93.9, 21, 92.7]], ["C", [20.3, 90.6, 19.65, 88.45]], ["C", [19, 86.3, 18.3, 84.2]], ["C", [16.1, 77.9, 14.1, 71.5]], ["C", [12.1, 65.1, 9.9, 58.7]], ["C", [9, 55.8, 8.15, 52.95]], ["C", [7.3, 50.1, 6.3, 47.3]], ["C", [5.9, 46.4, 5.7, 45.5]], ["C", [5.5, 44.6, 5.1, 43.7]], ["C", [4.2, 40.9, 3.35, 38.15]], ["C", [2.5, 35.4, 1.5, 32.6]], ["C", [1.3, 31.7, 1, 30.85]], ["C", [0.7, 30, 0.4, 29.1]], ["C", [0.3, 28.6, 0.25, 28.1]], ["C", [0.2, 27.6, 0.4, 27.2]], ["C", [0.7, 26.5, 1.7, 26.3]], ["C", [1.9, 26.2, 2.15, 26.25]], ["C", [2.4, 26.3, 2.6, 26.2]], ["L", [10.7, 26.2]], ["C", [11.8, 26.2, 12.95, 26.2]], ["C", [14.1, 26.2, 14.8, 26.7]], ["C", [15.7, 27.2, 16, 28.3]], ["C", [16.3, 29.4, 16.7, 30.5]], ["C", [17.4, 32.4, 17.95, 34.3]], ["C", [18.5, 36.2, 19.2, 38.2]], ["C", [21.2, 44.4, 23.15, 50.6]], ["C", [25.1, 56.8, 27.1, 63]], ["C", [27.6, 64.7, 28.15, 66.4]], ["C", [28.7, 68.1, 29.2, 69.8]], ["C", [29.5, 70.7, 29.8, 71.6]], ["C", [30.1, 72.5, 30.6, 73.2]], ["C", [30.7, 73.4, 30.85, 73.45]], ["C", [31, 73.5, 31.2, 73.7]], ["C", [32.3, 73.7, 32.65, 72.75]], ["C", [33, 71.8, 33.3, 71]], ["C", [34.1, 68.9, 34.7, 66.7]], ["C", [35.3, 64.5, 36.1, 62.2]], ["C", [38.3, 55.6, 40.35, 49.05]], ["C", [42.4, 42.5, 44.6, 35.9]], ["C", [45.1, 34.3, 45.6, 32.75]], ["C", [46.1, 31.2, 46.6, 29.6]], ["C", [47, 28.8, 47.25, 28]], ["C", [47.5, 27.2, 48.3, 26.7]], ["C", [49, 26.2, 49.95, 26.2]], ["C", [50.9, 26.2, 51.9, 26.2]], ["L", [58.6, 26.2]], ["C", [59.6, 26.2, 60.6, 26.2]]];
__motifs["W"] = [["M", [91.35, 35.3]], ["C", [90.8, 37.85, 90, 40.2]], ["C", [89.8, 40.8, 89.7, 41.35]], ["C", [89.6, 41.95, 89.4, 42.5]], ["C", [88.9, 44.25, 88.45, 46.1]], ["C", [88, 47.95, 87.5, 49.6]], ["C", [87.3, 50.15, 87.25, 50.65]], ["C", [87.2, 51.1, 87, 51.6]], ["C", [86.5, 52.9, 86.25, 54.25]], ["C", [86, 55.5, 85.5, 56.85]], ["C", [85.3, 57.3, 85.3, 57.7]], ["C", [85.3, 58.1, 85.1, 58.65]], ["C", [84.6, 60, 84.35, 61.45]], ["C", [84.1, 62.95, 83.6, 64.3]], ["C", [83.3, 65.3, 83.05, 66.25]], ["C", [82.8, 67.25, 82.5, 68.2]], ["C", [81.3, 72, 80.45, 75.9]], ["C", [79.6, 79.8, 78.3, 83.55]], ["C", [78.1, 84.2, 78, 84.8]], ["C", [77.9, 85.45, 77.7, 86.1]], ["C", [77.2, 87.85, 76.75, 89.7]], ["C", [76.3, 91.55, 75.7, 93.2]], ["C", [75.3, 94.5, 75, 95.6]], ["C", [74.7, 96.7, 73.5, 97.2]], ["C", [72.8, 97.4, 71.8, 97.4]], ["C", [70.8, 97.4, 69.9, 97.4]], ["L", [63.4, 97.4]], ["C", [62.3, 97.4, 61.3, 97.35]], ["C", [60.3, 97.3, 59.6, 96.8]], ["C", [59, 96.35, 58.8, 95.55]], ["C", [58.6, 94.8, 58.3, 94.05]], ["C", [57.7, 92.05, 57.3, 90.1]], ["C", [56.9, 88.15, 56.4, 86.1]], ["C", [56, 84.9, 55.75, 83.7]], ["C", [55.5, 82.4, 55.1, 81.1]], ["C", [54.8, 80.2, 54.65, 79.3]], ["C", [54.5, 78.3, 54.2, 77.45]], ["C", [53.4, 75.05, 52.9, 72.45]], ["C", [52.4, 69.9, 51.7, 67.4]], ["C", [51.2, 66, 50.95, 64.75]], ["C", [50.7, 63.4, 50.3, 62]], ["C", [49.8, 60.3, 49.5, 58.75]], ["C", [49.2, 57.1, 48.7, 55.5]], ["C", [48.4, 54.75, 48.25, 54]], ["C", [48.1, 53.3, 47.7, 52.7]], ["C", [47.5, 52.55, 47.1, 52.35]], ["C", [46.8, 52.25, 46.7, 52.35]], ["C", [46, 52.55, 45.7, 53.5]], ["C", [45.4, 54.55, 45.2, 55.2]], ["C", [44.5, 57.3, 44.1, 59.55]], ["C", [43.7, 61.8, 43.1, 64]], ["C", [41.8, 68.5, 40.85, 73.05]], ["C", [39.9, 77.55, 38.6, 82]], ["C", [38.1, 83.65, 37.85, 85.15]], ["C", [37.6, 86.7, 37.1, 88.3]], ["C", [36.6, 89.75, 36.35, 91.1]], ["C", [36.1, 92.5, 35.7, 93.95]], ["C", [35.4, 94.9, 35.15, 95.7]], ["C", [34.9, 96.5, 34.1, 97]], ["C", [33.4, 97.4, 32.4, 97.4]], ["C", [31.4, 97.4, 30.3, 97.4]], ["L", [21.6, 97.4]], ["C", [20.9, 97.2, 20.4, 97.15]], ["C", [19.9, 97.1, 19.4, 96.7]], ["C", [18.6, 96.25, 18.4, 95.05]], ["C", [18.2, 93.95, 17.9, 92.8]], ["C", [17.4, 91.2, 16.95, 89.55]], ["C", [16.5, 87.85, 16, 86.1]], ["C", [15.8, 85.55, 15.75, 84.95]], ["C", [15.7, 84.4, 15.5, 83.75]], ["C", [14.9, 82, 14.5, 80.3]], ["C", [14.1, 78.6, 13.6, 76.95]], ["C", [13.4, 76.5, 13.4, 76.15]], ["C", [13.4, 75.8, 13.3, 75.45]], ["C", [12.8, 74, 12.45, 72.45]], ["C", [12.1, 70.95, 11.6, 69.4]], ["C", [11.5, 69.15, 11.5, 68.85]], ["C", [11.5, 68.5, 11.3, 68.1]], ["C", [10.8, 66.75, 10.55, 65.25]], ["C", [10.3, 63.8, 9.8, 62.35]], ["C", [9.5, 61.3, 9.25, 60.3]], ["C", [9, 59.2, 8.7, 58.25]], ["C", [8.4, 57.2, 8.2, 56.25]], ["C", [8, 55.2, 7.6, 54.25]], ["C", [6.7, 51.3, 6.05, 48.35]], ["C", [5.4, 45.3, 4.5, 42.4]], ["C", [4.3, 41.85, 4.2, 41.2]], ["C", [4.1, 40.6, 3.9, 40.05]], ["C", [3.2, 37.95, 2.7, 35.75]], ["C", [2.2, 33.55, 1.5, 31.35]], ["C", [1.3, 30.6, 0.95, 29.25]], ["C", [0.6, 27.8, 1.1, 27.15]], ["C", [1.6, 26.5, 2.5, 26.3]], ["C", [2.7, 26.2, 2.9, 26.25]], ["C", [3.1, 26.3, 3.3, 26.2]], ["L", [11.2, 26.2]], ["C", [12.3, 26.2, 13.4, 26.2]], ["C", [14.5, 26.2, 15.1, 26.7]], ["C", [15.9, 27.35, 16.15, 28.35]], ["C", [16.4, 29.45, 16.7, 30.5]], ["C", [17.1, 31.9, 17.4, 33.4]], ["C", [17.7, 34.8, 18.1, 36.2]], ["C", [18.3, 36.7, 18.3, 37.05]], ["C", [18.3, 37.45, 18.4, 37.95]], ["C", [18.8, 39.3, 19.05, 40.7]], ["C", [19.3, 42.15, 19.7, 43.5]], ["C", [20.1, 44.6, 20.3, 45.85]], ["C", [20.5, 47, 20.8, 48.25]], ["C", [21.8, 51.5, 22.45, 54.9]], ["C", [23.1, 58.35, 24, 61.6]], ["C", [24.5, 63.15, 24.75, 64.65]], ["C", [25, 66.1, 25.4, 67.6]], ["C", [25.8, 68.85, 26, 69.65]], ["C", [26.2, 70.5, 27, 71.35]], ["C", [27.2, 71.35, 27.25, 71.4]], ["C", [27.3, 71.45, 27.5, 71.35]], ["C", [28.1, 71.15, 28.4, 70.2]], ["C", [28.7, 69.35, 28.9, 68.75]], ["C", [29.3, 67.4, 29.55, 66.05]], ["C", [29.8, 64.75, 30.3, 63.4]], ["C", [30.4, 62.95, 30.5, 62.5]], ["C", [30.6, 62, 30.7, 61.5]], ["C", [31.2, 60.2, 31.45, 58.9]], ["C", [31.7, 57.5, 32.1, 56.25]], ["C", [32.2, 55.8, 32.3, 55.4]], ["C", [32.4, 55, 32.5, 54.55]], ["C", [32.8, 53.6, 33, 52.7]], ["C", [33.2, 51.7, 33.5, 50.8]], ["C", [33.7, 50.05, 33.7, 49.6]], ["C", [33.9, 48.9, 34.1, 48.25]], ["C", [34.3, 47.5, 34.5, 46.8]], ["C", [35.4, 44.05, 36, 41.15]], ["C", [36.6, 38.3, 37.4, 35.55]], ["C", [37.9, 34.1, 38.15, 32.7]], ["C", [38.4, 31.35, 38.8, 29.9]], ["C", [39.2, 28.8, 39.5, 27.85]], ["C", [39.8, 26.95, 40.9, 26.4]], ["C", [41.6, 26.2, 42.5, 26.2]], ["C", [43.4, 26.2, 44.3, 26.2]], ["L", [50.2, 26.2]], ["C", [51.3, 26.2, 52.25, 26.25]], ["C", [53.2, 26.3, 53.9, 26.8]], ["C", [54.6, 27.35, 54.8, 28.25]], ["C", [55, 29.25, 55.3, 30.2]], ["C", [55.8, 32, 56.2, 33.9]], ["C", [56.6, 35.75, 57.1, 37.55]], ["C", [57.5, 38.8, 57.75, 40.15]], ["C", [58, 41.4, 58.4, 42.7]], ["C", [58.7, 43.85, 58.9, 44.85]], ["C", [59.1, 45.95, 59.5, 47]], ["C", [60.6, 50.7, 61.4, 54.6]], ["C", [62.2, 58.45, 63.3, 62.1]], ["C", [63.8, 63.6, 64.05, 65.2]], ["C", [64.3, 66.85, 64.8, 68.2]], ["C", [65.1, 69.25, 65.3, 70.05]], ["C", [65.5, 70.95, 66, 71.6]], ["C", [66.1, 71.7, 66.5, 71.9]], ["L", [66.9, 71.9]], ["C", [67, 71.8, 67.1, 71.75]], ["C", [67.2, 71.7, 67.3, 71.6]], ["C", [67.9, 70.85, 68.1, 69.85]], ["C", [68.3, 68.95, 68.6, 67.9]], ["C", [69.1, 66.3, 69.35, 64.75]], ["C", [69.6, 63.15, 70.1, 61.5]], ["C", [71.4, 57.1, 72.25, 52.7]], ["C", [73.1, 48.35, 74.4, 43.95]], ["C", [74.9, 42.3, 75.15, 40.7]], ["C", [75.4, 39.1, 75.9, 37.55]], ["C", [76.1, 37, 76.1, 36.65]], ["C", [76.1, 36.3, 76.2, 35.85]], ["C", [76.6, 34.4, 76.9, 33]], ["C", [77.2, 31.65, 77.6, 30.2]], ["C", [77.8, 29.45, 78.05, 28.4]], ["C", [78.3, 27.45, 78.9, 26.95]], ["C", [79.6, 26.4, 80.6, 26.3]], ["C", [81.6, 26.2, 82.9, 26.2]], ["L", [88.6, 26.2]], ["C", [89.6, 26.2, 90.55, 26.2]], ["C", [91.5, 26.2, 92.2, 26.5]], ["C", [93.2, 27.05, 93.1, 28.2]], ["C", [93, 29.45, 92.7, 30.4]], ["C", [91.9, 32.7, 91.35, 35.3]]];
__motifs["X"] = [["M", [53.05, 44.3]], ["C", [50, 48.9, 46.8, 53.6]], ["C", [46, 54.8, 45.3, 55.95]], ["C", [44.6, 57.1, 43.8, 58.3]], ["C", [43.6, 58.7, 43.25, 59.3]], ["C", [42.9, 59.9, 43.1, 60.7]], ["C", [43.3, 61.6, 43.75, 62.25]], ["C", [44.2, 62.9, 44.7, 63.6]], ["C", [46.4, 66.3, 48.5, 69.2]], ["C", [51.4, 73.65, 54.35, 78.15]], ["C", [57.3, 82.6, 60.3, 87.1]], ["C", [61.4, 88.8, 62.5, 90.35]], ["C", [63.6, 92, 64.7, 93.7]], ["C", [64.9, 94.1, 65.45, 94.9]], ["C", [66, 95.7, 65.8, 96.4]], ["C", [65.5, 97.3, 64.3, 97.35]], ["C", [63.1, 97.4, 61.9, 97.4]], ["L", [53.9, 97.4]], ["C", [52.9, 97.4, 51.8, 97.45]], ["C", [50.7, 97.5, 49.9, 97.3]], ["C", [48.2, 96.8, 47.3, 95.25]], ["C", [46.4, 93.7, 45.5, 92.3]], ["C", [43.5, 89.2, 41.55, 86.05]], ["C", [39.6, 83, 37.6, 79.85]], ["C", [37.1, 79.2, 36.75, 78.55]], ["C", [36.4, 77.85, 35.9, 77.2]], ["C", [35.6, 76.7, 35.3, 76.2]], ["C", [35, 75.65, 34.6, 75.2]], ["C", [34.3, 74.9, 33.9, 74.5]], ["C", [33.5, 74.1, 32.8, 74.3]], ["C", [32.1, 74.5, 31.75, 75]], ["C", [31.4, 75.5, 31, 76]], ["C", [30.4, 76.9, 29.85, 77.75]], ["C", [29.3, 78.7, 28.7, 79.6]], ["C", [26.6, 82.8, 24.5, 85.95]], ["C", [22.4, 89.1, 20.4, 92.3]], ["C", [19.6, 93.6, 18.65, 95.2]], ["C", [17.7, 96.8, 16, 97.3]], ["C", [15.2, 97.5, 14.2, 97.45]], ["C", [13.2, 97.4, 12.3, 97.4]], ["L", [5.7, 97.4]], ["C", [4.7, 97.4, 3.6, 97.45]], ["C", [2.5, 97.5, 1.8, 97.1]], ["C", [1.6, 96.9, 1.5, 96.75]], ["C", [1.4, 96.55, 1.2, 96.4]], ["C", [1.1, 95.3, 1.65, 94.5]], ["C", [2.2, 93.8, 2.7, 93]], ["C", [3.8, 91.4, 4.8, 89.9]], ["C", [5.8, 88.4, 6.9, 86.8]], ["C", [9.8, 82.4, 12.7, 78.05]], ["C", [15.6, 73.65, 18.5, 69.2]], ["C", [19.3, 67.9, 20.2, 66.65]], ["C", [21.1, 65.35, 21.9, 64.1]], ["C", [22.4, 63.25, 23, 62.5]], ["C", [23.6, 61.7, 23.8, 60.6]], ["C", [24, 59.8, 23.7, 59.1]], ["C", [23.4, 58.5, 23.1, 58.1]], ["C", [22.4, 56.9, 21.7, 55.8]], ["C", [21, 54.7, 20.2, 53.6]], ["C", [19.7, 52.75, 19.2, 52.1]], ["C", [18.7, 51.4, 18.2, 50.6]], ["C", [16.1, 47.5, 14.05, 44.4]], ["C", [12, 41.4, 9.8, 38.25]], ["C", [9.3, 37.5, 8.85, 36.8]], ["C", [8.4, 36.05, 7.9, 35.3]], ["C", [7.2, 34.4, 6.65, 33.5]], ["C", [6.1, 32.6, 5.5, 31.8]], ["C", [5, 31.2, 4.6, 30.6]], ["C", [4.2, 29.95, 3.8, 29.4]], ["C", [3.6, 28.9, 3.25, 28.2]], ["C", [2.9, 27.5, 3.3, 26.9]], ["C", [3.6, 26.5, 4.5, 26.3]], ["C", [4.7, 26.2, 4.9, 26.25]], ["C", [5.1, 26.3, 5.3, 26.2]], ["L", [14.8, 26.2]], ["C", [16.3, 26.2, 17.65, 26.25]], ["C", [19, 26.3, 19.8, 27]], ["C", [20.2, 27.2, 20.45, 27.65]], ["C", [20.7, 28, 21, 28.4]], ["C", [21.5, 29.2, 21.95, 30]], ["C", [22.4, 30.8, 22.9, 31.65]], ["C", [24.6, 34.2, 26.15, 36.75]], ["C", [27.7, 39.3, 29.4, 41.9]], ["C", [30, 42.9, 30.55, 43.85]], ["C", [31.1, 44.8, 31.7, 45.7]], ["C", [32.1, 46.25, 32.45, 46.7]], ["C", [32.8, 47.2, 33.5, 47.4]], ["C", [34.1, 47.5, 34.5, 47.15]], ["C", [34.9, 46.8, 35.1, 46.6]], ["C", [36, 45.7, 36.6, 44.55]], ["C", [37.2, 43.4, 38, 42.3]], ["C", [39.7, 39.5, 41.55, 36.7]], ["C", [43.4, 33.95, 45.1, 31.1]], ["C", [45.9, 29.9, 46.8, 28.4]], ["C", [47.7, 26.9, 49.2, 26.4]], ["C", [50, 26.2, 51, 26.2]], ["C", [52, 26.2, 53, 26.2]], ["L", [60.2, 26.2]], ["C", [61.3, 26.2, 62.4, 26.3]], ["C", [63.5, 26.4, 63.7, 27.2]], ["C", [64, 27.85, 63.55, 28.5]], ["C", [63.1, 29.1, 62.9, 29.5]], ["C", [62, 30.9, 61.1, 32.25]], ["C", [60.2, 33.6, 59.3, 35]], ["C", [56.1, 39.7, 53.05, 44.3]]];
__motifs["Y"] = [["M", [54.1, 48.35]], ["C", [51, 53.7, 47.65, 59.1]], ["C", [46.6, 60.75, 45.6, 62.35]], ["C", [44.7, 64, 43.65, 65.7]], ["C", [42.85, 66.85, 42.25, 67.9]], ["C", [41.55, 69.05, 41.15, 70.4]], ["C", [41.05, 70.95, 41.1, 71.4]], ["C", [41.15, 71.8, 41.05, 72.3]], ["C", [40.95, 72.6, 40.95, 73.05]], ["C", [40.95, 73.45, 40.95, 73.8]], ["L", [40.95, 89.95]], ["C", [40.95, 91.85, 41, 94.05]], ["C", [41.05, 96.25, 39.9, 96.9]], ["C", [39.25, 97.3, 38.35, 97.3]], ["C", [37.35, 97.3, 36.45, 97.3]], ["L", [29.5, 97.3]], ["C", [28.35, 97.3, 27.5, 97.2]], ["C", [26.6, 97.1, 26.05, 96.5]], ["C", [25.6, 95.95, 25.6, 95.1]], ["C", [25.6, 94.35, 25.5, 93.2]], ["L", [25.5, 72.5]], ["C", [25.5, 71.9, 25.5, 71.3]], ["C", [25.5, 70.6, 25.3, 70.1]], ["C", [24.9, 68.6, 24.15, 67.4]], ["C", [23.5, 66.2, 22.7, 65.15]], ["C", [21.8, 63.5, 20.9, 61.95]], ["C", [19.95, 60.4, 19, 58.85]], ["C", [18.2, 57.7, 17.6, 56.5]], ["C", [17, 55.2, 16.2, 54.1]], ["C", [13.55, 50, 11.2, 45.95]], ["C", [8.8, 41.85, 6.3, 37.75]], ["C", [5.1, 35.75, 4, 33.9]], ["C", [2.9, 32, 1.8, 30]], ["C", [1.45, 29.65, 0.95, 28.65]], ["C", [0.4, 27.7, 0.8, 27]], ["C", [1, 26.6, 1.3, 26.45]], ["C", [1.7, 26.3, 2.1, 26.2]], ["C", [2.3, 26.1, 2.5, 26.15]], ["C", [2.7, 26.2, 2.9, 26.1]], ["L", [11.65, 26.1]], ["C", [12.9, 26.1, 14.2, 26.1]], ["C", [15.5, 26.1, 16.3, 26.5]], ["C", [17.4, 27, 18.1, 28.4]], ["C", [18.9, 29.8, 19.6, 30.8]], ["C", [21.3, 33.55, 22.8, 36.2]], ["C", [24.25, 38.9, 26, 41.6]], ["C", [27.3, 43.6, 28.35, 45.65]], ["C", [29.5, 47.7, 30.75, 49.7]], ["C", [31.3, 50.55, 31.8, 51.45]], ["C", [32.3, 52.45, 33.4, 52.65]], ["C", [34.1, 52.7, 34.55, 52.1]], ["C", [35.05, 51.5, 35.35, 51.1]], ["C", [36.3, 49.7, 37, 48.35]], ["C", [37.8, 46.9, 38.65, 45.5]], ["C", [40.75, 42.15, 42.75, 38.65]], ["C", [44.8, 35.2, 46.9, 31.75]], ["C", [47.65, 30.4, 48.6, 28.7]], ["C", [49.45, 27, 50.9, 26.4]], ["C", [51.75, 25.9, 53.7, 26]], ["C", [55.65, 26.1, 57.1, 26.1]], ["L", [62.65, 26.1]], ["C", [63.5, 26.1, 64.3, 26.15]], ["C", [65.2, 26.2, 65.65, 26.5]], ["C", [66.45, 27, 66.05, 28.05]], ["C", [65.65, 29.1, 65.4, 29.65]], ["C", [64.15, 31.65, 63.05, 33.6]], ["C", [61.85, 35.55, 60.65, 37.5]], ["C", [57.3, 42.9, 54.1, 48.35]]];
__motifs["Z"] = [["M", [53.1, 48.45]], ["C", [52.4, 49.2, 51.7, 50.15]], ["C", [51.5, 50.35, 51.35, 50.55]], ["C", [51.2, 50.7, 51, 50.9]], ["C", [50.3, 51.8, 49.55, 52.7]], ["C", [48.8, 53.5, 48.1, 54.45]], ["C", [45.8, 57.3, 43.35, 60.1]], ["C", [40.9, 62.95, 38.6, 65.8]], ["C", [38.4, 66.1, 38.1, 66.4]], ["C", [37.8, 66.7, 37.6, 66.95]], ["C", [36.5, 68.3, 35.4, 69.6]], ["C", [34.3, 70.95, 33.2, 72.3]], ["C", [32.9, 72.7, 32.55, 73.05]], ["C", [32.2, 73.35, 32, 73.7]], ["C", [30.9, 75.15, 29.65, 76.5]], ["C", [28.4, 77.9, 27.3, 79.35]], ["C", [26.7, 80.1, 25.95, 80.8]], ["C", [25.2, 81.55, 25, 82.6]], ["C", [24.8, 83.45, 25.2, 83.75]], ["C", [25.6, 84, 26.1, 84.2]], ["C", [26.4, 84.2, 27, 84.4]], ["L", [28.3, 84.4]], ["C", [28.6, 84.5, 29.05, 84.45]], ["C", [29.5, 84.4, 29.9, 84.4]], ["L", [58.4, 84.4]], ["C", [59.4, 84.4, 60.2, 84.45]], ["C", [61, 84.5, 61.5, 84.9]], ["C", [62.1, 85.4, 62.25, 86.3]], ["C", [62.4, 87.2, 62.4, 88.3]], ["L", [62.4, 93.7]], ["C", [62.4, 94.6, 62.25, 95.5]], ["C", [62.1, 96.45, 61.6, 96.8]], ["C", [60.9, 97.3, 59.8, 97.35]], ["C", [58.7, 97.4, 57.5, 97.4]], ["L", [7.3, 97.4]], ["C", [6.3, 97.4, 5.2, 97.45]], ["C", [4.1, 97.5, 3.5, 97]], ["C", [2.8, 96.6, 2.4, 95.3]], ["C", [2.2, 94.6, 2.3, 93.8]], ["C", [2.4, 93, 2.4, 92.25]], ["C", [2.4, 90.5, 2.35, 88.4]], ["C", [2.3, 86.3, 2.8, 85]], ["C", [3.3, 83.95, 4.05, 83.1]], ["C", [4.8, 82.3, 5.5, 81.5]], ["C", [6.5, 80.1, 7.55, 78.95]], ["C", [8.6, 77.8, 9.6, 76.4]], ["C", [9.9, 76, 10.25, 75.7]], ["C", [10.6, 75.4, 10.8, 75.1]], ["C", [11.6, 74.1, 12.3, 73.25]], ["C", [13, 72.4, 13.8, 71.5]], ["C", [14, 71.3, 14.15, 71.05]], ["C", [14.3, 70.8, 14.5, 70.6]], ["C", [16.4, 68.2, 18.45, 65.95]], ["C", [20.5, 63.7, 22.3, 61.2]], ["C", [22.9, 60.4, 23.55, 59.75]], ["C", [24.2, 59.1, 24.8, 58.3]], ["C", [25, 58, 25.3, 57.75]], ["C", [25.6, 57.5, 25.8, 57.2]], ["C", [26.6, 56.1, 27.6, 55]], ["C", [28.6, 53.9, 29.4, 52.7]], ["C", [29.8, 52.2, 30.2, 51.85]], ["C", [30.6, 51.5, 30.9, 51.1]], ["C", [32.3, 49.2, 33.85, 47.5]], ["C", [35.4, 45.8, 36.8, 43.9]], ["C", [37.3, 43.4, 37.75, 42.85]], ["C", [38.2, 42.3, 38.5, 41.6]], ["C", [38.7, 41.4, 38.85, 41.05]], ["C", [39, 40.7, 38.8, 40.3]], ["C", [38.6, 39.5, 37.7, 39.4]], ["C", [36.8, 39.3, 35.8, 39.2]], ["L", [13.1, 39.2]], ["C", [12.4, 39.2, 11.4, 39.25]], ["C", [10.4, 39.3, 9.45, 39.3]], ["C", [8.5, 39.3, 7.65, 39.2]], ["C", [6.8, 39.1, 6.4, 38.8]], ["C", [5.8, 38.4, 5.6, 37.4]], ["C", [5.4, 36.4, 5.35, 35.15]], ["C", [5.3, 33.95, 5.35, 32.6]], ["C", [5.4, 31.3, 5.4, 30.4]], ["C", [5.4, 29.55, 5.45, 28.6]], ["C", [5.5, 27.7, 5.9, 27.1]], ["C", [6.2, 26.5, 7.3, 26.3]], ["C", [7.5, 26.2, 7.7, 26.25]], ["C", [7.9, 26.3, 8.1, 26.2]], ["L", [56.9, 26.2]], ["C", [58.4, 26.2, 59.55, 26.35]], ["C", [60.7, 26.5, 61.1, 27.65]], ["C", [61.4, 28.3, 61.4, 29.75]], ["C", [61.4, 31.1, 61.4, 32.1]], ["C", [61.4, 32.8, 61.5, 33.6]], ["C", [61.6, 34.3, 61.4, 34.8]], ["L", [61.4, 36.05]], ["C", [61.4, 37.3, 61.1, 38.3]], ["C", [60.7, 39.3, 60.05, 40.05]], ["C", [59.4, 40.7, 58.8, 41.5]], ["C", [58, 42.6, 57.1, 43.6]], ["C", [56.2, 44.6, 55.4, 45.7]], ["C", [55.2, 45.9, 54.95, 46.25]], ["C", [54.7, 46.5, 54.5, 46.7]], ["C", [53.8, 47.6, 53.1, 48.45]]];
__motifs["a"] = [["M", [32.5, 74.1]], ["C", [31.7, 74.2, 30.9, 74.4]], ["C", [30.6, 74.5, 30, 74.5]], ["C", [28.7, 74.8, 27.4, 74.9]], ["C", [26.1, 75, 24.9, 75.4]], ["C", [24.1, 75.6, 23.4, 75.75]], ["C", [22.7, 75.9, 22, 76.2]], ["C", [19.9, 77.1, 18.45, 78.9]], ["C", [17, 80.7, 17.4, 83.9]], ["C", [17.6, 85.6, 18.5, 86.7]], ["C", [19.2, 87.8, 20.6, 88.45]], ["C", [22, 89.1, 23.65, 89.4]], ["C", [25.3, 89.7, 27.15, 89.55]], ["C", [29, 89.4, 30.6, 88.9]], ["C", [33.2, 88.1, 34.7, 86.35]], ["C", [36.2, 84.6, 37, 82]], ["C", [37.2, 81.3, 37.25, 80.55]], ["C", [37.3, 79.8, 37.5, 79]], ["L", [37.5, 78.1]], ["C", [37.6, 77.6, 37.6, 76.95]], ["C", [37.6, 76.3, 37.5, 75.8]], ["C", [37.3, 75.2, 37.3, 74.7]], ["C", [37.3, 74.2, 36.9, 73.9]], ["C", [36.4, 73.5, 35.4, 73.5]], ["C", [35, 73.6, 34.7, 73.65]], ["C", [34.4, 73.7, 34, 73.8]], ["C", [33.3, 74, 32.5, 74.1]], ["M", [47.3, 49.35]], ["C", [49.5, 51.15, 50.7, 54.1]], ["C", [51.4, 55.8, 51.5, 58]], ["C", [51.6, 60.2, 51.6, 62.5]], ["L", [51.6, 84.8]], ["C", [51.6, 86.65, 51.6, 88.6]], ["C", [51.6, 90.55, 52, 92.2]], ["C", [52.1, 92.45, 52.1, 92.8]], ["C", [52.1, 93.2, 52.2, 93.5]], ["C", [52.4, 94.55, 52.45, 95.7]], ["C", [52.5, 96.75, 51.4, 97.2]], ["C", [50.8, 97.5, 50, 97.5]], ["C", [49.2, 97.5, 48.4, 97.5]], ["L", [43, 97.5]], ["C", [42.1, 97.5, 41.25, 97.45]], ["C", [40.4, 97.4, 39.9, 96.95]], ["C", [39.2, 96.55, 38.85, 95.85]], ["C", [38.5, 95.1, 37.9, 94.55]], ["C", [37.7, 94.4, 37.4, 94.25]], ["C", [37.1, 94.1, 36.6, 94.2]], ["C", [36.1, 94.4, 35.65, 94.65]], ["C", [35.2, 94.95, 34.7, 95.2]], ["C", [34.2, 95.6, 33.6, 95.9]], ["C", [33, 96.2, 32.4, 96.45]], ["C", [31.1, 97.05, 29.7, 97.45]], ["C", [28.3, 97.8, 26.8, 98.2]], ["C", [26.1, 98.45, 25.45, 98.5]], ["C", [24.8, 98.55, 24.1, 98.6]], ["C", [23.8, 98.6, 23.5, 98.65]], ["C", [23.2, 98.7, 22.9, 98.7]], ["L", [21.8, 98.7]], ["C", [20.8, 98.9, 19.8, 98.7]], ["L", [18.9, 98.7]], ["C", [18.2, 98.5, 17.55, 98.55]], ["C", [16.9, 98.6, 16.3, 98.4]], ["C", [15.3, 98.2, 14.4, 98.05]], ["C", [13.5, 97.9, 12.7, 97.5]], ["C", [9.8, 96.4, 7.75, 94.6]], ["C", [5.7, 92.85, 4.5, 90]], ["C", [4.2, 89.3, 3.95, 88.45]], ["C", [3.7, 87.7, 3.5, 86.8]], ["C", [3.3, 86.25, 3.35, 85.8]], ["C", [3.4, 85.3, 3.3, 84.8]], ["C", [3.2, 84.45, 3.15, 83.55]], ["C", [3.1, 82.6, 3.2, 82.15]], ["C", [3.4, 81.2, 3.4, 80.5]], ["C", [3.7, 79.4, 4, 78.2]], ["C", [4.3, 77.1, 4.8, 76.15]], ["C", [6.5, 73.3, 8.7, 71.75]], ["C", [10.9, 70.3, 14.3, 69.2]], ["C", [15.6, 68.7, 17, 68.5]], ["C", [18.4, 68.3, 19.8, 68]], ["C", [20.6, 67.75, 21.5, 67.7]], ["C", [22.4, 67.65, 23.3, 67.45]], ["C", [24, 67.3, 24.7, 67.3]], ["C", [25.4, 67.35, 26.2, 67.2]], ["C", [26.9, 67, 27.6, 67]], ["C", [28.3, 67, 29.1, 66.8]], ["C", [31.2, 66.3, 32.95, 65.95]], ["C", [34.7, 65.55, 36.1, 64.2]], ["C", [37, 63.25, 37.3, 62.2]], ["C", [37.4, 61.9, 37.35, 61.65]], ["C", [37.3, 61.45, 37.4, 61.25]], ["C", [37.5, 61.05, 37.5, 60.7]], ["C", [37.5, 60.3, 37.5, 60.1]], ["C", [37.4, 59.7, 37.35, 59.25]], ["C", [37.3, 58.9, 37.2, 58.6]], ["C", [36.2, 55.6, 33, 54.5]], ["C", [32.1, 54.2, 30.85, 54.05]], ["C", [29.6, 53.9, 28.3, 53.95]], ["C", [27, 54, 25.8, 54.2]], ["C", [24.6, 54.4, 23.7, 54.7]], ["C", [23.1, 54.85, 22.55, 55.2]], ["C", [22, 55.6, 21.5, 56]], ["C", [21, 56.4, 20.45, 57.05]], ["C", [19.9, 57.8, 19.7, 58.4]], ["C", [19.2, 59.35, 18.85, 60.3]], ["C", [18.5, 61.15, 17.4, 61.45]], ["C", [16.6, 61.65, 15.7, 61.65]], ["C", [14.8, 61.65, 13.9, 61.65]], ["L", [10.1, 61.65]], ["C", [9.6, 61.65, 9.1, 61.7]], ["C", [8.6, 61.8, 8.2, 61.65]], ["L", [7.3, 61.65]], ["C", [7.1, 61.55, 6.8, 61.55]], ["C", [6.5, 61.55, 6.3, 61.35]], ["C", [5.5, 61.15, 5.2, 60.1]], ["C", [5.1, 59.55, 5.2, 59.05]], ["C", [5.3, 58.6, 5.4, 58.2]], ["C", [5.7, 57.05, 6.05, 56.15]], ["C", [6.4, 55.15, 6.9, 54.4]], ["C", [7.2, 53.9, 7.5, 53.35]], ["C", [7.8, 52.85, 8.1, 52.4]], ["C", [8.9, 51.25, 10.1, 50.3]], ["C", [10.3, 50.2, 10.7, 49.8]], ["C", [11.2, 49.4, 11.6, 49.05]], ["C", [12, 48.75, 12.5, 48.5]], ["C", [14.2, 47.4, 16.1, 46.7]], ["C", [18, 46.1, 20, 45.5]], ["C", [21.2, 45.2, 22.5, 45.1]], ["C", [23.8, 44.95, 25.1, 44.65]], ["C", [25.5, 44.55, 26.35, 44.65]], ["C", [27.2, 44.75, 27.4, 44.55]], ["C", [31.5, 44.45, 35.25, 44.85]], ["C", [39, 45.3, 42.05, 46.4]], ["C", [45.1, 47.5, 47.3, 49.35]]];
__motifs["b"] = [["M", [22.3, 59.65]], ["C", [20.8, 62, 19.8, 65]], ["C", [19.5, 65.8, 19.45, 66.65]], ["C", [19.4, 67.5, 19.2, 68.3]], ["C", [19.1, 68.6, 19.1, 69.3]], ["C", [19, 69.7, 19.05, 70.1]], ["C", [19.1, 70.5, 19, 70.9]], ["C", [18.8, 71.7, 18.9, 73.1]], ["C", [19, 74.5, 19.2, 75.1]], ["C", [19.4, 76, 19.45, 76.8]], ["C", [19.5, 77.6, 19.8, 78.4]], ["C", [20.7, 81.2, 21.9, 83.25]], ["C", [23.2, 85.3, 25.5, 86.7]], ["C", [27.1, 87.7, 28.8, 88.1]], ["C", [29, 88.1, 29.25, 88.15]], ["C", [29.5, 88.2, 29.8, 88.2]], ["C", [30.1, 88.3, 30.8, 88.35]], ["C", [31.5, 88.4, 32, 88.3]], ["C", [33, 88.1, 33.85, 87.95]], ["C", [34.65, 87.8, 35.5, 87.5]], ["C", [38.3, 86.2, 39.85, 83.9]], ["C", [41.4, 81.6, 42.4, 78.5]], ["C", [42.7, 77.5, 42.9, 76]], ["C", [43.2, 74.5, 43.25, 72.95]], ["C", [43.3, 71.4, 43.25, 69.85]], ["C", [43.2, 68.3, 42.85, 67.2]], ["C", [42.6, 66.2, 42.5, 65.3]], ["C", [42.4, 64.4, 42, 63.6]], ["C", [40.6, 60.1, 38.05, 57.65]], ["C", [35.5, 55.2, 30.6, 55.2]], ["C", [30.2, 55.2, 29.9, 55.25]], ["C", [29.6, 55.3, 29.2, 55.3]], ["C", [28.5, 55.5, 27.9, 55.65]], ["C", [27.3, 55.8, 26.7, 56]], ["C", [23.8, 57.3, 22.3, 59.65]], ["M", [42.5, 45.7]], ["C", [47.05, 47.6, 50, 50.6]], ["C", [52.9, 53.6, 54.9, 58.1]], ["C", [55.35, 59.3, 55.7, 60.6]], ["C", [56.1, 61.9, 56.5, 63.3]], ["C", [56.7, 64, 56.75, 64.65]], ["C", [56.8, 65.3, 57, 66.1]], ["C", [57.2, 66.6, 57.15, 67.2]], ["C", [57.1, 67.8, 57.2, 68.4]], ["L", [57.2, 69.1]], ["C", [57.35, 69.7, 57.35, 71.15]], ["C", [57.35, 72.6, 57.3, 73.2]], ["C", [57.3, 73.7, 57.25, 74.05]], ["C", [57.2, 74.4, 57.2, 74.9]], ["C", [57, 75.7, 57, 76.45]], ["C", [57, 77.2, 56.8, 78]], ["C", [56.8, 78.4, 56.6, 79.4]], ["C", [56.3, 80.6, 56.05, 81.85]], ["C", [55.75, 83.1, 55.25, 84.2]], ["C", [53.45, 88.7, 50.8, 92]], ["C", [48.1, 95.3, 43.7, 97.2]], ["C", [42.75, 97.6, 41.85, 97.85]], ["C", [40.85, 98.1, 39.8, 98.4]], ["C", [39.2, 98.6, 38.55, 98.6]], ["C", [37.9, 98.6, 37.3, 98.7]], ["L", [36.4, 98.7]], ["C", [35.8, 98.9, 34.75, 98.85]], ["C", [33.8, 98.8, 33.2, 98.6]], ["L", [32.55, 98.6]], ["C", [32.1, 98.5, 31.5, 98.45]], ["C", [30.9, 98.4, 30.25, 98.3]], ["C", [28.35, 97.8, 26.8, 97.3]], ["C", [25.2, 96.8, 23.8, 95.9]], ["C", [23.2, 95.5, 22.65, 95.1]], ["C", [22.05, 94.7, 21.6, 94.2]], ["C", [21.3, 94, 21, 93.8]], ["C", [20.7, 93.6, 20.35, 93.5]], ["C", [19.5, 93.2, 19.3, 93.9]], ["C", [18.8, 94.6, 18.65, 95.55]], ["C", [18.5, 96.5, 17.85, 97]], ["C", [17.3, 97.4, 16.5, 97.45]], ["C", [15.65, 97.5, 14.7, 97.5]], ["L", [9.85, 97.5]], ["C", [9.2, 97.5, 8.45, 97.55]], ["C", [7.65, 97.6, 7.1, 97.4]], ["C", [5.65, 96.9, 5.5, 95.55]], ["C", [5.35, 94.2, 5.35, 92.5]], ["L", [5.35, 31.5]], ["C", [5.35, 30.4, 5.35, 29.2]], ["C", [5.35, 28, 5.85, 27.3]], ["C", [6.25, 26.6, 7.3, 26.4]], ["C", [7.45, 26.3, 7.7, 26.35]], ["C", [7.95, 26.4, 8.15, 26.3]], ["L", [14.5, 26.3]], ["C", [16.25, 26.3, 17.6, 26.45]], ["C", [18.9, 26.6, 19.3, 28]], ["C", [19.6, 29, 19.5, 30.65]], ["C", [19.4, 32.3, 19.4, 33.5]], ["L", [19.4, 44.4]], ["C", [19.4, 45.5, 19.4, 46.6]], ["C", [19.4, 47.7, 19.6, 48.5]], ["C", [19.7, 49, 19.8, 49.35]], ["C", [19.85, 49.7, 20.25, 49.8]], ["C", [20.5, 50, 20.85, 50]], ["C", [21.2, 50, 21.4, 49.9]], ["C", [22.05, 49.5, 22.7, 49.05]], ["C", [23.3, 48.6, 23.95, 48.1]], ["C", [25.3, 47.2, 26.7, 46.55]], ["C", [28.1, 45.9, 29.8, 45.4]], ["C", [30.55, 45.1, 31.4, 45.05]], ["C", [32.2, 45, 33, 44.8]], ["C", [33.7, 44.6, 34.45, 44.6]], ["C", [35.3, 44.6, 36.1, 44.6]], ["L", [37.1, 44.6]], ["C", [37.4, 44.7, 37.8, 44.65]], ["C", [38.2, 44.6, 38.55, 44.7]], ["C", [39.7, 45, 40.65, 45.15]], ["C", [41.6, 45.3, 42.5, 45.7]]];
__motifs["c"] = [["M", [29, 44.5]], ["C", [37.1, 44.35, 42.55, 46.9]], ["C", [48, 49.5, 51.2, 54.3]], ["C", [52.8, 56.75, 53.6, 59.8]], ["C", [53.8, 60.3, 53.95, 61.1]], ["C", [54.1, 61.9, 53.9, 62.5]], ["C", [53.5, 63.6, 52.5, 63.75]], ["C", [51.5, 63.9, 50.1, 63.9]], ["L", [44.9, 63.9]], ["C", [44, 63.9, 43.05, 63.9]], ["C", [42.1, 63.9, 41.5, 63.5]], ["C", [40.7, 63.15, 40.4, 62.25]], ["C", [40.1, 61.4, 39.6, 60.5]], ["C", [39, 59.4, 38.3, 58.5]], ["C", [37.6, 57.6, 36.7, 56.9]], ["C", [35.3, 56, 33.6, 55.5]], ["C", [33, 55.3, 32.4, 55.3]], ["C", [31.8, 55.3, 31.3, 55.1]], ["L", [30.3, 55.1]], ["C", [28.3, 55.1, 27.1, 55.5]], ["C", [24.2, 56.4, 22.4, 58.25]], ["C", [20.6, 60.1, 19.5, 62.7]], ["C", [19, 63.8, 18.75, 65.1]], ["C", [18.5, 66.3, 18.2, 67.7]], ["C", [18.1, 68.1, 18.1, 68.5]], ["C", [18.1, 68.95, 18, 69.35]], ["C", [17.8, 70.3, 17.85, 72.1]], ["C", [17.9, 73.9, 18.1, 74.95]], ["C", [18.1, 75.7, 18.2, 76]], ["C", [18.4, 76.75, 18.45, 77.45]], ["C", [18.5, 78.1, 18.7, 78.85]], ["C", [19.5, 81.15, 20.6, 83.05]], ["C", [21.7, 84.9, 23.4, 86.2]], ["C", [23.8, 86.5, 24.6, 86.9]], ["C", [25.7, 87.65, 26.85, 87.85]], ["C", [28, 88.05, 29.7, 88.2]], ["C", [29.9, 88.2, 30.3, 88.2]], ["C", [30.7, 88.2, 30.9, 88.15]], ["L", [31.8, 88.15]], ["C", [32.5, 87.95, 33.15, 87.8]], ["C", [33.8, 87.65, 34.4, 87.45]], ["C", [37.4, 86.1, 39, 83.65]], ["C", [39.4, 83.15, 39.7, 82.45]], ["C", [40, 81.85, 40.2, 81.35]], ["C", [40.6, 80.2, 40.9, 79.4]], ["C", [41.2, 78.5, 42.3, 78]], ["C", [43.2, 77.65, 45.2, 77.7]], ["C", [47.2, 77.7, 48.5, 77.7]], ["C", [49.2, 77.7, 49.95, 77.7]], ["C", [50.7, 77.65, 51.2, 77.8]], ["L", [52, 77.8]], ["C", [52.4, 77.9, 52.8, 77.95]], ["C", [53.2, 78, 53.4, 78.2]], ["C", [53.9, 78.6, 54.05, 79.4]], ["C", [54.2, 80.1, 54, 80.9]], ["C", [53.1, 84.2, 51.8, 86.8]], ["C", [47.7, 94.5, 38.7, 97.5]], ["C", [37.7, 97.85, 36.6, 98]], ["C", [35.5, 98.15, 34.4, 98.45]], ["C", [33.8, 98.55, 33.2, 98.55]], ["C", [32.6, 98.55, 32, 98.6]], ["L", [30.9, 98.6]], ["C", [30.4, 98.8, 29.4, 98.75]], ["C", [28.4, 98.7, 27.9, 98.6]], ["C", [27.1, 98.45, 26.45, 98.5]], ["C", [25.8, 98.55, 25.1, 98.35]], ["C", [24.6, 98.25, 24.1, 98.2]], ["C", [23.6, 98.15, 23.1, 98.05]], ["C", [22, 97.75, 21, 97.4]], ["C", [20, 97.1, 19.1, 96.7]], ["C", [14.4, 94.7, 11.2, 91.6]], ["C", [8, 88.4, 6, 83.75]], ["C", [5.5, 82.8, 5.2, 81.8]], ["C", [4.9, 80.7, 4.6, 79.65]], ["C", [4.5, 79.25, 4.5, 78.9]], ["C", [4.5, 78.5, 4.3, 78]], ["C", [4.1, 77.35, 4.1, 76.55]], ["C", [4.1, 75.8, 3.9, 75.15]], ["L", [3.9, 73.45]], ["C", [3.7, 72.95, 3.7, 72.25]], ["C", [3.7, 71.6, 3.9, 71.15]], ["C", [4, 70.6, 3.9, 70.2]], ["C", [3.8, 69.8, 3.9, 69.4]], ["C", [4.1, 68.7, 4.05, 68.1]], ["C", [4, 67.5, 4.2, 66.95]], ["C", [4.7, 65.15, 5, 63.45]], ["C", [5.3, 61.8, 5.9, 60.2]], ["C", [8.1, 55.1, 11.45, 51.7]], ["C", [14.8, 48.35, 20, 46.25]], ["C", [21.4, 45.6, 22.9, 45.35]], ["C", [24.4, 45.1, 26, 44.7]], ["C", [26.8, 44.6, 27.5, 44.6]], ["C", [28.2, 44.6, 29, 44.5]]];
__motifs["d"] = [["M", [20.7, 59.6]], ["C", [19.2, 61.9, 18.3, 64.8]], ["C", [17.95, 65.8, 17.85, 66.8]], ["C", [17.75, 67.8, 17.5, 68.9]], ["L", [17.5, 70.3]], ["C", [17.3, 71.2, 17.4, 72.75]], ["C", [17.5, 74.3, 17.7, 75]], ["C", [17.7, 75.3, 17.7, 75.55]], ["C", [17.75, 75.8, 17.75, 76]], ["C", [17.95, 76.8, 18.1, 77.5]], ["C", [18.3, 78.2, 18.5, 79]], ["C", [20.15, 84.2, 24.25, 86.7]], ["C", [25.6, 87.6, 27.9, 88.1]], ["C", [28.25, 88.2, 29.1, 88.2]], ["C", [29.4, 88.3, 30.05, 88.35]], ["C", [30.65, 88.4, 31.1, 88.3]], ["C", [31.9, 88.1, 32.65, 88]], ["C", [33.5, 87.9, 34.3, 87.6]], ["C", [36.75, 86.5, 38.3, 84.8]], ["C", [39.8, 83.1, 40.85, 80.5]], ["C", [41.3, 79.6, 41.5, 78.65]], ["C", [41.7, 77.7, 41.9, 76.6]], ["C", [42, 76.1, 41.95, 75.65]], ["C", [41.9, 75.2, 42.1, 74.7]], ["C", [42.2, 74.4, 42.2, 74]], ["C", [42.2, 73.6, 42.2, 73.1]], ["L", [42.2, 72.2]], ["C", [42.3, 71.8, 42.25, 71.35]], ["C", [42.2, 70.9, 42.2, 70.5]], ["C", [42.2, 69.5, 42.1, 68.5]], ["C", [42, 67.5, 41.8, 66.7]], ["C", [41.6, 65.6, 41.45, 64.7]], ["C", [41.3, 63.8, 40.85, 63]], ["C", [39.5, 59.4, 36.8, 57.3]], ["C", [34.2, 55.2, 29.2, 55.2]], ["C", [28.55, 55.2, 27.6, 55.4]], ["C", [26.8, 55.6, 26.1, 55.75]], ["C", [25.5, 55.9, 24.9, 56.2]], ["C", [22.15, 57.3, 20.7, 59.6]], ["M", [55.8, 31.75]], ["L", [55.8, 91.8]], ["C", [55.8, 93.2, 55.8, 94.55]], ["C", [55.8, 95.9, 55.2, 96.7]], ["C", [54.7, 97.2, 53.9, 97.35]], ["C", [53.15, 97.5, 52.1, 97.5]], ["L", [46.6, 97.5]], ["C", [45.6, 97.5, 44.8, 97.45]], ["C", [43.9, 97.4, 43.4, 97]], ["C", [42.7, 96.5, 42.6, 95.7]], ["C", [42.5, 94.9, 42.2, 94.15]], ["C", [42, 93.9, 41.85, 93.75]], ["C", [41.7, 93.6, 41.5, 93.4]], ["C", [40.4, 93.4, 39.9, 93.9]], ["C", [39.4, 94.4, 38.9, 94.9]], ["C", [38.2, 95.4, 37.6, 95.75]], ["C", [37, 96.1, 36.3, 96.6]], ["C", [35.9, 96.8, 35.45, 97]], ["C", [35, 97.2, 34.5, 97.4]], ["C", [33.1, 97.9, 31.5, 98.35]], ["C", [31, 98.55, 30.6, 98.55]], ["C", [30.2, 98.55, 29.8, 98.6]], ["C", [29.3, 98.6, 28.95, 98.65]], ["C", [28.6, 98.7, 28.1, 98.7]], ["L", [27.2, 98.7]], ["C", [26.6, 98.9, 25.4, 98.85]], ["C", [24.2, 98.8, 23.7, 98.6]], ["C", [23, 98.45, 22.45, 98.5]], ["C", [21.9, 98.55, 21.3, 98.35]], ["C", [20.1, 97.9, 18.95, 97.55]], ["C", [17.8, 97.2, 16.7, 96.7]], ["C", [13.2, 95.2, 10.45, 92.1]], ["C", [7.7, 88.9, 6.1, 85.4]], ["C", [5.6, 84.3, 5.3, 83.25]], ["C", [5, 82.2, 4.6, 81.1]], ["C", [4.5, 80.7, 4.5, 80.35]], ["C", [4.5, 80, 4.3, 79.5]], ["C", [4.1, 78.7, 3.95, 77.75]], ["C", [3.8, 76.8, 3.6, 75.8]], ["C", [3.5, 75.55, 3.55, 75.1]], ["C", [3.6, 74.7, 3.5, 74.4]], ["C", [3.5, 73.9, 3.5, 73.5]], ["C", [3.5, 73, 3.4, 72.5]], ["C", [3.3, 72, 3.3, 71.4]], ["C", [3.3, 70.7, 3.4, 70.3]], ["C", [3.5, 69.8, 3.5, 69.4]], ["C", [3.5, 68.9, 3.5, 68.4]], ["C", [3.6, 67.9, 3.55, 67.45]], ["C", [3.5, 67, 3.7, 66.5]], ["C", [3.9, 65.4, 4.05, 64.4]], ["C", [4.2, 63.4, 4.5, 62.4]], ["C", [4.9, 61.2, 5.2, 60.1]], ["C", [5.5, 59, 6, 57.9]], ["C", [7.4, 54.9, 9.5, 52.2]], ["C", [9.7, 51.9, 10.05, 51.65]], ["C", [10.4, 51.4, 10.6, 51.1]], ["C", [11, 50.65, 11.4, 50.2]], ["C", [11.8, 49.8, 12.3, 49.4]], ["C", [12.7, 49.2, 13, 48.85]], ["C", [13.3, 48.55, 13.7, 48.35]], ["C", [16.2, 46.6, 19.5, 45.5]], ["C", [20.2, 45.3, 20.95, 45.2]], ["C", [21.7, 45.1, 22.5, 44.9]], ["C", [23.2, 44.7, 24.3, 44.65]], ["C", [25.4, 44.6, 26.5, 44.6]], ["C", [27.6, 44.6, 28.65, 44.7]], ["C", [29.7, 44.8, 30.4, 45]], ["C", [31.9, 45.5, 33.3, 45.9]], ["C", [34.7, 46.35, 35.9, 47]], ["C", [36.6, 47.5, 37.2, 47.95]], ["C", [37.8, 48.45, 38.5, 48.9]], ["C", [38.9, 49.2, 39.65, 49.7]], ["C", [40.4, 50.2, 41.1, 49.7]], ["C", [41.5, 49.5, 41.5, 49]], ["C", [41.5, 48.55, 41.7, 48]], ["L", [41.7, 47]], ["C", [41.8, 46.7, 41.8, 46.35]], ["C", [41.8, 45.9, 41.8, 45.5]], ["L", [41.8, 31.9]], ["C", [41.8, 30.8, 41.75, 29.45]], ["C", [41.7, 28.1, 42.2, 27.4]], ["C", [42.6, 26.6, 43.7, 26.4]], ["C", [43.9, 26.3, 44.1, 26.35]], ["C", [44.3, 26.4, 44.5, 26.3]], ["L", [51.6, 26.3]], ["C", [52.85, 26.3, 53.8, 26.4]], ["C", [54.85, 26.5, 55.3, 27.2]], ["C", [55.8, 28, 55.8, 29.25]], ["C", [55.8, 30.5, 55.8, 31.75]]];
__motifs["e"] = [["M", [34.9, 56.6]], ["C", [32.6, 55.1, 28.5, 55]], ["C", [28.2, 55.2, 27.8, 55.1]], ["C", [27.4, 55, 27.1, 55.1]], ["C", [26.6, 55.3, 26, 55.35]], ["C", [25.4, 55.4, 24.9, 55.6]], ["C", [20.5, 57, 18.4, 61.1]], ["C", [18.2, 61.5, 17.95, 62.15]], ["C", [17.7, 62.8, 17.6, 63.45]], ["C", [17.5, 64.1, 17.65, 64.7]], ["C", [17.8, 65.3, 18.3, 65.7]], ["C", [19.1, 66.2, 20.5, 66.2]], ["C", [21.9, 66.2, 23.2, 66.2]], ["L", [34.3, 66.2]], ["C", [35.7, 66.2, 37.25, 66.15]], ["C", [38.8, 66.1, 39.3, 65.3]], ["C", [40, 64.3, 39.45, 62.9]], ["C", [38.9, 61.4, 38.6, 60.75]], ["C", [37.2, 58, 34.9, 56.6]], ["M", [37.15, 45.7]], ["C", [40.8, 46.9, 43.7, 48.9]], ["C", [44.6, 49.5, 45.5, 50.3]], ["C", [46.4, 51, 47.1, 51.8]], ["C", [47.4, 52.35, 47.9, 52.65]], ["C", [48.7, 53.7, 49.4, 54.85]], ["C", [50.1, 56, 50.9, 57.2]], ["C", [51.4, 58.1, 51.75, 59.05]], ["C", [52.1, 60, 52.5, 61.1]], ["C", [53, 62.4, 53.3, 63.8]], ["C", [53.6, 65.2, 54, 66.6]], ["C", [54.2, 67.4, 54.15, 68.35]], ["C", [54.1, 69.3, 54.3, 70.1]], ["L", [54.3, 71.2]], ["C", [54.5, 72, 54.3, 73]], ["C", [54.1, 74, 53.6, 74.3]], ["C", [53.1, 74.7, 52.15, 74.85]], ["C", [51.2, 75, 50.05, 75.05]], ["C", [48.9, 75.1, 47.75, 75.05]], ["C", [46.6, 75, 45.7, 75]], ["L", [21.3, 75]], ["C", [20.6, 75, 19.95, 75]], ["C", [19.3, 75, 18.8, 75.2]], ["C", [18, 75.6, 17.8, 75.95]], ["C", [17.6, 76.2, 17.4, 76.75]], ["C", [17.2, 77.3, 17.3, 77.75]], ["C", [17.5, 78.4, 17.55, 78.95]], ["C", [17.6, 79.5, 17.8, 80.05]], ["C", [18.6, 82.45, 19.75, 84]], ["C", [20.9, 85.6, 22.9, 86.8]], ["C", [23.7, 87.3, 24.55, 87.45]], ["C", [25.4, 87.6, 26.3, 87.9]], ["C", [27.1, 88.1, 28.5, 88.15]], ["C", [29.9, 88.25, 30.9, 88.1]], ["L", [31.8, 88.1]], ["C", [32.8, 87.9, 33.65, 87.65]], ["C", [34.5, 87.4, 35.3, 87.1]], ["C", [36.3, 86.55, 37.55, 85.8]], ["C", [38.8, 85, 39.4, 84.15]], ["C", [39.9, 83.5, 40.45, 82.85]], ["C", [41, 82.15, 41.8, 81.9]], ["C", [42.8, 81.4, 44.35, 81.45]], ["C", [45.9, 81.5, 47.2, 81.5]], ["C", [47.8, 81.5, 48.45, 81.45]], ["C", [49.1, 81.4, 49.6, 81.6]], ["L", [50.6, 81.6]], ["C", [51.6, 81.8, 52, 82.05]], ["C", [52.4, 82.25, 52.45, 83]], ["C", [52.5, 83.7, 52.3, 84.15]], ["C", [51.8, 85.6, 51.2, 86.65]], ["C", [50.6, 87.8, 49.8, 88.9]], ["C", [47.6, 92.2, 44.8, 94.2]], ["C", [42, 96.2, 37.8, 97.6]], ["C", [36.7, 98, 35.6, 98.1]], ["C", [34.5, 98.2, 33.3, 98.5]], ["C", [32.9, 98.55, 32.45, 98.55]], ["C", [32, 98.5, 31.6, 98.55]], ["L", [30.5, 98.55]], ["C", [30, 98.75, 29.35, 98.7]], ["C", [28.7, 98.65, 28.2, 98.55]], ["C", [27.4, 98.5, 26.8, 98.55]], ["C", [26.2, 98.65, 25.5, 98.5]], ["C", [25, 98.3, 24.4, 98.3]], ["C", [23.8, 98.3, 23.3, 98.1]], ["C", [22.2, 97.9, 21.1, 97.65]], ["C", [20, 97.4, 19.1, 96.85]], ["C", [18, 96.45, 17.05, 96.15]], ["C", [16.1, 95.8, 15.3, 95.3]], ["C", [12.1, 93.3, 9.6, 90.6]], ["C", [7.1, 88, 5.5, 84.45]], ["C", [5, 83.4, 4.7, 82.2]], ["C", [4.4, 81.1, 3.9, 79.85]], ["C", [3.8, 79.5, 3.8, 79.15]], ["C", [3.8, 78.8, 3.7, 78.4]], ["C", [3.3, 77.2, 3.2, 75.75]], ["C", [3.1, 74.4, 3, 73]], ["C", [3, 72.5, 2.95, 71.9]], ["C", [2.9, 71.3, 3, 70.8]], ["L", [3, 69.6]], ["L", [3.3, 67.2]], ["C", [3.7, 65.5, 4, 63.9]], ["C", [4.3, 62.3, 4.9, 60.95]], ["C", [9.2, 50.55, 19.5, 46.25]], ["C", [20.9, 45.65, 22.35, 45.35]], ["C", [23.8, 45.1, 25.4, 44.7]], ["C", [26.2, 44.6, 26.9, 44.6]], ["C", [27.6, 44.6, 28.4, 44.5]], ["C", [33.5, 44.4, 37.15, 45.7]]];
__motifs["f"] = [["M", [19.8, 26.9]], ["C", [20.6, 26.6, 21.5, 26.55]], ["C", [22.4, 26.5, 23.3, 26.3]], ["C", [23.6, 26.2, 24.2, 26.3]], ["C", [24.8, 26.4, 25, 26.2]], ["C", [25.95, 26.2, 27.05, 26.2]], ["C", [28.2, 26.2, 29.35, 26.3]], ["C", [30.5, 26.4, 31.4, 26.65]], ["C", [32.3, 26.9, 32.6, 27.4]], ["C", [33.2, 28.2, 33.2, 29.65]], ["C", [33.2, 31.1, 33.2, 32.4]], ["C", [33.2, 33.4, 33.15, 34.4]], ["C", [33.1, 35.4, 32.7, 35.9]], ["C", [32.3, 36.5, 31.7, 36.65]], ["C", [31.1, 36.8, 30.35, 36.8]], ["C", [29.6, 36.8, 28.85, 36.75]], ["C", [28.15, 36.7, 27.4, 36.8]], ["C", [25.6, 37.2, 24.6, 37.75]], ["C", [23.6, 38.25, 23, 40]], ["C", [22.8, 40.25, 22.85, 40.55]], ["C", [22.9, 40.8, 22.8, 41.1]], ["C", [22.7, 41.5, 22.6, 42.3]], ["C", [22.5, 43.1, 22.6, 43.6]], ["C", [22.8, 44.3, 23.1, 44.8]], ["C", [23.4, 45.3, 24, 45.6]], ["C", [25, 46.1, 26.4, 45.9]], ["C", [27.85, 45.7, 29, 45.9]], ["C", [29.5, 46, 29.85, 45.95]], ["C", [30.2, 45.9, 30.6, 46]], ["C", [31.5, 46.4, 31.9, 46.9]], ["C", [32.15, 47.2, 32.25, 47.85]], ["C", [32.3, 48.5, 32.4, 49.25]], ["C", [32.5, 50, 32.45, 50.7]], ["C", [32.4, 51.5, 32.3, 51.9]], ["C", [32.25, 52.3, 32.3, 52.65]], ["C", [32.4, 53, 32.25, 53.4]], ["C", [32.05, 54.6, 31, 54.85]], ["C", [30.2, 55.3, 29.1, 55.25]], ["C", [28.05, 55.2, 26.9, 55.2]], ["C", [26.6, 55.2, 26.2, 55.2]], ["C", [25.85, 55.2, 25.5, 55.3]], ["L", [24.7, 55.3]], ["C", [23, 55.7, 22.6, 57.5]], ["C", [22.4, 58.1, 22.5, 58.9]], ["C", [22.6, 59.7, 22.6, 60.5]], ["L", [22.6, 90.8]], ["C", [22.6, 91.4, 22.65, 92.05]], ["C", [22.7, 92.7, 22.5, 93.2]], ["L", [22.5, 94.3]], ["C", [22.5, 95.9, 22, 96.55]], ["C", [21.85, 96.9, 21.3, 97.05]], ["C", [20.8, 97.2, 20.3, 97.4]], ["L", [19.8, 97.4]], ["C", [19.3, 97.5, 18.7, 97.45]], ["C", [18.1, 97.4, 17.65, 97.4]], ["L", [13.2, 97.4]], ["C", [12.5, 97.4, 11.75, 97.45]], ["C", [11, 97.5, 10.5, 97.3]], ["C", [9.3, 97, 8.9, 96.3]], ["C", [8.6, 95.8, 8.55, 95]], ["C", [8.5, 94.2, 8.5, 93.4]], ["L", [8.5, 60.2]], ["C", [8.5, 58.5, 8.3, 57.25]], ["C", [8.1, 56, 6.9, 55.5]], ["C", [5.8, 54.95, 4.2, 55.25]], ["C", [2.6, 55.5, 1.5, 54.95]], ["C", [0.4, 54.5, 0.1, 53.3]], ["C", [-0.1, 52.75, -0.05, 52.1]], ["C", [0, 51.4, 0, 50.65]], ["C", [0, 48.9, 0.2, 47.7]], ["C", [0.4, 46.45, 1.9, 46]], ["C", [2.7, 45.8, 3.6, 45.8]], ["C", [4.5, 45.8, 5.3, 45.8]], ["C", [6.2, 45.8, 6.9, 45.65]], ["C", [7.6, 45.5, 8, 44.9]], ["C", [8.7, 43.9, 8.55, 42.3]], ["C", [8.4, 40.8, 8.7, 39.4]], ["C", [8.8, 39, 8.85, 38.6]], ["C", [8.9, 38.15, 9, 37.7]], ["C", [9.4, 36.3, 9.8, 35.15]], ["C", [10.2, 33.95, 10.9, 33]], ["C", [12.3, 30.6, 14.6, 29.15]], ["C", [16.9, 27.7, 19.8, 26.9]]];
__motifs["g"] = [["M", [20.9, 59.3]], ["C", [19.5, 61.5, 18.6, 64.2]], ["C", [18.4, 64.7, 18.4, 65]], ["C", [18.4, 65.3, 18.3, 65.8]], ["C", [18, 66.9, 17.9, 69]], ["C", [17.8, 71.1, 18.1, 72.4]], ["L", [18.1, 73.4]], ["C", [18.3, 74.2, 18.4, 74.95]], ["C", [18.5, 75.7, 18.7, 76.5]], ["C", [19.6, 79.1, 20.9, 81.05]], ["C", [22.2, 83, 24.5, 84.2]], ["C", [25.5, 84.7, 27.3, 85.2]], ["C", [28, 85.2, 28.4, 85.3]], ["C", [28.6, 85.3, 29, 85.35]], ["C", [29.4, 85.4, 29.6, 85.3]], ["L", [30.6, 85.3]], ["C", [31.5, 85.1, 32.3, 85]], ["C", [33.1, 84.9, 33.9, 84.5]], ["C", [36.4, 83.5, 37.95, 81.7]], ["C", [39.5, 79.9, 40.5, 77.4]], ["C", [40.9, 76.5, 41.2, 75.1]], ["C", [41.5, 73.7, 41.6, 72.15]], ["C", [41.7, 70.6, 41.65, 69.1]], ["C", [41.6, 67.6, 41.3, 66.4]], ["C", [41.1, 66, 41.15, 65.75]], ["C", [41.2, 65.5, 41.1, 65.1]], ["C", [40.9, 64.4, 40.7, 63.7]], ["C", [40.5, 63, 40.2, 62.4]], ["C", [38.8, 58.9, 36.2, 57]], ["C", [33.6, 55.1, 28.6, 55.1]], ["C", [28.4, 55.3, 28.05, 55.25]], ["C", [27.7, 55.2, 27.4, 55.3]], ["C", [26.7, 55.5, 26.1, 55.65]], ["C", [25.5, 55.8, 24.9, 56]], ["C", [22.3, 57.1, 20.9, 59.3]], ["M", [45.7, 45.9]], ["L", [50.8, 45.9]], ["C", [51.9, 45.9, 52.75, 45.95]], ["C", [53.6, 46, 54.2, 46.5]], ["C", [54.9, 47, 54.95, 48.15]], ["C", [55, 49.3, 55, 50.5]], ["L", [55, 93.2]], ["C", [55, 94, 54.95, 94.75]], ["C", [54.9, 95.5, 54.9, 96.3]], ["C", [54.8, 97.1, 54.75, 97.75]], ["C", [54.7, 98.4, 54.6, 99.2]], ["C", [54.2, 100.65, 53.95, 101.85]], ["C", [53.7, 103.1, 53.2, 104.2]], ["C", [51.5, 108, 48.85, 110.5]], ["C", [46.2, 113, 42.4, 114.6]], ["C", [41.3, 115.1, 40.2, 115.4]], ["C", [39.1, 115.7, 37.9, 116]], ["C", [36.8, 116.3, 35.7, 116.4]], ["C", [34.6, 116.5, 33.5, 116.7]], ["C", [33.1, 116.7, 32.7, 116.75]], ["C", [32.3, 116.8, 31.8, 116.8]], ["C", [31.4, 116.9, 30.9, 116.85]], ["C", [30.4, 116.8, 29.9, 116.9]], ["C", [29.4, 117, 28.6, 117]], ["C", [27.8, 117, 27.3, 116.9]], ["C", [26.8, 116.9, 26.4, 116.9]], ["C", [26, 116.9, 25.6, 116.8]], ["C", [24.8, 116.6, 23.95, 116.6]], ["C", [23.1, 116.6, 22.4, 116.4]], ["C", [22.2, 116.3, 21.9, 116.3]], ["C", [21.6, 116.3, 21.4, 116.2]], ["C", [20.4, 116, 19.45, 115.75]], ["C", [18.5, 115.5, 17.6, 115.1]], ["C", [13.8, 113.5, 10.8, 111.05]], ["C", [7.8, 108.6, 6.4, 104.5]], ["C", [6.2, 104.2, 6.2, 103.9]], ["C", [6.2, 103.6, 6.1, 103.4]], ["C", [5.8, 102.1, 6.35, 101.45]], ["C", [6.9, 100.8, 7.9, 100.65]], ["C", [8.9, 100.4, 10.15, 100.45]], ["C", [11.4, 100.5, 12.5, 100.5]], ["L", [15.9, 100.5]], ["C", [16.4, 100.5, 16.75, 100.55]], ["C", [17.1, 100.65, 17.6, 100.65]], ["C", [19.2, 101, 19.6, 101.65]], ["C", [20, 102.3, 20.8, 103.4]], ["C", [21.1, 103.8, 21.7, 104.4]], ["C", [21.8, 104.6, 21.9, 104.7]], ["C", [22, 104.8, 22.1, 105]], ["C", [22.9, 105.6, 23.8, 106.1]], ["C", [24.7, 106.6, 25.8, 107]], ["C", [26.5, 107.2, 27.2, 107.25]], ["C", [27.9, 107.3, 28.7, 107.5]], ["L", [29.8, 107.5]], ["C", [30.5, 107.7, 31.6, 107.55]], ["C", [32.7, 107.4, 33.3, 107.2]], ["C", [33.8, 107, 34.15, 107]], ["C", [34.5, 107, 34.9, 106.85]], ["C", [37, 105.9, 38.4, 104.4]], ["C", [39.8, 102.9, 40.7, 100.9]], ["C", [40.9, 100.3, 41, 99.7]], ["C", [41.1, 99.1, 41.3, 98.4]], ["C", [41.5, 97.5, 41.55, 96.45]], ["C", [41.6, 95.4, 41.6, 94.35]], ["C", [41.6, 93.9, 41.65, 93.5]], ["C", [41.7, 93.1, 41.6, 92.8]], ["C", [41.4, 92.3, 41.45, 91.9]], ["C", [41.5, 91.5, 41.3, 91.1]], ["C", [41.2, 90.9, 41.05, 90.8]], ["C", [40.9, 90.7, 40.7, 90.5]], ["C", [39.8, 90.4, 39.25, 90.9]], ["C", [38.7, 91.4, 38.2, 91.8]], ["C", [37.3, 92.5, 36.4, 93.1]], ["C", [35.5, 93.7, 34.4, 94.2]], ["C", [33.3, 94.7, 32.2, 95]], ["C", [31.1, 95.3, 29.9, 95.6]], ["C", [29.3, 95.7, 28.75, 95.75]], ["C", [28.2, 95.8, 27.7, 95.9]], ["C", [27.2, 96, 26.1, 96]], ["C", [25, 96, 24.5, 95.9]], ["L", [23.7, 95.9]], ["C", [23.4, 95.8, 23.05, 95.8]], ["C", [22.7, 95.8, 22.3, 95.7]], ["C", [20.9, 95.4, 19.6, 95.15]], ["C", [18.3, 94.9, 17.2, 94.4]], ["C", [12.9, 92.7, 10.25, 89.65]], ["C", [7.6, 86.6, 5.8, 82.3]], ["C", [5.3, 81.2, 5.1, 80]], ["C", [4.9, 78.8, 4.5, 77.6]], ["C", [4.5, 77.1, 4.4, 76.8]], ["C", [4.2, 76, 4.2, 75.05]], ["C", [4.2, 74.1, 4, 73.3]], ["C", [3.9, 72.8, 3.9, 72.35]], ["C", [3.9, 71.9, 3.9, 71.45]], ["C", [3.8, 70.9, 3.8, 70.15]], ["C", [3.8, 69.4, 3.9, 68.9]], ["L", [3.9, 67.9]], ["C", [4, 67.5, 3.95, 67.1]], ["C", [3.9, 66.7, 4.1, 66.3]], ["C", [4.3, 65.3, 4.4, 64.35]], ["C", [4.5, 63.4, 4.7, 62.4]], ["C", [5.3, 60.4, 5.95, 58.6]], ["C", [6.6, 56.85, 7.6, 55.2]], ["C", [8.1, 54.2, 8.75, 53.35]], ["C", [9.4, 52.5, 10.1, 51.6]], ["C", [10.4, 51.1, 10.95, 50.65]], ["C", [11.5, 50.1, 12, 49.7]], ["L", [12.6, 49.1]], ["C", [13.1, 48.7, 13.6, 48.35]], ["C", [14.1, 48, 14.6, 47.7]], ["C", [15.9, 46.9, 17.3, 46.3]], ["C", [18.7, 45.7, 20.4, 45.2]], ["C", [21.2, 44.9, 22.05, 44.85]], ["C", [22.9, 44.8, 23.7, 44.6]], ["C", [24.1, 44.5, 24.8, 44.6]], ["C", [25.5, 44.7, 25.7, 44.5]], ["C", [28.9, 44.4, 31.45, 45.1]], ["C", [34, 45.8, 36, 47.1]], ["C", [36.3, 47.3, 36.6, 47.55]], ["C", [36.9, 47.8, 37.3, 48.1]], ["C", [37.9, 48.6, 38.4, 49.1]], ["C", [38.9, 49.6, 39.6, 50]], ["C", [39.8, 50.1, 40.15, 50.2]], ["C", [40.5, 50.3, 40.7, 50.1]], ["C", [41.2, 49.9, 41.3, 49.4]], ["C", [41.4, 48.9, 41.6, 48.4]], ["C", [41.8, 47.9, 41.95, 47.35]], ["C", [42.1, 46.8, 42.5, 46.45]], ["C", [43.1, 46, 43.95, 45.95]], ["C", [44.8, 45.9, 45.7, 45.9]]];
__motifs["h"] = [["M", [46.85, 47.5]], ["C", [49, 48.9, 50.4, 51.05]], ["C", [51.7, 53.2, 52.65, 55.8]], ["C", [52.85, 56.6, 53, 57.45]], ["C", [53.15, 58.3, 53.3, 59.1]], ["C", [53.5, 60, 53.5, 61]], ["C", [53.5, 62, 53.7, 63]], ["L", [53.7, 64.1]], ["C", [53.9, 64.9, 53.8, 65.85]], ["C", [53.7, 66.8, 53.7, 67.6]], ["L", [53.7, 90.3]], ["C", [53.7, 92, 53.8, 93.9]], ["C", [53.9, 95.8, 53.15, 96.8]], ["C", [52.65, 97.4, 51.5, 97.45]], ["C", [50.45, 97.5, 49.3, 97.5]], ["L", [44.3, 97.5]], ["C", [42.7, 97.5, 41.6, 97.35]], ["C", [40.5, 97.2, 40, 96.1]], ["C", [39.7, 95.5, 39.7, 94.65]], ["C", [39.7, 93.8, 39.7, 93]], ["L", [39.7, 71.3]], ["C", [39.7, 67.1, 39.3, 63.55]], ["C", [38.9, 60, 36.8, 58]], ["C", [35.4, 56.6, 33.4, 56]], ["C", [33, 55.9, 32.75, 55.9]], ["C", [32.5, 55.9, 32.15, 55.8]], ["C", [31.7, 55.7, 31.05, 55.6]], ["C", [30.4, 55.5, 30.05, 55.7]], ["C", [29.4, 55.8, 28.75, 55.8]], ["C", [28.15, 55.8, 27.55, 56]], ["C", [25.25, 56.6, 23.55, 57.8]], ["C", [21.75, 59.2, 20.9, 61.55]], ["C", [20, 63.9, 19.75, 66.85]], ["C", [19.45, 69.8, 19.5, 73.1]], ["C", [19.55, 76.4, 19.55, 79.5]], ["L", [19.55, 91.6]], ["C", [19.55, 92.9, 19.55, 94.35]], ["C", [19.55, 95.8, 19.05, 96.6]], ["C", [18.75, 97, 18.25, 97.15]], ["C", [17.7, 97.3, 17.25, 97.5]], ["C", [16.65, 97.7, 15.85, 97.6]], ["C", [15.15, 97.5, 14.4, 97.5]], ["C", [13.55, 97.5, 12.3, 97.55]], ["C", [11.15, 97.6, 9.9, 97.6]], ["C", [8.7, 97.6, 7.7, 97.45]], ["C", [6.7, 97.3, 6.2, 96.9]], ["C", [5.6, 96.4, 5.55, 95.35]], ["C", [5.5, 94.3, 5.5, 93.2]], ["L", [5.5, 33.1]], ["C", [5.5, 31.8, 5.4, 30]], ["C", [5.3, 28.2, 5.8, 27.4]], ["C", [6.4, 26.7, 7.4, 26.4]], ["C", [7.6, 26.3, 7.8, 26.35]], ["C", [8, 26.4, 8.2, 26.3]], ["L", [15.05, 26.3]], ["C", [16, 26.3, 17, 26.3]], ["C", [17.9, 26.3, 18.55, 26.8]], ["C", [19.25, 27.2, 19.45, 28.5]], ["C", [19.45, 29, 19.5, 29.45]], ["C", [19.55, 29.9, 19.55, 30.4]], ["L", [19.55, 45.5]], ["C", [19.55, 46.2, 19.5, 47.1]], ["C", [19.45, 48, 19.55, 48.85]], ["C", [19.65, 49.7, 19.95, 50.25]], ["C", [20.3, 50.8, 21.05, 50.8]], ["C", [21.25, 50.6, 21.45, 50.6]], ["C", [21.65, 50.6, 21.85, 50.4]], ["C", [22.5, 49.9, 23.15, 49.25]], ["C", [23.75, 48.6, 24.5, 48.1]], ["C", [25.65, 47.3, 26.8, 46.7]], ["C", [28.05, 46.1, 29.45, 45.5]], ["C", [29.85, 45.3, 30.2, 45.3]], ["C", [30.6, 45.3, 31.1, 45.1]], ["C", [32.15, 44.8, 33.2, 44.7]], ["C", [34.35, 44.6, 35.65, 44.6]], ["C", [36.15, 44.6, 36.55, 44.6]], ["C", [37, 44.6, 37.55, 44.7]], ["L", [38.15, 44.7]], ["C", [38.8, 44.8, 39.45, 44.9]], ["C", [40.15, 45, 40.8, 45.1]], ["C", [42.55, 45.6, 44, 46.15]], ["C", [45.4, 46.7, 46.85, 47.5]]];
__motifs["i"] = [["M", [9.15, 45.9]], ["L", [14.1, 45.9]], ["C", [14.7, 45.9, 15.5, 45.85]], ["C", [16.2, 45.8, 16.7, 45.9]], ["L", [17.55, 45.9]], ["C", [18.1, 46.1, 18.6, 46.2]], ["C", [19.15, 46.3, 19.45, 46.8]], ["C", [19.8, 47.3, 19.85, 48.2]], ["C", [19.9, 49.1, 19.9, 50.1]], ["L", [19.9, 92]], ["C", [19.9, 94, 19.8, 95.4]], ["C", [19.75, 96.8, 18, 97.3]], ["C", [17.45, 97.5, 16.7, 97.45]], ["C", [16, 97.4, 15.25, 97.4]], ["L", [9.6, 97.4]], ["C", [8.7, 97.4, 7.85, 97.3]], ["C", [7.05, 97.2, 6.6, 96.7]], ["C", [6, 96, 5.95, 94.95]], ["C", [5.9, 93.9, 5.9, 92.7]], ["L", [5.9, 50.5]], ["C", [5.9, 49.5, 5.9, 48.5]], ["C", [5.9, 47.5, 6.3, 46.9]], ["C", [6.95, 46.2, 8, 46]], ["C", [8.2, 45.9, 8.55, 45.95]], ["C", [8.95, 46, 9.15, 45.9]], ["M", [19.25, 26.9]], ["C", [19.9, 27.7, 19.9, 29.3]], ["C", [19.9, 30.9, 19.9, 32.4]], ["C", [19.9, 33.75, 19.9, 35.15]], ["C", [19.9, 36.5, 19.25, 37.05]], ["C", [18.6, 37.55, 17.7, 37.65]], ["C", [16.7, 37.75, 15.65, 37.75]], ["L", [10, 37.75]], ["C", [8.95, 37.75, 8.05, 37.65]], ["C", [7.25, 37.55, 6.6, 37.05]], ["C", [6.2, 36.7, 6.05, 35.9]], ["C", [5.9, 35.05, 5.85, 33.95]], ["C", [5.8, 32.9, 5.85, 31.85]], ["C", [5.9, 30.7, 5.9, 29.9]], ["C", [5.9, 29.1, 5.95, 28.45]], ["C", [6, 27.8, 6.3, 27.35]], ["C", [6.5, 26.9, 6.85, 26.7]], ["C", [7.25, 26.5, 7.6, 26.3]], ["C", [7.8, 26.3, 8.1, 26.25]], ["C", [8.4, 26.2, 8.6, 26.2]], ["L", [15.9, 26.2]], ["C", [16.95, 26.2, 17.8, 26.3]], ["C", [18.7, 26.4, 19.25, 26.9]]];
__motifs["j"] = [["M", [19.9, 26.7]], ["C", [20.8, 27.45, 20.8, 29.3]], ["C", [20.8, 31.15, 20.8, 32.7]], ["C", [20.8, 33.25, 20.85, 33.85]], ["C", [20.9, 34.4, 20.7, 34.95]], ["L", [20.7, 35.55]], ["C", [20.5, 36.6, 20, 37.15]], ["C", [19.4, 37.65, 18.45, 37.7]], ["C", [17.5, 37.75, 16.4, 37.75]], ["L", [10.7, 37.75]], ["C", [9.65, 37.75, 8.8, 37.65]], ["C", [7.9, 37.55, 7.35, 36.95]], ["C", [7, 36.5, 6.85, 35.7]], ["C", [6.7, 34.8, 6.7, 33.9]], ["C", [6.7, 32.95, 6.75, 31.9]], ["C", [6.8, 30.9, 6.8, 30.1]], ["C", [6.8, 29.35, 6.85, 28.5]], ["C", [6.9, 27.7, 7.2, 27.25]], ["C", [7.35, 26.9, 7.7, 26.7]], ["C", [8.1, 26.5, 8.4, 26.3]], ["C", [8.6, 26.3, 8.85, 26.25]], ["C", [9.1, 26.2, 9.3, 26.2]], ["L", [16.3, 26.2]], ["C", [17.4, 26.2, 18.35, 26.2]], ["C", [19.3, 26.2, 19.9, 26.7]], ["M", [-1.4, 105.1]], ["C", [-0.95, 104.05, 0.4, 104.1]], ["C", [1.7, 104.15, 3, 103.75]], ["C", [5.9, 103, 6.6, 99.95]], ["C", [6.7, 99.55, 6.65, 99.15]], ["C", [6.6, 98.7, 6.7, 98.25]], ["C", [6.9, 97.65, 6.85, 96.9]], ["C", [6.8, 96.25, 6.8, 95.55]], ["L", [6.8, 51.35]], ["C", [6.8, 50.25, 6.75, 48.95]], ["C", [6.7, 47.75, 7.2, 46.9]], ["C", [7.55, 46.25, 8.8, 45.95]], ["C", [9, 45.95, 9.4, 46]], ["C", [9.8, 46.05, 10, 45.85]], ["L", [15, 45.85]], ["C", [15.6, 45.85, 16.3, 45.8]], ["C", [17, 45.75, 17.5, 45.95]], ["L", [18.4, 45.95]], ["C", [18.9, 46.15, 19.45, 46.25]], ["C", [20, 46.35, 20.2, 46.8]], ["C", [20.5, 47.35, 20.65, 48.15]], ["C", [20.8, 48.9, 20.85, 49.95]], ["C", [20.9, 50.9, 20.85, 51.95]], ["C", [20.8, 52.9, 20.8, 53.75]], ["L", [20.8, 95.55]], ["C", [20.8, 99.45, 20.65, 103.05]], ["C", [20.5, 106.75, 19, 109.1]], ["C", [17.7, 111.1, 16, 112.45]], ["C", [14.3, 113.75, 11.8, 114.55]], ["C", [10.9, 114.85, 10, 114.95]], ["C", [9.1, 115.05, 8.2, 115.2]], ["C", [7.45, 115.3, 6.8, 115.3]], ["C", [6.1, 115.3, 5.35, 115.4]], ["L", [4.3, 115.4]], ["C", [3.7, 115.6, 2.45, 115.6]], ["C", [1.15, 115.6, 0.7, 115.4]], ["C", [-0.85, 115.15, -1.4, 114.25]], ["C", [-1.6, 113.75, -1.65, 113.05]], ["C", [-1.7, 112.35, -1.7, 111.5]], ["C", [-1.7, 110.85, -1.75, 109.95]], ["C", [-1.8, 109, -1.8, 108.15]], ["C", [-1.8, 107.2, -1.7, 106.45]], ["C", [-1.6, 105.65, -1.4, 105.1]]];
__motifs["k"] = [["M", [50.3, 45.9]], ["L", [51.4, 45.9]], ["C", [51.9, 46.1, 52.4, 46.15]], ["C", [52.9, 46.2, 53.15, 46.55]], ["C", [53.3, 46.9, 53.15, 47.4]], ["C", [53.05, 47.9, 52.8, 48.1]], ["C", [52.2, 49.1, 51.3, 49.85]], ["C", [50.4, 50.6, 49.6, 51.4]], ["C", [48.95, 52.1, 48.25, 52.75]], ["C", [47.6, 53.5, 46.85, 54.1]], ["C", [46.3, 54.5, 45.95, 54.9]], ["C", [45.6, 55.4, 45.1, 55.8]], ["C", [44.6, 56.1, 44.2, 56.6]], ["C", [43.8, 57.1, 43.3, 57.5]], ["L", [39.5, 61.3]], ["C", [38.8, 61.9, 38.25, 62.45]], ["C", [37.7, 63, 37.2, 63.8]], ["C", [37, 64.1, 36.8, 64.55]], ["C", [36.6, 65, 36.8, 65.5]], ["C", [37, 66.6, 37.55, 67.3]], ["C", [38.1, 68, 38.6, 68.8]], ["C", [39.4, 69.9, 40.05, 71]], ["C", [40.7, 72.1, 41.5, 73.2]], ["L", [52, 89.1]], ["C", [53.05, 90.5, 53.95, 91.9]], ["C", [54.9, 93.3, 55.7, 94.7]], ["C", [56, 95.2, 56.05, 95.9]], ["C", [56.1, 96.55, 55.6, 97]], ["C", [55.2, 97.2, 54.8, 97.2]], ["C", [54.4, 97.2, 53.9, 97.4]], ["C", [53.5, 97.5, 53.05, 97.45]], ["C", [52.5, 97.4, 52, 97.4]], ["L", [48.1, 97.4]], ["C", [46.5, 97.4, 44.3, 97.45]], ["C", [42.1, 97.5, 41, 97]], ["C", [39.9, 96.45, 39.1, 95.15]], ["C", [38.3, 93.8, 37.6, 92.7]], ["C", [35.9, 90, 34.2, 87.25]], ["C", [32.5, 84.5, 30.8, 81.8]], ["C", [30, 80.5, 29.25, 79.2]], ["C", [28.5, 77.85, 27.6, 76.7]], ["C", [27.4, 76.4, 26.9, 75.9]], ["C", [26.4, 75.4, 25.8, 75.6]], ["C", [24.9, 75.75, 24.45, 76.2]], ["C", [24, 76.6, 23.5, 77.1]], ["C", [22.7, 77.7, 22, 78.5]], ["C", [21.3, 79.3, 20.9, 80.4]], ["C", [20.7, 81.2, 20.7, 82.15]], ["C", [20.7, 83.1, 20.7, 83.95]], ["L", [20.7, 90.2]], ["C", [20.7, 90.9, 20.75, 91.75]], ["C", [20.8, 92.6, 20.8, 93.5]], ["C", [20.8, 94.4, 20.7, 95.15]], ["C", [20.6, 95.9, 20.3, 96.3]], ["C", [19.9, 96.9, 19.05, 97.15]], ["C", [18.2, 97.4, 17.1, 97.45]], ["C", [16, 97.5, 14.8, 97.45]], ["C", [13.55, 97.4, 12.7, 97.4]], ["C", [11.55, 97.4, 10.3, 97.45]], ["C", [9, 97.5, 8.2, 97.2]], ["C", [6.9, 96.7, 6.8, 95.4]], ["C", [6.7, 94.1, 6.7, 92.35]], ["L", [6.7, 31.5]], ["C", [6.7, 30.4, 6.65, 29.2]], ["C", [6.6, 28, 7, 27.3]], ["C", [7.35, 26.6, 8.4, 26.3]], ["C", [8.6, 26.3, 8.85, 26.25]], ["C", [9.1, 26.2, 9.3, 26.2]], ["L", [16.6, 26.2]], ["C", [17.7, 26.2, 18.6, 26.3]], ["C", [19.5, 26.4, 20, 26.9]], ["C", [20.8, 27.75, 20.75, 29.8]], ["C", [20.7, 31.8, 20.7, 33.5]], ["L", [20.7, 56.5]], ["C", [20.7, 57.2, 20.6, 58]], ["C", [20.5, 58.8, 20.7, 59.5]], ["L", [20.7, 60.4]], ["C", [20.9, 60.9, 21, 61.45]], ["C", [21.1, 62, 21.6, 62.2]], ["C", [21.9, 62.4, 22.4, 62.25]], ["C", [22.9, 62.1, 23.1, 61.9]], ["C", [24.1, 61.15, 24.85, 60.3]], ["C", [25.6, 59.4, 26.4, 58.6]], ["C", [27.2, 57.8, 28.15, 56.9]], ["C", [29, 56.1, 29.7, 55.1]], ["C", [30, 54.85, 30.4, 54.5]], ["C", [30.9, 54, 31.4, 53.45]], ["C", [31.9, 52.85, 32.4, 52.4]], ["L", [34.7, 50.1]], ["C", [34.9, 49.7, 35.25, 49.45]], ["C", [35.6, 49.2, 35.9, 48.8]], ["C", [36.7, 47.8, 37.65, 47.05]], ["C", [38.6, 46.3, 40, 46]], ["C", [40.55, 45.9, 41.4, 45.9]], ["C", [41.8, 45.8, 42.2, 45.85]], ["C", [42.65, 45.9, 43.1, 45.9]], ["L", [46.4, 45.9]], ["C", [47.2, 45.9, 48.35, 45.8]], ["C", [49.5, 45.7, 50.3, 45.9]]];
__motifs["l"] = [["M", [19.9, 31.1]], ["L", [19.9, 91.2]], ["C", [19.9, 92.35, 19.95, 93.95]], ["C", [20, 95.5, 19.55, 96.3]], ["C", [19.05, 97.1, 17.7, 97.4]], ["C", [17.15, 97.6, 16.35, 97.5]], ["C", [15.65, 97.4, 14.95, 97.4]], ["L", [10.1, 97.4]], ["C", [9.05, 97.4, 8.1, 97.3]], ["C", [7.25, 97.2, 6.6, 96.7]], ["C", [6, 96.2, 5.95, 95.15]], ["C", [5.9, 94.1, 5.9, 93]], ["L", [5.9, 33]], ["C", [5.9, 31.7, 5.85, 29.85]], ["C", [5.8, 28.1, 6.3, 27.3]], ["C", [6.5, 26.9, 6.85, 26.7]], ["C", [7.25, 26.5, 7.6, 26.3]], ["C", [7.8, 26.3, 8.1, 26.25]], ["C", [8.4, 26.2, 8.6, 26.2]], ["L", [15.9, 26.2]], ["C", [16.95, 26.2, 17.8, 26.3]], ["C", [18.7, 26.4, 19.25, 26.9]], ["C", [19.8, 27.6, 19.85, 28.75]], ["C", [19.9, 29.85, 19.9, 31.1]]];
__motifs["m"] = [["M", [84.1, 56.6]], ["C", [84.3, 57.5, 84.45, 58.45]], ["C", [84.55, 59.1, 84.6, 59.7]], ["C", [84.65, 60.3, 84.75, 60.95]], ["L", [84.75, 61.9]], ["C", [84.85, 62.5, 84.8, 63.3]], ["C", [84.75, 64.1, 84.75, 64.85]], ["L", [84.75, 90.15]], ["C", [84.75, 90.9, 84.8, 92]], ["C", [84.85, 93, 84.8, 94]], ["C", [84.75, 94.9, 84.55, 95.75]], ["C", [84.4, 96.6, 84, 96.9]], ["C", [83.35, 97.4, 82.4, 97.45]], ["C", [81.45, 97.5, 80.35, 97.5]], ["L", [75.05, 97.5]], ["C", [73.65, 97.5, 72.55, 97.3]], ["C", [71.45, 97.1, 71.05, 96.2]], ["C", [70.75, 95.5, 70.75, 94.65]], ["C", [70.75, 93.8, 70.75, 93]], ["L", [70.75, 69.7]], ["C", [70.75, 69.2, 70.8, 68.6]], ["C", [70.85, 68, 70.65, 67.5]], ["L", [70.65, 66.7]], ["C", [70.65, 66.1, 70.65, 65.5]], ["C", [70.65, 64.9, 70.55, 64.3]], ["C", [70.45, 63.9, 70.45, 63.45]], ["C", [70.45, 63, 70.35, 62.6]], ["C", [69.95, 61.1, 69.55, 59.95]], ["C", [69.05, 58.8, 68.15, 57.9]], ["C", [66.75, 56.5, 64.75, 55.9]], ["C", [64.35, 55.8, 64.05, 55.85]], ["C", [63.75, 55.9, 63.4, 55.7]], ["C", [62.95, 55.6, 62.4, 55.55]], ["C", [61.85, 55.5, 61.4, 55.6]], ["C", [60.75, 55.8, 60.15, 55.8]], ["C", [59.55, 55.8, 58.95, 56]], ["C", [56.05, 57, 54.75, 59]], ["C", [53.05, 61.3, 52.7, 64.75]], ["C", [52.35, 68.2, 52.35, 72.3]], ["L", [52.35, 92.9]], ["C", [52.35, 93.9, 52.35, 94.9]], ["C", [52.35, 95.9, 51.85, 96.5]], ["C", [51.35, 97.2, 50.4, 97.35]], ["C", [49.45, 97.5, 48.25, 97.5]], ["L", [42.8, 97.5]], ["C", [41.95, 97.5, 41.05, 97.45]], ["C", [40.25, 97.4, 39.65, 97.2]], ["C", [38.6, 96.7, 38.5, 95.6]], ["C", [38.35, 94.5, 38.35, 93.1]], ["L", [38.35, 68.9]], ["C", [38.35, 66, 38.15, 63.4]], ["C", [37.95, 60.85, 36.8, 59.1]], ["C", [36.05, 57.7, 34.75, 57]], ["C", [33.55, 56.3, 31.75, 55.8]], ["C", [31.35, 55.7, 30.9, 55.75]], ["C", [30.5, 55.8, 30.05, 55.7]], ["C", [28.9, 55.5, 27.95, 55.9]], ["C", [27.75, 55.9, 27.55, 55.95]], ["C", [27.35, 56, 27.15, 56]], ["C", [25.55, 56.5, 24, 57.7]], ["C", [22.4, 58.95, 21.6, 60.45]], ["C", [20.7, 62, 20.35, 63.95]], ["C", [20, 65.9, 19.95, 68.2]], ["C", [19.9, 70.5, 19.9, 73.2]], ["L", [19.9, 92.8]], ["C", [19.9, 93.7, 19.9, 94.6]], ["C", [19.9, 95.5, 19.65, 96.25]], ["C", [19.25, 97.1, 18.1, 97.3]], ["C", [17.05, 97.5, 15.65, 97.5]], ["L", [10.4, 97.5]], ["C", [9.4, 97.5, 8.45, 97.45]], ["C", [7.5, 97.4, 6.95, 97]], ["C", [6, 96.5, 5.95, 95.15]], ["C", [5.9, 93.85, 5.9, 92.3]], ["L", [5.9, 50.25]], ["C", [5.9, 49.1, 5.95, 48.3]], ["C", [6, 47.4, 6.4, 46.8]], ["C", [6.9, 46.25, 8, 46.05]], ["L", [8.6, 46.05]], ["C", [9.1, 45.95, 9.65, 45.95]], ["C", [10.2, 45.95, 10.7, 45.95]], ["L", [14.85, 45.95]], ["C", [15.65, 45.95, 16.35, 46]], ["C", [17.15, 46.05, 17.7, 46.25]], ["C", [18.55, 46.5, 18.8, 47.2]], ["C", [19.05, 47.9, 19.25, 48.8]], ["C", [19.35, 49.1, 19.3, 49.35]], ["C", [19.25, 49.6, 19.45, 49.8]], ["C", [19.55, 50.15, 19.7, 50.3]], ["C", [19.8, 50.45, 20, 50.65]], ["C", [21.25, 50.7, 22, 49.85]], ["C", [22.8, 49, 23.55, 48.55]], ["C", [24.9, 47.5, 26.35, 46.7]], ["C", [27.85, 45.95, 29.55, 45.4]], ["C", [30.4, 45.1, 31.35, 45]], ["C", [32.25, 44.9, 33.25, 44.7]], ["C", [33.55, 44.6, 34.15, 44.65]], ["C", [34.7, 44.7, 34.9, 44.6]], ["C", [38.6, 44.5, 41.45, 45.4]], ["C", [44.25, 46.35, 46.35, 47.9]], ["C", [47.15, 48.55, 47.8, 49.3]], ["C", [48.45, 50.15, 49.25, 50.9]], ["C", [49.45, 51.1, 49.9, 51.45]], ["C", [50.35, 51.8, 50.85, 51.6]], ["C", [51.95, 51.3, 52.95, 50.2]], ["C", [53.95, 49, 54.85, 48.45]], ["C", [56.25, 47.3, 57.85, 46.55]], ["C", [59.45, 45.8, 61.45, 45.1]], ["C", [62.25, 44.9, 63.45, 44.75]], ["C", [64.55, 44.6, 65.8, 44.55]], ["C", [67.05, 44.5, 68.2, 44.6]], ["C", [69.4, 44.7, 70.25, 44.9]], ["C", [70.75, 45, 71.15, 45]], ["C", [71.6, 45, 72.05, 45.2]], ["C", [73.5, 45.6, 74.75, 46.05]], ["C", [76.05, 46.45, 77.15, 47.1]], ["C", [81.35, 49.7, 83.5, 54.75]], ["C", [83.9, 55.6, 84.1, 56.6]]];
__motifs["n"] = [["M", [9.3, 45.9]], ["C", [9.8, 45.9, 10.3, 45.9]], ["L", [14.55, 45.9]], ["C", [15.35, 45.9, 16.05, 45.95]], ["C", [16.85, 46, 17.45, 46.2]], ["C", [18.15, 46.5, 18.4, 47.1]], ["C", [18.65, 47.7, 18.85, 48.55]], ["C", [18.95, 48.9, 18.9, 49.2]], ["C", [18.85, 49.5, 19.05, 49.8]], ["C", [19.25, 50.3, 19.4, 50.4]], ["C", [19.55, 50.55, 19.8, 50.7]], ["C", [20.95, 50.8, 21.65, 49.95]], ["C", [22.3, 49.1, 23.15, 48.6]], ["C", [25.85, 46.6, 29.1, 45.4]], ["C", [30.05, 45.1, 30.95, 45]], ["C", [31.95, 44.9, 33, 44.7]], ["C", [33.3, 44.6, 33.95, 44.65]], ["C", [34.5, 44.7, 34.7, 44.6]], ["C", [40.7, 44.4, 44.75, 46.35]], ["C", [48.75, 48.2, 51.05, 51.9]], ["C", [51.7, 53, 52.1, 54.25]], ["C", [52.55, 55.5, 52.95, 56.85]], ["C", [53.15, 57.6, 53.15, 58.3]], ["C", [53.2, 59, 53.4, 59.7]], ["C", [53.4, 60.3, 53.5, 60.5]], ["C", [53.7, 61.9, 53.7, 63.4]], ["C", [53.7, 64.9, 53.7, 66.3]], ["L", [53.7, 91.4]], ["C", [53.7, 93.3, 53.65, 95.05]], ["C", [53.6, 96.8, 52.2, 97.3]], ["C", [51.6, 97.5, 50.8, 97.5]], ["C", [50, 97.5, 49.2, 97.5]], ["L", [43.8, 97.5]], ["C", [42.6, 97.5, 41.65, 97.35]], ["C", [40.65, 97.2, 40.2, 96.5]], ["C", [39.8, 95.9, 39.75, 94.95]], ["C", [39.7, 94, 39.7, 92.9]], ["L", [39.7, 71]], ["C", [39.7, 67.3, 39.4, 64.15]], ["C", [39.1, 61, 37.6, 58.8]], ["C", [36.2, 56.8, 33.5, 56]], ["C", [33, 55.8, 32.45, 55.8]], ["C", [31.95, 55.8, 31.3, 55.6]], ["C", [30.8, 55.5, 30.1, 55.55]], ["C", [29.3, 55.6, 28.9, 55.7]], ["C", [28.5, 55.8, 28.2, 55.8]], ["C", [27.95, 55.8, 27.65, 55.9]], ["C", [25.35, 56.5, 23.95, 57.5]], ["C", [20.75, 59.8, 20.1, 64.2]], ["C", [19.55, 68.6, 19.55, 74.1]], ["L", [19.55, 92.7]], ["C", [19.55, 93.6, 19.55, 94.5]], ["C", [19.55, 95.4, 19.25, 96]], ["C", [18.75, 97.1, 17.65, 97.3]], ["C", [16.55, 97.5, 14.95, 97.5]], ["L", [9.9, 97.5]], ["C", [8.8, 97.5, 7.7, 97.4]], ["C", [6.6, 97.3, 6.1, 96.7]], ["C", [5.4, 95.8, 5.45, 94.1]], ["C", [5.5, 92.4, 5.5, 90.9]], ["L", [5.5, 50.2]], ["C", [5.5, 49.1, 5.55, 48.2]], ["C", [5.6, 47.3, 6.1, 46.7]], ["C", [6.3, 46.45, 6.75, 46.25]], ["C", [7.25, 46.1, 7.7, 46]], ["L", [8.2, 46]], ["C", [8.7, 45.9, 9.3, 45.9]]];
__motifs["o"] = [["M", [35.2, 56]], ["C", [34.6, 55.8, 34, 55.65]], ["C", [33.4, 55.5, 32.7, 55.3]], ["C", [31.9, 55.1, 31, 55.15]], ["C", [30.1, 55.2, 29.2, 55.2]], ["C", [28.9, 55.4, 28.5, 55.35]], ["C", [28.1, 55.3, 27.8, 55.4]], ["C", [27.1, 55.6, 26.45, 55.75]], ["C", [25.8, 55.9, 25.3, 56.2]], ["C", [22.8, 57.3, 21.25, 59.35]], ["C", [19.7, 61.4, 18.8, 64.1]], ["C", [18.5, 65.1, 18.35, 66.2]], ["C", [18.2, 67.3, 18, 68.4]], ["C", [17.9, 68.9, 17.9, 69.4]], ["C", [17.9, 69.9, 17.9, 70.4]], ["C", [17.7, 71.1, 17.75, 72.5]], ["C", [17.8, 73.9, 18, 74.6]], ["L", [18, 75.5]], ["C", [18.2, 76.3, 18.3, 77.05]], ["C", [18.4, 77.8, 18.6, 78.6]], ["C", [19.6, 81.6, 20.75, 83.45]], ["C", [21.9, 85.3, 24.4, 86.8]], ["C", [25.1, 87.3, 25.95, 87.6]], ["C", [26.8, 87.9, 27.7, 88.1]], ["C", [28.1, 88.2, 28.4, 88.15]], ["C", [28.7, 88.1, 29.1, 88.2]], ["C", [29.5, 88.3, 29.95, 88.35]], ["C", [30.4, 88.4, 30.8, 88.3]], ["L", [31.6, 88.3]], ["C", [32.4, 88.1, 33.2, 88]], ["C", [34, 87.9, 34.7, 87.6]], ["C", [37.3, 86.6, 38.9, 84.9]], ["C", [40.5, 83.2, 41.6, 80.7]], ["C", [42, 79.7, 42.2, 78.7]], ["C", [42.4, 77.7, 42.7, 76.6]], ["C", [42.8, 76.2, 42.8, 75.85]], ["C", [42.8, 75.5, 42.9, 75.1]], ["C", [42.9, 74.6, 42.9, 74.15]], ["C", [42.9, 73.7, 43, 73.2]], ["C", [43.1, 72.7, 43.1, 71.75]], ["C", [43.1, 70.8, 43, 70.3]], ["L", [43, 69.5]], ["C", [42.8, 69, 42.8, 68.4]], ["C", [42.8, 67.8, 42.7, 67.3]], ["C", [42.7, 66.9, 42.6, 66.7]], ["C", [42.4, 65.9, 42.25, 65.05]], ["C", [42.1, 64.2, 41.8, 63.4]], ["C", [40.7, 60.8, 39.2, 58.95]], ["C", [37.7, 57.1, 35.2, 56]], ["M", [39.15, 45.8]], ["C", [43.4, 47.1, 46.7, 49.4]], ["C", [47.8, 50.2, 48.95, 51.15]], ["C", [50.1, 52.1, 50.9, 53.2]], ["C", [51.7, 54.2, 52.35, 55.2]], ["C", [53, 56.2, 53.7, 57.3]], ["C", [54.4, 58.4, 54.8, 59.65]], ["C", [55.2, 60.9, 55.7, 62.3]], ["C", [56, 63.1, 56.2, 64]], ["C", [56.4, 64.9, 56.6, 65.8]], ["C", [56.7, 66.2, 56.7, 66.6]], ["C", [56.7, 67, 56.8, 67.4]], ["C", [57, 67.9, 56.9, 68.5]], ["C", [56.8, 69.1, 57, 69.6]], ["C", [57.2, 70.2, 57.2, 71.3]], ["C", [57.2, 72.4, 57, 73]], ["L", [57, 74]], ["C", [56.8, 74.8, 56.85, 75.6]], ["C", [56.9, 76.4, 56.7, 77.2]], ["C", [56.5, 77.9, 56.4, 78.5]], ["C", [56.3, 79.1, 56.2, 79.8]], ["C", [55.8, 80.9, 55.5, 82.05]], ["C", [55.2, 83.2, 54.7, 84.2]], ["C", [52.6, 89, 49.2, 92]], ["C", [45.8, 95, 41, 97]], ["C", [39.8, 97.5, 38.55, 97.75]], ["C", [37.3, 98, 36, 98.3]], ["C", [35.5, 98.5, 34.9, 98.5]], ["C", [34.3, 98.5, 33.8, 98.6]], ["C", [33.5, 98.6, 33.15, 98.65]], ["C", [32.8, 98.7, 32.5, 98.7]], ["C", [32, 98.8, 30.9, 98.85]], ["C", [29.8, 98.9, 29.2, 98.7]], ["L", [28.2, 98.7]], ["C", [27.7, 98.6, 27.15, 98.65]], ["C", [26.6, 98.7, 26.1, 98.5]], ["C", [25.7, 98.4, 25.35, 98.4]], ["C", [25, 98.4, 24.5, 98.3]], ["C", [23.5, 98, 22.5, 97.8]], ["C", [21.5, 97.6, 20.6, 97.2]], ["C", [19.4, 96.8, 18.35, 96.4]], ["C", [17.3, 96, 16.2, 95.4]], ["C", [12.7, 93.3, 10.2, 90.5]], ["C", [7.7, 87.7, 6, 83.8]], ["C", [5.5, 82.9, 5.25, 81.9]], ["C", [5, 80.9, 4.7, 79.8]], ["C", [4.5, 79.3, 4.5, 78.9]], ["C", [4.5, 78.5, 4.3, 78]], ["C", [4.1, 77.2, 4.1, 76.35]], ["C", [4.1, 75.5, 3.9, 74.7]], ["C", [3.8, 74.2, 3.8, 73.8]], ["C", [3.8, 73.4, 3.8, 72.9]], ["C", [3.6, 72.3, 3.65, 71.2]], ["C", [3.7, 70.1, 3.9, 69.5]], ["L", [3.9, 68.8]], ["C", [4, 68.3, 3.95, 67.75]], ["C", [3.9, 67.2, 4.1, 66.7]], ["C", [4.2, 66.2, 4.2, 65.75]], ["C", [4.2, 65.3, 4.4, 64.8]], ["C", [4.8, 63.5, 5.1, 62.25]], ["C", [5.4, 61, 5.9, 59.8]], ["C", [7.7, 55.7, 10.2, 52.95]], ["C", [12.7, 50.2, 16.3, 47.9]], ["C", [17.3, 47.4, 18.4, 47]], ["C", [19.5, 46.6, 20.6, 46.1]], ["C", [21.9, 45.6, 23.3, 45.4]], ["C", [24.7, 45.2, 26.2, 44.8]], ["C", [27, 44.7, 27.7, 44.7]], ["C", [28.4, 44.7, 29.1, 44.6]], ["C", [34.9, 44.5, 39.15, 45.8]]];
__motifs["p"] = [["M", [22.1, 59.7]], ["C", [20.7, 62, 19.8, 64.8]], ["C", [19.6, 65.6, 19.5, 66.45]], ["C", [19.4, 67.3, 19.2, 68.1]], ["C", [19.1, 68.5, 19.1, 69.4]], ["C", [18.9, 69.8, 19, 70.35]], ["C", [19.1, 70.9, 19, 71.4]], ["C", [18.8, 72, 19, 72.5]], ["L", [19, 73.7]], ["C", [19, 74.2, 19, 74.6]], ["C", [19, 75, 19.2, 75.4]], ["C", [19.2, 76.1, 19.3, 76.5]], ["C", [19.4, 77.1, 19.5, 77.7]], ["C", [19.6, 78.3, 19.8, 78.9]], ["C", [20.7, 81.8, 21.9, 83.65]], ["C", [23.2, 85.5, 25.5, 86.9]], ["C", [26.9, 87.7, 28.8, 88.2]], ["C", [29.2, 88.3, 29.5, 88.25]], ["C", [29.8, 88.2, 30.2, 88.3]], ["C", [30.55, 88.4, 31.4, 88.45]], ["C", [32.2, 88.5, 32.65, 88.4]], ["C", [33.5, 88.2, 34.35, 88.05]], ["C", [35.2, 87.9, 36, 87.6]], ["C", [38.4, 86.6, 39.9, 84.8]], ["C", [41.4, 83, 42.4, 80.6]], ["C", [42.85, 79.4, 43.05, 78.1]], ["C", [43.3, 76.8, 43.6, 75.4]], ["C", [43.6, 74.9, 43.65, 74.4]], ["C", [43.7, 73.9, 43.7, 73.4]], ["C", [43.8, 72.9, 43.8, 72.05]], ["C", [43.8, 71.2, 43.7, 70.7]], ["L", [43.7, 69.8]], ["C", [43.5, 69.2, 43.5, 68.5]], ["C", [43.5, 67.8, 43.3, 67.1]], ["C", [43.05, 66.1, 42.85, 65.15]], ["C", [42.7, 64.2, 42.3, 63.4]], ["C", [41.1, 60.2, 39.2, 58.3]], ["C", [37.3, 56.4, 33.8, 55.5]], ["C", [33, 55.3, 32.05, 55.3]], ["C", [31.1, 55.3, 30.2, 55.3]], ["C", [29.8, 55.4, 29.5, 55.4]], ["C", [29.2, 55.4, 28.8, 55.5]], ["C", [28.1, 55.7, 27.45, 55.85]], ["C", [26.8, 56, 26.15, 56.3]], ["C", [23.6, 57.4, 22.1, 59.7]], ["M", [9.55, 46.1]], ["L", [14.4, 46.1]], ["C", [15.4, 46.1, 16.25, 46.1]], ["C", [17.2, 46.1, 17.75, 46.6]], ["C", [18.5, 47.1, 18.55, 47.85]], ["C", [18.6, 48.6, 19, 49.4]], ["C", [19.1, 49.7, 19.25, 49.85]], ["C", [19.4, 50, 19.6, 50.2]], ["C", [20.7, 50.3, 21.4, 49.6]], ["C", [22.05, 48.9, 22.8, 48.4]], ["C", [24.05, 47.5, 25.5, 46.75]], ["C", [26.9, 46, 28.55, 45.5]], ["C", [29.4, 45.2, 30.3, 45.1]], ["C", [31.3, 45, 32.2, 44.8]], ["C", [32.55, 44.7, 33.05, 44.8]], ["C", [33.5, 44.9, 33.8, 44.7]], ["C", [39.5, 44.5, 43.45, 46.25]], ["C", [47.35, 48, 50.2, 50.8]], ["C", [50.7, 51.3, 51.05, 51.75]], ["C", [51.45, 52.2, 51.9, 52.7]], ["C", [52.6, 53.6, 53.15, 54.5]], ["C", [53.65, 55.4, 54.2, 56.3]], ["C", [54.4, 56.5, 54.45, 56.8]], ["C", [54.5, 57.1, 54.7, 57.5]], ["C", [55.25, 58.5, 55.75, 59.9]], ["C", [56, 60.5, 56.2, 61.15]], ["C", [56.4, 61.8, 56.6, 62.5]], ["C", [57, 63.7, 57.15, 65]], ["C", [57.3, 66.3, 57.55, 67.7]], ["C", [57.55, 68.2, 57.6, 68.8]], ["C", [57.65, 69.4, 57.75, 70]], ["L", [57.75, 71.1]], ["C", [57.85, 71.7, 57.85, 72.9]], ["C", [57.85, 74.1, 57.65, 74.6]], ["L", [57.65, 75.9]], ["C", [57.35, 77, 57.3, 78]], ["C", [57.3, 79, 57, 80]], ["C", [56.8, 80.9, 56.6, 81.85]], ["C", [56.4, 82.8, 56, 83.7]], ["C", [55.25, 85.4, 54.6, 86.85]], ["C", [53.9, 88.3, 53, 89.7]], ["C", [52.4, 90.6, 51.75, 91.35]], ["C", [51.05, 92.1, 50.3, 92.9]], ["L", [49.6, 93.6]], ["C", [49.05, 94.1, 48.55, 94.5]], ["C", [48, 94.9, 47.45, 95.3]], ["C", [46.7, 95.9, 45.75, 96.35]], ["C", [44.8, 96.8, 43.8, 97.3]], ["C", [42.75, 97.8, 41.75, 98]], ["C", [40.65, 98.2, 39.6, 98.4]], ["C", [38.95, 98.6, 38.35, 98.6]], ["C", [37.7, 98.6, 36.95, 98.8]], ["L", [36.1, 98.8]], ["C", [35.3, 99, 34.55, 98.8]], ["L", [33.6, 98.8]], ["C", [33, 98.6, 32.3, 98.65]], ["C", [31.7, 98.7, 31.1, 98.5]], ["C", [29.5, 98, 28.05, 97.6]], ["C", [26.55, 97.2, 25.4, 96.4]], ["C", [24.7, 96, 24.05, 95.55]], ["C", [23.5, 95.1, 22.8, 94.6]], ["C", [22.35, 94.3, 21.6, 93.7]], ["C", [20.8, 93.1, 20.15, 93.6]], ["C", [19.7, 93.9, 19.7, 94.35]], ["C", [19.7, 94.8, 19.5, 95.4]], ["C", [19.3, 96.4, 19.35, 97.7]], ["C", [19.4, 99, 19.4, 100.1]], ["L", [19.4, 110.3]], ["C", [19.4, 111.6, 19.35, 112.85]], ["C", [19.3, 114.1, 18.8, 114.9]], ["C", [18.5, 115.3, 17.7, 115.5]], ["C", [16.9, 115.7, 15.85, 115.75]], ["C", [14.9, 115.8, 13.85, 115.75]], ["C", [12.9, 115.7, 12.15, 115.7]], ["L", [9.45, 115.7]], ["C", [9.2, 115.7, 8.8, 115.7]], ["C", [8.4, 115.7, 8.05, 115.6]], ["L", [7.3, 115.6]], ["C", [5.55, 115.1, 5.45, 113.65]], ["C", [5.35, 112.2, 5.35, 110.2]], ["L", [5.35, 51.5]], ["C", [5.35, 50.4, 5.3, 49.15]], ["C", [5.25, 47.9, 5.75, 47.2]], ["C", [6.15, 46.5, 6.9, 46.3]], ["C", [7.35, 46.1, 8.1, 46.1]], ["C", [8.9, 46.1, 9.55, 46.1]]];
__motifs["q"] = [["M", [20.45, 59.8]], ["C", [18.8, 62.3, 17.9, 65.6]], ["C", [17.7, 66.4, 17.65, 67.05]], ["C", [17.6, 67.7, 17.4, 68.5]], ["C", [17.4, 69.2, 17.3, 69.5]], ["C", [17.2, 70, 17.15, 71.25]], ["C", [17.1, 72.5, 17.3, 73]], ["L", [17.3, 73.9]], ["C", [17.4, 74.3, 17.4, 74.7]], ["C", [17.4, 75.1, 17.5, 75.4]], ["C", [17.5, 75.6, 17.55, 75.9]], ["C", [17.6, 76.2, 17.6, 76.4]], ["C", [17.8, 77.2, 17.9, 77.9]], ["C", [18, 78.6, 18.3, 79.3]], ["C", [19.1, 81.8, 20.4, 83.6]], ["C", [21.7, 85.4, 23.7, 86.7]], ["C", [25.1, 87.5, 26.8, 87.9]], ["C", [27.1, 88, 27.35, 88]], ["C", [27.6, 88, 28, 88.1]], ["C", [28.3, 88.2, 28.95, 88.25]], ["C", [29.6, 88.3, 30.1, 88.2]], ["C", [30.3, 88.1, 30.65, 88.15]], ["C", [31, 88.2, 31.3, 88.1]], ["C", [32, 87.9, 32.65, 87.8]], ["C", [33.3, 87.7, 34, 87.5]], ["C", [36.6, 86.4, 38.15, 84.6]], ["C", [39.7, 82.8, 40.8, 80.2]], ["C", [41.1, 79.4, 41.3, 78.5]], ["C", [41.5, 77.6, 41.7, 76.7]], ["C", [41.7, 76.3, 41.75, 76]], ["C", [41.8, 75.7, 41.8, 75.3]], ["C", [42, 74.3, 42, 73.6]], ["L", [42, 72.4]], ["C", [42.1, 72.2, 42.05, 71.9]], ["C", [42, 71.6, 42, 71.4]], ["C", [41.9, 70.4, 41.9, 69.5]], ["C", [41.9, 68.6, 41.7, 67.8]], ["C", [41.6, 67.5, 41.65, 67.25]], ["C", [41.7, 67, 41.6, 66.7]], ["C", [41.4, 65.9, 41.25, 65.25]], ["C", [41.1, 64.6, 40.9, 63.9]], ["C", [39.9, 61, 38.2, 58.9]], ["C", [36.5, 56.8, 33.8, 55.7]], ["C", [32.7, 55.2, 31.45, 55.15]], ["C", [30.2, 55.1, 28.8, 55.1]], ["C", [28.5, 55.3, 28.1, 55.25]], ["C", [27.7, 55.2, 27.3, 55.3]], ["C", [26.7, 55.5, 26.1, 55.65]], ["C", [25.5, 55.8, 25, 56]], ["C", [22.1, 57.3, 20.45, 59.8]], ["M", [46.65, 45.9]], ["L", [51.4, 45.9]], ["C", [52.1, 45.9, 52.85, 45.9]], ["C", [53.5, 45.9, 54.1, 46.1]], ["C", [54.85, 46.3, 55.2, 47]], ["C", [55.7, 47.7, 55.65, 48.9]], ["C", [55.6, 50.1, 55.6, 51.2]], ["L", [55.6, 109.8]], ["C", [55.6, 111.4, 55.55, 112.95]], ["C", [55.5, 114.5, 54.5, 115.1]], ["C", [53.7, 115.6, 52.2, 115.55]], ["C", [50.75, 115.5, 49.4, 115.5]], ["C", [48.5, 115.5, 47.35, 115.55]], ["C", [46.2, 115.6, 45.15, 115.55]], ["C", [44.1, 115.5, 43.25, 115.25]], ["C", [42.4, 115, 42, 114.4]], ["C", [41.5, 113.6, 41.55, 112.15]], ["C", [41.6, 110.7, 41.6, 109.5]], ["L", [41.6, 98.6]], ["C", [41.6, 97.5, 41.6, 96.1]], ["C", [41.6, 94.7, 41.3, 94]], ["C", [41.1, 93.8, 40.95, 93.65]], ["C", [40.8, 93.5, 40.65, 93.3]], ["C", [39.7, 93.2, 39.2, 93.65]], ["C", [38.7, 94.1, 38.1, 94.5]], ["C", [37.2, 95.2, 36.25, 95.8]], ["C", [35.3, 96.4, 34.2, 96.9]], ["C", [32.4, 97.7, 30.2, 98.15]], ["C", [28, 98.6, 25.7, 98.65]], ["C", [23.4, 98.7, 21.15, 98.3]], ["C", [18.9, 97.9, 17.1, 97.1]], ["C", [12.6, 95.1, 9.8, 91.95]], ["C", [7, 88.8, 5.1, 84.2]], ["C", [4.6, 83.1, 4.4, 81.95]], ["C", [4.2, 80.8, 3.9, 79.7]], ["C", [3.7, 79.3, 3.75, 78.95]], ["C", [3.8, 78.6, 3.7, 78.2]], ["C", [3.5, 77.4, 3.45, 76.45]], ["C", [3.4, 75.5, 3.2, 74.6]], ["L", [3.2, 73.3]], ["C", [3.15, 72.8, 3.15, 72.05]], ["C", [3.15, 71.3, 3.2, 70.8]], ["C", [3.3, 70.3, 3.3, 69.9]], ["C", [3.3, 69.5, 3.3, 69]], ["C", [3.4, 68.5, 3.35, 68]], ["C", [3.3, 67.5, 3.5, 67]], ["C", [3.7, 66.1, 3.8, 65.15]], ["C", [3.9, 64.2, 4.1, 63.3]], ["C", [4.6, 61.6, 5.2, 60.1]], ["C", [5.7, 58.6, 6.3, 57.2]], ["C", [6.9, 55.8, 7.8, 54.5]], ["C", [8.7, 53.2, 9.6, 52]], ["C", [10.5, 50.9, 11.6, 50]], ["C", [11.9, 49.7, 12, 49.5]], ["C", [12.5, 49.2, 12.9, 48.85]], ["C", [13.3, 48.5, 13.7, 48.2]], ["C", [15.1, 47.2, 16.65, 46.55]], ["C", [18.2, 45.9, 19.9, 45.3]], ["C", [20.8, 45, 21.7, 44.9]], ["C", [22.6, 44.8, 23.5, 44.6]], ["C", [23.8, 44.5, 24.6, 44.6]], ["C", [25.4, 44.7, 25.6, 44.5]], ["C", [28.8, 44.4, 31.6, 45.05]], ["C", [34.4, 45.7, 36.45, 46.9]], ["C", [37, 47.3, 37.6, 47.7]], ["C", [38.2, 48.1, 38.7, 48.5]], ["C", [39.3, 49, 39.75, 49.45]], ["C", [40.2, 49.9, 41.3, 49.9]], ["C", [41.5, 49.7, 41.65, 49.55]], ["C", [41.8, 49.4, 42, 49.2]], ["C", [42.3, 48.4, 42.4, 47.65]], ["C", [42.5, 46.9, 43.2, 46.4]], ["C", [43.7, 46, 44.7, 45.95]], ["C", [45.6, 45.9, 46.65, 45.9]]];
__motifs["r"] = [["M", [18.65, 48.45]], ["C", [18.7, 49.3, 18.8, 50.2]], ["C", [18.9, 51, 19.15, 51.7]], ["C", [19.4, 52.45, 20.05, 52.45]], ["C", [20.25, 52.25, 20.45, 52.25]], ["C", [20.7, 52.25, 20.9, 52]], ["C", [21.5, 51.5, 21.9, 50.85]], ["C", [22.35, 50.25, 23.1, 49.7]], ["C", [23.5, 49.4, 23.8, 49.05]], ["C", [24.05, 48.7, 24.45, 48.45]], ["C", [25.4, 47.8, 26.3, 47.2]], ["C", [27.3, 46.6, 28.25, 46.15]], ["C", [29.3, 45.7, 30.3, 45.4]], ["C", [31.4, 45.1, 32.45, 44.8]], ["C", [32.75, 44.7, 33.65, 44.75]], ["C", [34.45, 44.8, 34.65, 44.6]], ["C", [35.8, 44.6, 36.6, 44.8]], ["C", [37.5, 45, 38, 45.75]], ["C", [38.55, 46.5, 38.55, 48.5]], ["C", [38.55, 50.45, 38.55, 51.95]], ["C", [38.55, 53, 38.6, 54.45]], ["C", [38.65, 55.8, 38.3, 56.65]], ["C", [37.9, 57.3, 37.1, 57.5]], ["C", [36.4, 57.7, 35.45, 57.7]], ["C", [34.45, 57.7, 33.45, 57.6]], ["C", [32.35, 57.5, 31.5, 57.7]], ["C", [30.75, 57.9, 30.1, 57.95]], ["C", [29.4, 58, 28.75, 58.25]], ["C", [27.2, 58.75, 25.6, 59.65]], ["C", [23.95, 60.65, 23.1, 61.8]], ["C", [22.55, 62.65, 22, 63.45]], ["C", [21.5, 64.3, 21, 65.2]], ["C", [20.7, 66, 20.4, 66.9]], ["C", [20.15, 67.7, 19.95, 68.5]], ["C", [19.8, 69.25, 19.8, 69.95]], ["C", [19.8, 70.75, 19.6, 71.45]], ["C", [19.5, 71.8, 19.55, 72.15]], ["C", [19.6, 72.5, 19.5, 72.85]], ["L", [19.5, 74.4]], ["C", [19.3, 75.15, 19.4, 75.95]], ["C", [19.5, 76.8, 19.5, 77.65]], ["L", [19.5, 92.5]], ["C", [19.5, 93.85, 19.4, 94.9]], ["C", [19.3, 96.05, 18.8, 96.7]], ["C", [18.6, 97, 18.1, 97.15]], ["C", [17.7, 97.3, 17.2, 97.4]], ["L", [16.7, 97.4]], ["C", [16.15, 97.5, 15.6, 97.5]], ["C", [15, 97.5, 14.5, 97.5]], ["L", [10.15, 97.5]], ["C", [9.55, 97.4, 8.95, 97.4]], ["C", [8.25, 97.4, 7.55, 97.4]], ["C", [7.1, 97.2, 6.6, 97.05]], ["C", [6.05, 96.9, 5.85, 96.45]], ["C", [5.45, 95.9, 5.4, 94.95]], ["C", [5.35, 94, 5.35, 93]], ["L", [5.35, 50.65]], ["C", [5.35, 49.6, 5.35, 48.65]], ["C", [5.35, 47.7, 5.75, 47.1]], ["C", [6.25, 46.35, 7.3, 46.15]], ["C", [8.25, 45.95, 9.65, 45.95]], ["L", [14.8, 45.95]], ["C", [15.95, 45.95, 16.9, 46.1]], ["C", [17.75, 46.25, 18.25, 47]], ["C", [18.6, 47.5, 18.65, 48.45]]];
__motifs["s"] = [["M", [25, 44.5]], ["C", [32.5, 44.3, 38.05, 46.15]], ["C", [43.6, 48, 46.5, 52.5]], ["C", [47.2, 53.6, 47.75, 54.75]], ["C", [48.3, 55.9, 48.7, 57.3]], ["C", [48.9, 57.9, 48.9, 58.6]], ["C", [48.9, 59.3, 48.7, 59.8]], ["C", [48.3, 60.4, 47.6, 60.6]], ["C", [47.1, 60.8, 46.4, 60.8]], ["C", [45.7, 60.8, 45, 60.8]], ["L", [40.6, 60.8]], ["C", [39.9, 60.8, 39.2, 60.85]], ["C", [38.5, 60.9, 37.9, 60.7]], ["C", [36.9, 60.5, 36.4, 59.9]], ["C", [35.9, 59.3, 35.5, 58.65]], ["C", [35.1, 58, 34.75, 57.25]], ["C", [34.4, 56.5, 33.7, 56]], ["C", [32.7, 55.2, 31.75, 54.8]], ["C", [30.8, 54.4, 29.4, 54.1]], ["C", [28.7, 53.9, 27.35, 53.8]], ["C", [26, 53.7, 25.3, 53.9]], ["L", [24.6, 53.9]], ["C", [24.1, 54, 23.65, 54.05]], ["C", [23.2, 54.1, 22.7, 54.2]], ["C", [21, 54.7, 19.95, 55.55]], ["C", [18.9, 56.4, 18.5, 58.1]], ["C", [18.3, 58.8, 18.5, 59.4]], ["C", [18.7, 60, 18.9, 60.4]], ["C", [19.6, 61.6, 20.55, 62.3]], ["C", [21.5, 63, 22.8, 63.5]], ["C", [24.7, 64.3, 26.95, 64.85]], ["C", [29.2, 65.4, 31.55, 65.85]], ["C", [33.9, 66.3, 36.15, 66.85]], ["C", [38.4, 67.4, 40.4, 68.2]], ["C", [41.3, 68.6, 42.15, 68.85]], ["C", [43, 69.1, 43.8, 69.6]], ["C", [45.7, 70.8, 47.25, 72.2]], ["C", [48.8, 73.6, 49.7, 75.7]], ["C", [50, 76.4, 50.2, 77.1]], ["C", [50.4, 77.8, 50.6, 78.6]], ["C", [50.7, 79.2, 50.75, 80.45]], ["C", [50.8, 81.7, 50.7, 82.4]], ["L", [50.7, 82.9]], ["C", [50.5, 83.5, 50.45, 84.05]], ["C", [50.4, 84.6, 50.3, 85.1]], ["C", [49.6, 88.1, 48.1, 90.4]], ["C", [46.5, 92.8, 44.2, 94.3]], ["C", [41.9, 95.8, 39, 96.9]], ["C", [37.9, 97.4, 36.65, 97.6]], ["C", [35.4, 97.8, 34.2, 98.1]], ["C", [33.3, 98.3, 32.35, 98.35]], ["C", [31.4, 98.4, 30.5, 98.6]], ["L", [28.7, 98.6]], ["C", [28.1, 98.8, 26.65, 98.8]], ["C", [25.2, 98.8, 24.6, 98.6]], ["C", [24.3, 98.6, 23.95, 98.55]], ["C", [23.6, 98.5, 23.2, 98.5]], ["C", [22, 98.3, 20.8, 98.2]], ["C", [19.6, 98.1, 18.5, 97.8]], ["C", [14.6, 96.7, 11.6, 95.25]], ["C", [8.6, 93.8, 6.5, 90.9]], ["C", [5.1, 89, 4.1, 86.5]], ["C", [3.9, 85.9, 3.7, 84.9]], ["C", [3.5, 84.4, 3.4, 83.5]], ["C", [3.3, 82.6, 3.5, 82]], ["C", [3.8, 81.3, 4.5, 81]], ["C", [5, 80.8, 5.7, 80.8]], ["C", [6.4, 80.8, 7.2, 80.8]], ["L", [11.9, 80.8]], ["C", [12.7, 80.8, 13.5, 80.8]], ["C", [14.3, 80.8, 14.9, 81]], ["C", [16, 81.4, 16.35, 82.3]], ["C", [16.7, 83.2, 17.2, 84.2]], ["C", [17.4, 84.7, 17.95, 85.5]], ["C", [18.5, 86.3, 18.9, 86.5]], ["C", [20.1, 87.5, 21.2, 88.05]], ["C", [22.3, 88.6, 24, 89.1]], ["C", [24.5, 89.3, 25, 89.25]], ["C", [25.5, 89.2, 26, 89.3]], ["C", [26.8, 89.5, 27.75, 89.45]], ["C", [28.7, 89.4, 29.4, 89.2]], ["C", [29.9, 89.1, 30.35, 89.1]], ["C", [30.8, 89.1, 31.3, 88.9]], ["C", [32.7, 88.4, 33.85, 87.7]], ["C", [35, 87, 35.7, 85.9]], ["C", [36.2, 85.1, 36.5, 83.4]], ["C", [36.7, 82.7, 36.5, 82.1]], ["C", [36.3, 81.5, 36.1, 81.1]], ["C", [35.4, 79.7, 34.35, 79]], ["C", [33.3, 78.3, 31.9, 77.7]], ["C", [30, 76.9, 27.9, 76.4]], ["C", [25.8, 75.9, 23.7, 75.3]], ["C", [22.9, 75.1, 22.05, 75]], ["C", [21.2, 74.9, 20.4, 74.7]], ["C", [17.2, 73.8, 14.3, 72.95]], ["C", [11.4, 72.1, 9, 70.4]], ["C", [6.2, 68.4, 4.9, 65]], ["C", [4.7, 64.3, 4.5, 63.1]], ["C", [4.3, 62.4, 4.2, 61.4]], ["C", [4.1, 60.4, 4.3, 59.6]], ["C", [4.5, 59.1, 4.4, 58.75]], ["C", [4.3, 58.4, 4.5, 57.9]], ["C", [4.7, 56.8, 4.95, 55.85]], ["C", [5.2, 54.9, 5.6, 54]], ["C", [6.9, 51.1, 9.2, 49.3]], ["C", [11.5, 47.5, 14.4, 46.4]], ["C", [15.5, 45.9, 16.7, 45.65]], ["C", [17.9, 45.4, 19.2, 45.1]], ["C", [19.8, 44.9, 20.4, 44.85]], ["C", [21, 44.8, 21.6, 44.7]], ["C", [22.4, 44.6, 23.3, 44.6]], ["C", [24.2, 44.6, 25, 44.5]]];
__motifs["t"] = [["M", [12.15, 30.5]], ["L", [18.9, 30.5]], ["C", [20.4, 30.5, 21.55, 30.65]], ["C", [22.7, 30.8, 23.2, 31.9]], ["C", [23.4, 32.4, 23.4, 33.1]], ["C", [23.4, 33.85, 23.4, 34.5]], ["L", [23.4, 39]], ["C", [23.4, 39.5, 23.35, 40.2]], ["C", [23.3, 40.8, 23.4, 41.3]], ["L", [23.4, 42.4]], ["C", [23.4, 43.2, 23.5, 43.85]], ["C", [23.6, 44.5, 23.95, 45]], ["C", [24.7, 45.9, 26.55, 45.95]], ["C", [28.35, 46, 30.1, 46]], ["C", [30.7, 46, 31.3, 46]], ["C", [31.9, 46, 32.35, 46.2]], ["C", [33.5, 46.7, 33.65, 48]], ["C", [33.8, 49.3, 33.8, 50.9]], ["C", [33.8, 51.6, 33.85, 52.3]], ["C", [33.9, 53, 33.7, 53.5]], ["C", [33.2, 55.1, 31.6, 55.2]], ["C", [30, 55.3, 28, 55.3]], ["C", [27.6, 55.3, 27.15, 55.25]], ["C", [26.7, 55.2, 26.35, 55.3]], ["C", [26, 55.4, 25.7, 55.35]], ["C", [25.4, 55.3, 25.1, 55.5]], ["C", [24.25, 55.7, 23.95, 56.35]], ["C", [23.6, 57, 23.4, 57.9]], ["C", [23.3, 58.4, 23.4, 59]], ["C", [23.5, 59.6, 23.4, 60.1]], ["L", [23.4, 78]], ["C", [23.4, 80.5, 23.55, 82.35]], ["C", [23.7, 84.2, 24.8, 85.6]], ["C", [25.3, 86.2, 26.1, 86.45]], ["C", [27, 86.7, 27.9, 86.9]], ["C", [28.15, 87, 28.5, 86.95]], ["C", [28.9, 86.9, 29.1, 87]], ["L", [30.2, 87]], ["C", [31.3, 87, 32.1, 87.1]], ["C", [32.9, 87.2, 33.4, 87.9]], ["C", [33.8, 88.5, 33.8, 89.45]], ["C", [33.8, 90.4, 33.8, 91.4]], ["C", [33.8, 93.5, 33.75, 95.25]], ["C", [33.7, 97, 32.1, 97.6]], ["C", [31.6, 97.8, 31.2, 97.75]], ["C", [30.8, 97.7, 30.25, 97.9]], ["L", [29.3, 97.9]], ["C", [29.1, 97.9, 28.7, 97.85]], ["C", [28.25, 97.8, 28, 97.9]], ["C", [27.5, 98, 26.95, 97.95]], ["C", [26.35, 97.9, 25.9, 97.9]], ["C", [25.4, 97.9, 24.9, 97.95]], ["C", [24.35, 98, 23.95, 97.9]], ["L", [22.9, 97.9]], ["C", [22.4, 97.8, 21.8, 97.8]], ["C", [21.2, 97.8, 20.7, 97.7]], ["C", [19.95, 97.6, 19.4, 97.5]], ["C", [18.8, 97.4, 18.15, 97.3]], ["C", [17.1, 97, 16.05, 96.6]], ["C", [15.1, 96.2, 14.15, 95.7]], ["C", [13.85, 95.5, 13.55, 95.25]], ["C", [13.3, 95, 12.9, 94.7]], ["C", [12.7, 94.5, 12.4, 94.3]], ["C", [12.05, 94, 11.85, 93.8]], ["C", [10.5, 91.9, 9.75, 89.6]], ["C", [9.55, 89.2, 9.6, 88.85]], ["C", [9.65, 88.5, 9.55, 88.05]], ["C", [9.45, 87.8, 9.45, 87.5]], ["C", [9.45, 87.2, 9.4, 87]], ["L", [9.4, 86.05]], ["C", [9.3, 85.6, 9.35, 85.1]], ["C", [9.4, 84.6, 9.4, 84.1]], ["L", [9.4, 60.1]], ["C", [9.4, 59.4, 9.4, 58.7]], ["C", [9.45, 58, 9.3, 57.4]], ["C", [8.9, 56, 7.85, 55.6]], ["C", [6.8, 55.1, 5.1, 55.3]], ["C", [3.35, 55.5, 2.2, 55]], ["C", [1.35, 54.75, 1.15, 54.1]], ["C", [1, 53.5, 0.8, 52.65]], ["L", [0.8, 50.55]], ["C", [0.8, 48.7, 1, 47.6]], ["C", [1.15, 46.5, 2.7, 46.1]], ["C", [3.1, 45.9, 3.45, 45.95]], ["C", [3.85, 46, 4.4, 46]], ["C", [5.85, 46, 7.2, 45.85]], ["C", [8.5, 45.7, 9, 44.7]], ["C", [9.3, 44, 9.35, 43.1]], ["C", [9.4, 42.25, 9.4, 41.3]], ["L", [9.4, 35.1]], ["C", [9.4, 34.3, 9.4, 33.4]], ["C", [9.4, 32.5, 9.55, 31.9]], ["C", [10.05, 30.9, 11.1, 30.6]], ["C", [11.3, 30.5, 11.6, 30.55]], ["C", [11.95, 30.6, 12.15, 30.5]]];
__motifs["u"] = [["M", [53.6, 47.9]], ["C", [53.7, 48.85, 53.7, 50.2]], ["L", [53.7, 92.95]], ["C", [53.7, 94, 53.7, 94.95]], ["C", [53.7, 96, 53.3, 96.45]], ["C", [52.85, 97.25, 51.8, 97.35]], ["C", [50.85, 97.5, 49.7, 97.5]], ["L", [44.3, 97.5]], ["C", [43.2, 97.5, 42.35, 97.35]], ["C", [41.5, 97.25, 41, 96.55]], ["C", [40.8, 96.3, 40.65, 95.7]], ["C", [40.55, 95.05, 40.35, 94.45]], ["C", [40.2, 93.9, 40, 93.4]], ["C", [39.8, 92.85, 39.4, 92.75]], ["C", [39.2, 92.55, 38.9, 92.65]], ["C", [38.6, 92.75, 38.45, 92.85]], ["C", [37.7, 93.3, 37.2, 93.8]], ["C", [36.7, 94.3, 36.1, 94.65]], ["C", [35.7, 94.95, 35.35, 95.35]], ["C", [35, 95.7, 34.5, 96]], ["C", [32.25, 97.35, 29.1, 98.2]], ["C", [28.4, 98.4, 27.75, 98.45]], ["C", [27, 98.5, 26.2, 98.65]], ["C", [25.85, 98.75, 25.35, 98.7]], ["C", [24.9, 98.65, 24.5, 98.75]], ["C", [24.2, 98.85, 23.3, 98.8]], ["C", [22.3, 98.75, 22, 98.65]], ["C", [21.55, 98.65, 21, 98.6]], ["C", [20.5, 98.55, 20, 98.55]], ["C", [18.8, 98.3, 17.7, 98.1]], ["C", [16.6, 97.9, 15.55, 97.5]], ["C", [15.05, 97.25, 14.65, 97.1]], ["C", [14.3, 96.95, 13.8, 96.75]], ["C", [10.3, 94.85, 8.2, 91.5]], ["C", [6.95, 89.4, 6.3, 86.4]], ["C", [5.7, 83.5, 5.55, 80.1]], ["C", [5.4, 76.8, 5.45, 73.25]], ["C", [5.5, 69.65, 5.5, 66.2]], ["L", [5.5, 52.6]], ["C", [5.5, 51.25, 5.45, 49.55]], ["C", [5.4, 47.8, 5.9, 46.95]], ["C", [6.2, 46.45, 7.15, 46.1]], ["C", [7.7, 46.1, 8, 46]], ["L", [15.55, 46]], ["C", [16.65, 46, 17.55, 46.1]], ["C", [18.45, 46.2, 18.85, 46.75]], ["C", [19.35, 47.4, 19.45, 48.45]], ["C", [19.55, 49.5, 19.55, 50.6]], ["L", [19.55, 72.5]], ["C", [19.55, 76.05, 19.8, 79.3]], ["C", [20.1, 82.5, 21.65, 84.6]], ["C", [23.05, 86.7, 26.1, 87.6]], ["C", [26.6, 87.7, 26.95, 87.7]], ["C", [27.3, 87.7, 27.85, 87.8]], ["C", [28.3, 87.9, 28.9, 87.9]], ["C", [29.5, 87.9, 29.85, 87.8]], ["C", [30.3, 87.6, 30.65, 87.7]], ["C", [31, 87.8, 31.4, 87.6]], ["C", [33.5, 87.1, 34.7, 86.25]], ["C", [36.5, 85.2, 37.55, 83.45]], ["C", [38.6, 81.7, 39.05, 79.55]], ["C", [39.5, 77.4, 39.6, 74.75]], ["C", [39.7, 72.1, 39.7, 69.2]], ["L", [39.7, 50.6]], ["C", [39.7, 49.7, 39.7, 48.7]], ["C", [39.7, 47.8, 40.1, 47.2]], ["C", [40.6, 46.3, 41.6, 46.15]], ["C", [42.6, 46, 44, 46]], ["L", [49.3, 46]], ["C", [50.3, 46, 51.2, 46]], ["C", [52.1, 46, 52.7, 46.4]], ["C", [53.5, 46.85, 53.6, 47.9]]];
__motifs["v"] = [["M", [50.35, 47.95]], ["C", [50.2, 48.9, 50, 49.5]], ["C", [49.5, 50.9, 49, 52.45]], ["C", [48.5, 54, 48, 55.4]], ["C", [47.7, 56.1, 47.55, 56.75]], ["C", [47.4, 57.4, 47.2, 58]], ["C", [46.7, 59.1, 46.35, 60.2]], ["C", [46, 61.3, 45.6, 62.4]], ["C", [45.5, 62.7, 45.45, 63.05]], ["C", [45.4, 63.4, 45.2, 63.7]], ["C", [44.6, 65.2, 44.15, 66.75]], ["C", [43.7, 68.3, 43.2, 69.8]], ["C", [42.1, 72.8, 41.1, 75.95]], ["C", [40.1, 79.1, 38.9, 82.1]], ["C", [38.4, 83.5, 38, 84.85]], ["C", [37.6, 86.2, 37.1, 87.6]], ["C", [36.9, 88.1, 36.8, 88.45]], ["C", [36.7, 88.8, 36.5, 89.3]], ["C", [36.1, 90.4, 35.75, 91.55]], ["C", [35.4, 92.7, 35, 93.8]], ["C", [34.5, 94.9, 34.1, 95.85]], ["C", [33.7, 96.8, 32.6, 97.2]], ["C", [31.8, 97.5, 30.9, 97.45]], ["C", [30, 97.4, 29.1, 97.4]], ["L", [22.6, 97.4]], ["C", [21.5, 97.4, 20.45, 97.4]], ["C", [19.4, 97.4, 18.6, 97]], ["C", [17.9, 96.5, 17.6, 95.75]], ["C", [17.3, 95, 17, 94.1]], ["C", [16.5, 92.9, 16.1, 91.6]], ["C", [15.7, 90.3, 15.2, 89.1]], ["C", [15, 88.7, 14.95, 88.35]], ["C", [14.9, 88, 14.7, 87.5]], ["C", [14.2, 86.3, 13.8, 85]], ["C", [13.4, 83.7, 12.9, 82.4]], ["C", [12.7, 81.9, 12.6, 81.45]], ["C", [12.5, 81, 12.3, 80.5]], ["C", [11.9, 79.6, 11.6, 78.65]], ["C", [11.3, 77.7, 11, 76.8]], ["C", [10.8, 76.5, 10.8, 76.15]], ["C", [10.8, 75.8, 10.6, 75.5]], ["C", [10.2, 74.6, 9.95, 73.7]], ["C", [9.7, 72.8, 9.3, 71.8]], ["C", [8.4, 69.5, 7.6, 67.05]], ["C", [6.8, 64.6, 6, 62.2]], ["C", [4.9, 59.5, 4.1, 56.75]], ["C", [3.3, 54, 2.3, 51.3]], ["L", [1.4, 48.6]], ["C", [1.3, 48.3, 1.25, 47.85]], ["C", [1.2, 47.4, 1.4, 47]], ["C", [1.7, 46.3, 2.8, 46]], ["C", [3.3, 46, 3.5, 45.9]], ["L", [10.8, 45.9]], ["C", [11.9, 45.9, 12.9, 45.95]], ["C", [13.9, 46, 14.6, 46.4]], ["C", [15.7, 47.1, 16.15, 48.95]], ["C", [16.6, 50.8, 17.1, 52.2]], ["C", [18.2, 55.5, 19.2, 58.95]], ["C", [20.2, 62.4, 21.3, 65.8]], ["C", [22.1, 68.2, 22.8, 70.7]], ["C", [23.5, 73.2, 24.4, 75.5]], ["C", [24.7, 76.4, 25.05, 77.4]], ["C", [25.4, 78.4, 26.5, 78.4]], ["C", [26.7, 78.2, 26.8, 78.15]], ["C", [26.9, 78.1, 27.1, 77.9]], ["C", [27.4, 77.4, 27.6, 76.9]], ["C", [27.8, 76.4, 28, 75.8]], ["C", [28.5, 74.7, 28.75, 73.5]], ["C", [29, 72.3, 29.4, 71.2]], ["C", [30.8, 67, 32.05, 62.75]], ["C", [33.3, 58.5, 34.7, 54.3]], ["C", [35.2, 53.1, 35.5, 51.85]], ["C", [35.8, 50.6, 36.2, 49.5]], ["C", [36.4, 48.7, 36.7, 47.9]], ["C", [37, 47.1, 37.6, 46.6]], ["C", [37.9, 46.4, 38.9, 46]], ["C", [39.5, 45.8, 40.2, 45.85]], ["C", [40.9, 45.9, 41.5, 45.9]], ["L", [46.4, 45.9]], ["C", [47.5, 45.9, 48.45, 45.95]], ["C", [49.4, 46, 49.9, 46.5]], ["C", [50.5, 47, 50.35, 47.95]]];
__motifs["w"] = [["M", [45.6, 45.9]], ["C", [46.6, 46, 47.3, 46.5]], ["C", [47.8, 46.9, 48, 47.6]], ["C", [48.2, 48.25, 48.4, 48.8]], ["C", [48.8, 50.25, 49.05, 51.55]], ["C", [49.3, 52.9, 49.8, 54.35]], ["C", [51, 58.25, 51.85, 62.35]], ["C", [52.7, 66.45, 53.8, 70.3]], ["C", [54.2, 71.5, 54.45, 72.8]], ["C", [54.7, 74, 55.1, 75.15]], ["C", [55.5, 76.5, 55.9, 77.25]], ["C", [56, 77.35, 56.15, 77.4]], ["C", [56.3, 77.45, 56.4, 77.65]], ["C", [57.3, 77.55, 57.55, 77]], ["C", [57.8, 76.4, 58.1, 75.7]], ["C", [58.7, 74.1, 59.1, 72.35]], ["C", [59.5, 70.65, 60, 68.95]], ["C", [60.3, 67.9, 60.5, 67]], ["C", [60.7, 66, 61, 65.05]], ["C", [62.1, 61.9, 62.8, 58.75]], ["C", [63.5, 55.5, 64.5, 52.55]], ["C", [65, 51.1, 65.4, 49.15]], ["C", [65.8, 47.2, 66.7, 46.5]], ["C", [67.4, 46, 68.3, 45.9]], ["C", [69.2, 45.8, 70.3, 45.8]], ["L", [75.6, 45.8]], ["C", [76.4, 45.8, 77.3, 45.8]], ["C", [78.2, 45.8, 78.8, 46]], ["C", [79.8, 46.4, 79.9, 47.3]], ["C", [80, 48.2, 79.6, 49.3]], ["C", [78.9, 51.6, 78.25, 53.75]], ["C", [77.6, 55.9, 76.8, 58.2]], ["C", [74.4, 65.45, 72.15, 72.85]], ["C", [69.9, 80.15, 67.5, 87.5]], ["C", [67, 89.1, 66.55, 90.6]], ["C", [66.1, 92.2, 65.6, 93.8]], ["C", [65.2, 94.85, 64.85, 95.75]], ["C", [64.5, 96.55, 63.5, 96.95]], ["C", [62.5, 97.5, 60.9, 97.4]], ["C", [59.3, 97.3, 58, 97.3]], ["C", [56.4, 97.3, 54, 97.35]], ["C", [51.6, 97.4, 50.6, 96.85]], ["C", [50, 96.4, 49.7, 95.75]], ["C", [49.4, 95.1, 49.2, 94.3]], ["C", [48.7, 92.9, 48.45, 91.55]], ["C", [48.2, 90.2, 47.8, 88.8]], ["C", [47.5, 87.9, 47.3, 86.95]], ["C", [47.1, 86, 46.7, 85]], ["C", [45.8, 82.05, 45.15, 79]], ["C", [44.5, 75.85, 43.5, 72.9]], ["C", [42.9, 71.1, 42.5, 69.1]], ["C", [42.1, 67.1, 40.9, 65.9]], ["C", [39.9, 65.9, 39.65, 66.65]], ["C", [39.4, 67.35, 39.1, 68.2]], ["C", [38.4, 70.2, 38.05, 72.2]], ["C", [37.7, 74.2, 37, 76.2]], ["C", [35.9, 79.8, 35.15, 83.55]], ["C", [34.4, 87.3, 33.3, 90.9]], ["C", [33.1, 91.6, 32.9, 92.45]], ["C", [32.7, 93.4, 32.5, 94.2]], ["C", [32.3, 95, 31.95, 95.7]], ["C", [31.6, 96.4, 31.1, 96.75]], ["C", [30.6, 97.2, 29.7, 97.25]], ["C", [28.8, 97.3, 27.7, 97.3]], ["L", [19.5, 97.3]], ["C", [18.9, 97.2, 18.4, 97.1]], ["C", [17.9, 96.95, 17.5, 96.75]], ["C", [16.8, 96.3, 16.5, 95.4]], ["C", [16.2, 94.45, 15.9, 93.6]], ["C", [15.4, 92.1, 14.9, 90.45]], ["C", [14.4, 88.9, 13.9, 87.3]], ["C", [11.4, 79.85, 9.15, 72.5]], ["C", [6.9, 65.1, 4.5, 57.7]], ["C", [3.8, 55.7, 3.2, 53.8]], ["C", [2.6, 51.9, 2, 50]], ["C", [1.8, 49.4, 1.55, 48.35]], ["C", [1.3, 47.3, 1.7, 46.65]], ["C", [2, 46.3, 3, 45.9]], ["C", [3.6, 45.9, 3.8, 45.8]], ["L", [11.2, 45.8]], ["C", [12.3, 45.8, 13.3, 45.85]], ["C", [14.3, 45.9, 14.9, 46.3]], ["C", [15.5, 46.65, 15.85, 47.35]], ["C", [16.2, 48, 16.4, 48.8]], ["C", [16.6, 49.7, 16.8, 50.55]], ["C", [17, 51.35, 17.2, 52.1]], ["C", [18.4, 55.55, 19.25, 59.25]], ["C", [20.1, 63, 21.2, 66.6]], ["C", [21.4, 67.2, 21.5, 67.7]], ["C", [21.6, 68.3, 21.8, 68.9]], ["C", [22.3, 70.4, 22.65, 71.9]], ["C", [23, 73.5, 23.5, 75]], ["C", [23.7, 75.65, 24, 76.6]], ["C", [24.3, 77.5, 25.1, 77.7]], ["C", [25.6, 77.75, 25.9, 77.15]], ["C", [26.2, 76.5, 26.4, 76.15]], ["C", [26.9, 74.8, 27.15, 73.3]], ["C", [27.4, 71.75, 27.9, 70.4]], ["C", [28.2, 69.45, 28.4, 68.55]], ["C", [28.6, 67.55, 28.8, 66.7]], ["C", [29.5, 64.3, 30.05, 61.75]], ["C", [30.6, 59.25, 31.3, 56.9]], ["C", [31.6, 55.8, 31.8, 54.8]], ["C", [32, 53.8, 32.3, 52.75]], ["C", [32.7, 51.25, 33.1, 49.15]], ["C", [33.5, 47.05, 34.6, 46.3]], ["C", [35.3, 45.9, 36.2, 45.85]], ["C", [37.1, 45.8, 38.2, 45.8]], ["L", [43.4, 45.8]], ["C", [44.6, 45.8, 45.6, 45.9]]];
__motifs["x"] = [["M", [49.4, 48.7]], ["C", [48.9, 49.7, 48.2, 50.55]], ["C", [47.5, 51.4, 46.9, 52.4]], ["C", [44.6, 55.6, 42.4, 58.8]], ["C", [40.2, 62, 37.9, 65.2]], ["C", [37.3, 66, 36.7, 66.8]], ["C", [36.1, 67.6, 35.6, 68.6]], ["C", [35.4, 68.9, 35.25, 69.4]], ["C", [35.1, 69.9, 35.2, 70.4]], ["C", [35.5, 71.5, 36.05, 72.25]], ["C", [36.6, 73, 37.1, 73.8]], ["C", [37.7, 74.6, 38.3, 75.45]], ["C", [38.9, 76.3, 39.4, 77.1]], ["C", [41.6, 80.2, 43.7, 83.3]], ["C", [45.8, 86.4, 48, 89.6]], ["C", [48.8, 90.8, 49.7, 92]], ["C", [50.6, 93.2, 51.4, 94.5]], ["C", [51.6, 94.8, 51.9, 95.35]], ["C", [52.2, 95.9, 51.9, 96.5]], ["C", [51.7, 97.2, 50.8, 97.3]], ["C", [49.9, 97.4, 48.9, 97.4]], ["L", [39.7, 97.4]], ["C", [39.2, 97.3, 38.7, 97.25]], ["C", [38.2, 97.2, 37.7, 97]], ["C", [36.6, 96.2, 35.9, 95]], ["C", [35.2, 93.8, 34.4, 92.7]], ["C", [33.3, 91.2, 32.3, 89.65]], ["C", [31.3, 88.1, 30.3, 86.6]], ["C", [29.7, 85.7, 28.85, 84.35]], ["C", [28, 83, 26.9, 82.7]], ["C", [26.2, 82.5, 25.7, 82.95]], ["C", [25.2, 83.4, 25, 83.8]], ["C", [24.2, 84.9, 23.45, 86.05]], ["C", [22.7, 87.2, 21.9, 88.4]], ["L", [18, 94.1]], ["C", [17.5, 94.9, 16.95, 95.7]], ["C", [16.4, 96.5, 15.5, 97]], ["C", [14.4, 97.5, 12.35, 97.45]], ["C", [10.3, 97.4, 8.7, 97.4]], ["L", [5.4, 97.4]], ["C", [5, 97.4, 4.55, 97.45]], ["C", [4.1, 97.5, 3.8, 97.4]], ["C", [3.4, 97.3, 3.05, 97.35]], ["C", [2.7, 97.4, 2.4, 97.2]], ["C", [2.1, 97, 1.95, 96.85]], ["C", [1.8, 96.7, 1.6, 96.5]], ["C", [1.5, 95.5, 1.9, 94.85]], ["C", [2.3, 94.2, 2.7, 93.6]], ["C", [3.5, 92.5, 4.25, 91.4]], ["C", [5, 90.3, 5.8, 89.2]], ["C", [7.8, 86.3, 9.8, 83.3]], ["C", [11.8, 80.3, 13.8, 77.3]], ["C", [14.5, 76.4, 15.1, 75.5]], ["C", [15.7, 74.6, 16.3, 73.7]], ["C", [16.8, 73, 17.25, 72.3]], ["C", [17.7, 71.6, 17.9, 70.6]], ["C", [18.1, 70.1, 17.9, 69.7]], ["C", [17.7, 69.3, 17.6, 69.1]], ["C", [17.1, 68, 16.45, 67.15]], ["C", [15.8, 66.3, 15.2, 65.4]], ["C", [12.9, 61.9, 10.55, 58.65]], ["C", [8.2, 55.4, 5.9, 51.9]], ["C", [5.4, 51.1, 4.8, 50.3]], ["C", [4.2, 49.5, 3.7, 48.6]], ["C", [3.5, 48.3, 3.25, 47.9]], ["C", [3, 47.5, 3.2, 47]], ["C", [3.4, 46.5, 3.7, 46.35]], ["C", [4, 46.2, 4.5, 46]], ["C", [5.1, 46, 5.3, 45.9]], ["L", [13.3, 45.9]], ["C", [14.7, 45.9, 15.95, 46]], ["C", [17.2, 46.1, 18, 46.7]], ["C", [18.7, 47.2, 19.25, 48.05]], ["C", [19.8, 48.9, 20.3, 49.7]], ["C", [21.1, 51, 22, 52.25]], ["C", [22.9, 53.5, 23.8, 54.8]], ["C", [24.3, 55.6, 24.95, 56.6]], ["C", [25.6, 57.6, 26.6, 57.9]], ["C", [27, 58, 27.35, 57.85]], ["C", [27.7, 57.7, 27.9, 57.5]], ["C", [28.6, 57, 29, 56.3]], ["C", [29.4, 55.6, 29.9, 54.9]], ["C", [30.7, 53.6, 31.6, 52.35]], ["C", [32.5, 51.1, 33.4, 49.8]], ["C", [34.2, 48.4, 34.95, 47.4]], ["C", [35.7, 46.4, 37.5, 46]], ["C", [38.2, 45.8, 39, 45.85]], ["C", [39.8, 45.9, 40.6, 45.9]], ["L", [46.8, 45.9]], ["C", [47.8, 45.9, 48.75, 46.05]], ["C", [49.7, 46.2, 49.9, 47]], ["C", [50.1, 47.5, 49.85, 47.95]], ["C", [49.6, 48.4, 49.4, 48.7]]];
__motifs["y"] = [["M", [51.4, 48.2]], ["C", [51.2, 48.95, 50.9, 49.8]], ["C", [50.6, 50.6, 50.3, 51.35]], ["C", [48.9, 54.85, 47.6, 58.55]], ["C", [46.3, 62.2, 44.9, 65.65]], ["C", [44.3, 67.2, 43.8, 68.75]], ["C", [43.3, 70.3, 42.7, 71.75]], ["C", [42.2, 73.2, 41.7, 74.5]], ["C", [41.2, 75.75, 40.7, 77.2]], ["C", [38.7, 82.15, 36.95, 87.25]], ["C", [35.2, 92.3, 33.2, 97.15]], ["C", [32.9, 97.9, 32.75, 98.5]], ["C", [32.6, 99.05, 32.3, 99.7]], ["C", [31.5, 101.6, 30.8, 103.35]], ["C", [30.1, 105.15, 29.3, 106.85]], ["C", [28.5, 108.5, 27.4, 109.9]], ["C", [26.3, 111.25, 24.7, 112.4]], ["C", [23.4, 113.25, 21.85, 113.85]], ["C", [20.3, 114.4, 18.5, 114.9]], ["C", [17.7, 115.15, 16.9, 115.15]], ["C", [16.1, 115.15, 15.3, 115.3]], ["L", [12.7, 115.3]], ["C", [11.9, 115.3, 10.8, 115.3]], ["C", [9.7, 115.3, 8.65, 115.2]], ["C", [7.6, 115.15, 6.75, 115]], ["C", [5.9, 114.85, 5.5, 114.55]], ["C", [5, 114.1, 4.85, 113.55]], ["C", [4.7, 113.05, 4.5, 112.2]], ["L", [4.5, 109.8]], ["C", [4.5, 108.1, 4.5, 106.25]], ["C", [4.5, 104.35, 5.7, 103.8]], ["C", [6.2, 103.6, 7.05, 103.55]], ["C", [7.9, 103.5, 8.5, 103.7]], ["L", [12.2, 103.7]], ["C", [12.6, 103.6, 13, 103.6]], ["C", [13.4, 103.6, 13.8, 103.4]], ["C", [16.9, 102.55, 17.8, 99.3]], ["C", [18, 98.9, 18.2, 98.15]], ["C", [18.4, 97.3, 18.2, 96.7]], ["C", [18, 96.25, 18, 95.7]], ["C", [18, 95.2, 17.8, 94.7]], ["C", [17.2, 92.7, 16.5, 90.75]], ["C", [15.8, 88.8, 15, 86.9]], ["C", [14.2, 85, 13.55, 83.1]], ["C", [12.9, 81.2, 12.1, 79.3]], ["C", [11.6, 78.1, 11.25, 76.9]], ["C", [10.9, 75.7, 10.4, 74.5]], ["C", [8.8, 70.7, 7.45, 66.7]], ["C", [6.1, 62.7, 4.5, 58.9]], ["C", [4.3, 58.5, 4.3, 58.25]], ["C", [4.3, 58, 4.1, 57.7]], ["C", [3.3, 55.9, 2.75, 54.05]], ["C", [2.2, 52.2, 1.4, 50.5]], ["C", [1.2, 49.9, 0.75, 48.7]], ["C", [0.3, 47.6, 0.6, 46.75]], ["C", [0.9, 46, 1.9, 45.8]], ["C", [2.1, 45.7, 2.25, 45.75]], ["C", [2.4, 45.8, 2.6, 45.7]], ["L", [10.2, 45.7]], ["C", [11.2, 45.7, 12.2, 45.7]], ["C", [13.2, 45.7, 13.9, 46.1]], ["C", [15.1, 46.85, 15.55, 48.55]], ["C", [16, 50.3, 16.5, 51.7]], ["C", [17, 52.85, 17.35, 54.2]], ["C", [17.7, 55.45, 18.2, 56.7]], ["C", [19, 58.95, 19.7, 61.2]], ["C", [20.4, 63.45, 21.2, 65.65]], ["L", [23.3, 71.95]], ["C", [23.6, 72.9, 23.85, 73.8]], ["C", [24.1, 74.8, 24.5, 75.65]], ["C", [24.8, 76.5, 25.15, 77.5]], ["C", [25.5, 78.45, 26.6, 78.35]], ["C", [26.8, 78.15, 26.95, 78.1]], ["C", [27.1, 78.05, 27.3, 77.85]], ["C", [27.6, 77.4, 27.8, 76.9]], ["C", [28, 76.35, 28.2, 75.85]], ["C", [28.7, 74.8, 29, 73.55]], ["C", [29.3, 72.25, 29.7, 71.1]], ["C", [31.1, 66.9, 32.4, 62.8]], ["C", [33.7, 58.7, 35.1, 54.5]], ["C", [35.6, 53.05, 35.95, 51.75]], ["C", [36.3, 50.4, 36.8, 49.05]], ["C", [37.1, 48.3, 37.35, 47.55]], ["C", [37.6, 46.75, 38.3, 46.3]], ["C", [38.9, 45.8, 39.8, 45.75]], ["C", [40.7, 45.7, 41.8, 45.7]], ["L", [47.9, 45.7]], ["C", [48.9, 45.7, 49.8, 45.8]], ["C", [50.7, 45.9, 51.2, 46.4]], ["C", [51.8, 47.05, 51.4, 48.2]]];
__motifs["z"] = [["M", [47.6, 49.4]], ["C", [47.8, 49.9, 47.75, 50.55]], ["C", [47.7, 51.2, 47.7, 51.7]], ["C", [47.7, 52.95, 47.7, 54.3]], ["C", [47.7, 55.6, 47.3, 56.5]], ["C", [46.9, 57.3, 46.4, 57.85]], ["C", [45.9, 58.4, 45.4, 58.95]], ["C", [44.8, 59.8, 44.1, 60.55]], ["C", [43.4, 61.3, 42.8, 62.1]], ["C", [42.6, 62.3, 42.4, 62.45]], ["C", [42.2, 62.6, 42, 62.8]], ["C", [41.5, 63.5, 40.85, 64.1]], ["C", [40.2, 64.7, 39.7, 65.4]], ["C", [38.1, 67.5, 36.3, 69.3]], ["C", [34.5, 71.1, 32.9, 73.2]], ["L", [32.1, 74]], ["C", [31.6, 74.7, 30.95, 75.3]], ["C", [30.3, 75.9, 29.8, 76.6]], ["C", [29.3, 77.3, 28.65, 77.9]], ["C", [28, 78.5, 27.5, 79.1]], ["C", [27, 79.7, 26.55, 80.2]], ["C", [26.1, 80.7, 25.6, 81.3]], ["C", [25.2, 81.85, 24.8, 82.25]], ["C", [24.4, 82.7, 24, 83.2]], ["C", [23.6, 83.6, 23.3, 84]], ["C", [23, 84.4, 22.8, 84.9]], ["C", [22.7, 85.1, 22.65, 85.4]], ["C", [22.6, 85.7, 22.8, 85.95]], ["C", [23, 86.5, 23.5, 86.55]], ["C", [24, 86.6, 24.6, 86.8]], ["C", [25.6, 87, 26.85, 86.95]], ["C", [28.1, 86.9, 29.2, 86.9]], ["L", [43.9, 86.9]], ["C", [45.7, 86.9, 47.3, 87]], ["C", [48.9, 87.1, 49.4, 88.5]], ["C", [49.6, 89, 49.6, 89.6]], ["C", [49.6, 90.2, 49.6, 90.9]], ["C", [49.6, 92.4, 49.6, 94.35]], ["C", [49.6, 96.2, 48.7, 96.9]], ["C", [48.1, 97.4, 47.2, 97.4]], ["C", [46.3, 97.4, 45.2, 97.4]], ["L", [6.7, 97.4]], ["C", [5.6, 97.4, 4.65, 97.4]], ["C", [3.7, 97.4, 3, 96.9]], ["C", [2.4, 96.45, 2.3, 95.3]], ["C", [2.2, 94.2, 2.2, 93.1]], ["C", [2.2, 91.7, 2.15, 90.05]], ["C", [2.1, 88.4, 2.5, 87.3]], ["C", [2.7, 86.7, 3, 86.15]], ["C", [3.3, 85.6, 3.7, 85.1]], ["C", [4.5, 84.2, 5.3, 83.35]], ["C", [6.1, 82.5, 6.9, 81.5]], ["C", [7.4, 81, 7.7, 80.8]], ["C", [9.1, 78.9, 10.7, 77.3]], ["C", [12.3, 75.65, 13.7, 73.9]], ["C", [14.1, 73.4, 14.5, 73]], ["C", [14.9, 72.6, 15.2, 72.1]], ["C", [15.7, 71.4, 16.35, 70.85]], ["C", [17, 70.3, 17.5, 69.45]], ["C", [17.7, 69.3, 17.9, 69.15]], ["C", [18.1, 69, 18.3, 68.8]], ["C", [18.8, 68, 19.45, 67.35]], ["C", [20.1, 66.8, 20.6, 66.1]], ["C", [20.8, 65.8, 21.15, 65.45]], ["C", [21.5, 65.2, 21.8, 64.9]], ["C", [22.6, 63.8, 23.5, 62.9]], ["C", [24.4, 62, 25.2, 61]], ["C", [25.7, 60.3, 26.35, 59.7]], ["C", [27, 59.05, 27.2, 58.2]], ["C", [27.4, 57.6, 27.05, 57.25]], ["C", [26.7, 56.95, 26.4, 56.8]], ["C", [25.3, 56.3, 23.75, 56.35]], ["C", [22.2, 56.4, 20.8, 56.4]], ["L", [10, 56.4]], ["C", [8.8, 56.4, 7.45, 56.45]], ["C", [6.1, 56.5, 5.3, 56]], ["C", [4.4, 55.5, 4.3, 54.1]], ["C", [4.2, 52.7, 4.2, 51.3]], ["C", [4.2, 50.75, 4.15, 50.2]], ["C", [4.1, 49.6, 4.2, 49.1]], ["L", [4.2, 48.3]], ["C", [4.3, 48, 4.35, 47.6]], ["C", [4.4, 47.2, 4.6, 47]], ["C", [5.2, 46.2, 5.9, 46.1]], ["C", [6.1, 46, 6.4, 46.05]], ["C", [6.7, 46.1, 6.9, 45.9]], ["L", [43.4, 45.9]], ["C", [44.3, 45.9, 45.2, 45.95]], ["C", [46.1, 46, 46.6, 46.4]], ["C", [47.2, 46.75, 47.6, 47.9]], ["L", [47.6, 49.4]]];
__motifs["1"] = [["M", [7.5, 47.4]], ["C", [7.5, 46.1, 7.5, 44.7]], ["C", [7.5, 43.3, 8, 42.5]], ["C", [8.5, 41.8, 9.4, 41.7]], ["C", [10.4, 41.6, 11.4, 41.4]], ["L", [12.4, 41.4]], ["C", [13, 41.2, 13.65, 41.15]], ["C", [14.3, 41.1, 14.9, 41]], ["C", [16.1, 40.6, 17.15, 40.3]], ["C", [18.2, 40, 19.3, 39.5]], ["C", [21.6, 38.5, 23.25, 36.9]], ["C", [24.9, 35.3, 26.1, 33.3]], ["C", [26.7, 32.2, 27.2, 30.55]], ["C", [27.7, 28.9, 28.6, 28.3]], ["C", [29.1, 27.9, 29.7, 27.8]], ["C", [29.9, 27.7, 30.2, 27.75]], ["C", [30.4, 27.8, 30.6, 27.7]], ["L", [34.4, 27.7]], ["C", [34.9, 27.7, 35.4, 27.65]], ["C", [35.9, 27.6, 36.45, 27.8]], ["L", [36.9, 27.8]], ["C", [37.4, 27.9, 37.85, 28.05]], ["C", [38.35, 28.2, 38.55, 28.5]], ["C", [39, 29.2, 39.05, 30.35]], ["C", [39.1, 31.5, 39.1, 32.8]], ["L", [39.1, 91.3]], ["C", [39.1, 92.6, 39.15, 94.15]], ["C", [39.2, 95.7, 38.7, 96.5]], ["C", [38.35, 97, 37.75, 97.15]], ["C", [37.2, 97.3, 36.45, 97.5]], ["L", [29.9, 97.5]], ["C", [29.4, 97.5, 28.85, 97.55]], ["C", [28.3, 97.6, 27.8, 97.5]], ["L", [27.3, 97.5]], ["C", [26.8, 97.3, 26.35, 97.15]], ["C", [25.9, 97, 25.6, 96.6]], ["C", [25.1, 96, 25.1, 95]], ["C", [25.1, 94, 25.1, 92.9]], ["L", [25.1, 57.7]], ["C", [25.1, 56.9, 25.15, 55.85]], ["C", [25.2, 54.8, 25, 54.1]], ["C", [24.5, 52.4, 23.1, 52.25]], ["C", [21.7, 52.1, 19.7, 52.1]], ["L", [12.5, 52.1]], ["C", [11.1, 52.1, 9.8, 52]], ["C", [8.5, 51.9, 7.9, 51.1]], ["C", [7.7, 50.7, 7.7, 50.35]], ["C", [7.7, 50, 7.6, 49.5]], ["C", [7.4, 49, 7.45, 48.45]], ["C", [7.5, 47.9, 7.5, 47.4]]];
__motifs["2"] = [["M", [52.95, 48.1]], ["C", [53, 50.3, 52.7, 52.4]], ["C", [52.4, 54.5, 51.7, 56.1]], ["C", [50.7, 58.7, 49.1, 61.05]], ["C", [47.1, 64, 44.5, 66.1]], ["C", [41.9, 68.2, 39.1, 70.2]], ["C", [38.3, 70.7, 37.45, 71.3]], ["C", [36.6, 71.9, 35.8, 72.4]], ["C", [33.6, 73.75, 31.55, 75.2]], ["C", [29.5, 76.6, 27.5, 78.1]], ["C", [26.8, 78.6, 26.25, 79.1]], ["C", [25.7, 79.6, 25.1, 80.1]], ["C", [25, 80.2, 24.95, 80.3]], ["C", [24.9, 80.4, 24.7, 80.5]], ["C", [24.1, 81, 23.45, 81.65]], ["C", [22.8, 82.3, 22.4, 83.1]], ["C", [22.3, 83.3, 22.15, 83.55]], ["C", [22, 83.8, 22.1, 84.3]], ["C", [22.3, 84.8, 22.8, 85]], ["C", [23.3, 85.2, 23.8, 85.3]], ["L", [24.3, 85.3]], ["C", [24.8, 85.5, 25.45, 85.45]], ["C", [26.1, 85.4, 26.6, 85.4]], ["L", [46.3, 85.4]], ["C", [47.7, 85.4, 49.7, 85.35]], ["C", [51.7, 85.3, 52.5, 85.9]], ["C", [53, 86.25, 53.2, 87.1]], ["C", [53.4, 87.9, 53.45, 88.95]], ["C", [53.5, 90, 53.45, 91.05]], ["C", [53.4, 92.1, 53.4, 93]], ["C", [53.4, 93.6, 53.45, 94.3]], ["C", [53.5, 95, 53.3, 95.5]], ["C", [53.2, 96.5, 52.3, 97]], ["C", [51.7, 97.4, 50.75, 97.4]], ["C", [49.8, 97.4, 48.9, 97.4]], ["L", [7.4, 97.4]], ["C", [6.5, 97.4, 5.45, 97.45]], ["C", [4.4, 97.5, 3.7, 97.2]], ["C", [2.7, 96.7, 2.45, 95.6]], ["C", [2.2, 94.5, 2.5, 93.2]], ["C", [2.5, 92.9, 2.55, 92.55]], ["C", [2.6, 92.2, 2.6, 91.9]], ["C", [2.8, 91.1, 3, 90.2]], ["C", [3.2, 89.3, 3.4, 88.5]], ["C", [4.9, 84.05, 7.2, 80.8]], ["C", [9.7, 77.3, 13.1, 74.55]], ["C", [16.5, 71.8, 20, 69.2]], ["C", [22.8, 67.3, 25.55, 65.4]], ["C", [28.3, 63.6, 31.1, 61.6]], ["C", [31.8, 61.05, 32.35, 60.6]], ["C", [32.9, 60.1, 33.5, 59.6]], ["C", [34.9, 58.5, 36.1, 56.9]], ["C", [37.3, 55.4, 38, 53.7]], ["C", [38.2, 53.2, 38.3, 52.7]], ["C", [38.4, 52.3, 38.6, 51.8]], ["C", [38.8, 51, 38.9, 49.6]], ["C", [39, 48.2, 38.8, 47.2]], ["C", [38.7, 46.65, 38.6, 46.1]], ["C", [38.5, 45.5, 38.3, 45]], ["C", [36.9, 41.4, 34, 39.7]], ["C", [33.4, 39.3, 32.7, 39.05]], ["C", [32, 38.8, 31.2, 38.6]], ["C", [30.7, 38.35, 30.15, 38.45]], ["C", [29.6, 38.5, 29, 38.25]], ["C", [28.3, 38.1, 27.4, 38.2]], ["C", [26.5, 38.35, 25.9, 38.6]], ["C", [22, 39.8, 20.1, 42.9]], ["C", [19.2, 44.3, 18.7, 45.85]], ["C", [18.2, 47.4, 17.7, 49.2]], ["C", [17.4, 50.5, 17.35, 51.85]], ["C", [17.3, 53.2, 16.2, 53.9]], ["C", [15.7, 54.2, 14.85, 54.25]], ["C", [14, 54.3, 13.1, 54.3]], ["L", [8, 54.3]], ["C", [6.9, 54.3, 6.05, 54.25]], ["C", [5.2, 54.2, 4.6, 53.7]], ["C", [4.1, 53.4, 3.9, 52.6]], ["C", [3.7, 51.8, 3.9, 51.1]], ["L", [3.9, 50.2]], ["C", [4, 49.6, 4.05, 48.95]], ["C", [4.1, 48.3, 4.2, 47.7]], ["C", [4.5, 46.4, 4.7, 45.15]], ["C", [4.9, 43.9, 5.4, 42.8]], ["C", [5.7, 41.9, 6, 41.1]], ["C", [6.3, 40.25, 6.6, 39.5]], ["C", [6.9, 38.9, 7.3, 38.2]], ["C", [7.7, 37.6, 8.1, 37]], ["C", [10.1, 33.7, 12.85, 31.55]], ["C", [15.6, 29.4, 19.4, 27.75]], ["C", [20.8, 27.3, 22.2, 27.05]], ["C", [23.6, 26.8, 25.1, 26.4]], ["C", [25.6, 26.4, 26.1, 26.35]], ["C", [26.6, 26.3, 27.1, 26.2]], ["C", [27.3, 26.2, 27.65, 26.25]], ["C", [28, 26.3, 28.2, 26.2]], ["C", [36.2, 26, 41.65, 29.1]], ["C", [47.1, 32.2, 50.1, 37]], ["C", [50.6, 37.8, 50.9, 38.6]], ["C", [51.2, 39.4, 51.6, 40.2]], ["C", [52.2, 41.8, 52.55, 43.85]], ["C", [52.9, 45.9, 52.95, 48.1]]];
__motifs["3"] = [["M", [51, 45]], ["C", [51.1, 47.7, 50.6, 49.7]], ["C", [49.8, 52.6, 48.5, 54.6]], ["C", [48.2, 54.95, 47.9, 55.25]], ["C", [47.6, 55.6, 47.3, 55.9]], ["C", [46.9, 56.5, 46.7, 56.7]], ["C", [45.2, 57.7, 44.2, 58.7]], ["C", [44, 58.9, 43.8, 59.1]], ["C", [43.6, 59.35, 43.7, 59.8]], ["C", [43.7, 60.3, 44.5, 60.9]], ["C", [45.2, 61.35, 45.9, 61.8]], ["C", [46.6, 62.2, 47.4, 62.7]], ["C", [50.8, 65.2, 52.5, 69.45]], ["C", [52.9, 70.4, 53.1, 71.45]], ["C", [53.3, 72.5, 53.5, 73.55]], ["C", [53.7, 74.05, 53.55, 74.7]], ["C", [53.4, 75.3, 53.6, 75.85]], ["C", [53.7, 76.25, 53.65, 77]], ["C", [53.6, 77.7, 53.5, 78.05]], ["C", [53.5, 79, 53.4, 79.4]], ["C", [53.2, 80.15, 53.05, 81]], ["C", [52.9, 81.8, 52.7, 82.55]], ["C", [50.8, 88.25, 47.35, 91.5]], ["C", [43.9, 94.65, 38.5, 96.85]], ["C", [37.4, 97.25, 36.3, 97.55]], ["C", [35.2, 97.8, 34, 98.1]], ["C", [33.5, 98.3, 32.95, 98.3]], ["C", [32.4, 98.3, 31.9, 98.5]], ["C", [31.1, 98.5, 30.35, 98.55]], ["C", [29.6, 98.55, 28.8, 98.65]], ["C", [28.4, 98.75, 27.65, 98.7]], ["C", [26.9, 98.65, 26.5, 98.55]], ["L", [24.8, 98.55]], ["C", [24.5, 98.5, 24.1, 98.55]], ["C", [23.7, 98.55, 23.4, 98.5]], ["C", [22.6, 98.3, 21.8, 98.2]], ["C", [21, 98.1, 20.3, 97.9]], ["C", [19.9, 97.7, 19.55, 97.7]], ["C", [19.2, 97.7, 18.9, 97.6]], ["C", [17.8, 97.25, 16.85, 96.9]], ["C", [15.9, 96.55, 15, 96.2]], ["C", [11.2, 94.45, 8.4, 91.65]], ["C", [5.6, 88.75, 3.9, 85]], ["C", [3.4, 83.9, 3.1, 82.65]], ["C", [2.8, 81.5, 2.4, 80.15]], ["C", [2.2, 79.7, 2.25, 79.15]], ["C", [2.3, 78.55, 2.1, 78.05]], ["C", [1.9, 77.4, 1.9, 76.4]], ["C", [1.9, 75.5, 2.1, 74.8]], ["C", [2.7, 73.5, 4.8, 73.45]], ["C", [6.9, 73.4, 8.8, 73.4]], ["C", [9.5, 73.4, 10.3, 73.35]], ["C", [11.1, 73.3, 11.7, 73.5]], ["L", [12.8, 73.5]], ["C", [13.9, 73.65, 14.3, 73.95]], ["C", [15.1, 74.45, 15.25, 75.55]], ["C", [15.4, 76.55, 15.8, 77.7]], ["C", [16.3, 79.1, 16.7, 80.2]], ["C", [17.1, 81.4, 17.9, 82.45]], ["C", [19.7, 85.2, 23.4, 86.55]], ["C", [24, 86.75, 24.6, 86.8]], ["C", [25.2, 86.85, 25.8, 87.1]], ["L", [26.3, 87.1]], ["C", [27.3, 87.3, 28.5, 87.2]], ["C", [29.7, 87.1, 30.5, 86.75]], ["C", [31.5, 86.55, 32.2, 86.35]], ["C", [34.2, 85.6, 35.7, 84.2]], ["C", [37.2, 82.9, 38, 80.9]], ["C", [38.3, 80.25, 38.45, 79.6]], ["C", [38.6, 78.9, 38.8, 78.05]], ["C", [39, 77.6, 39.05, 76.45]], ["C", [39.1, 75.4, 38.9, 74.8]], ["C", [38.9, 74.6, 38.85, 74.35]], ["C", [38.8, 74.15, 38.8, 73.95]], ["C", [38.7, 73.5, 38.6, 72.95]], ["C", [38.5, 72.35, 38.3, 71.85]], ["C", [37.3, 69.55, 35.65, 68.35]], ["C", [34, 67.1, 31.4, 66.3]], ["C", [30.7, 66.1, 29.95, 66.1]], ["C", [29.2, 66.1, 28.4, 65.85]], ["C", [28.1, 65.75, 27.75, 65.75]], ["C", [27.4, 65.75, 27.2, 65.75]], ["L", [26.3, 65.75]], ["C", [26, 65.65, 25.65, 65.7]], ["C", [25.3, 65.75, 25.1, 65.65]], ["C", [24.3, 65.45, 23.8, 65.2]], ["C", [23.3, 64.9, 23.1, 64.3]], ["C", [22.9, 63.75, 22.85, 63.1]], ["C", [22.8, 62.4, 22.8, 61.55]], ["C", [22.8, 60.3, 22.85, 58.9]], ["C", [22.9, 57.45, 23.4, 56.7]], ["C", [23.7, 56.3, 24.55, 56.1]], ["C", [25.4, 55.9, 26.4, 55.8]], ["C", [27.4, 55.7, 28.35, 55.65]], ["C", [29.3, 55.6, 29.9, 55.35]], ["C", [32.7, 54.6, 34.45, 53.45]], ["C", [36.2, 52.3, 37.2, 49.7]], ["C", [37.4, 49.05, 37.6, 47.9]], ["C", [37.8, 46.65, 37.6, 45.7]], ["C", [37.4, 44.85, 37.2, 44.05]], ["C", [37, 43.2, 36.5, 42.45]], ["C", [34.7, 39.4, 31, 38.15]], ["C", [30.5, 38, 30.05, 38]], ["C", [29.6, 38, 29.1, 37.8]], ["C", [28.3, 37.6, 27.15, 37.7]], ["C", [26, 37.8, 25.3, 38]], ["C", [24.8, 38.15, 24.45, 38.2]], ["C", [24.1, 38.25, 23.6, 38.45]], ["C", [20.6, 39.7, 18.9, 42.3]], ["C", [18.3, 43.2, 17.95, 44.2]], ["C", [17.6, 45.2, 17.3, 46.3]], ["C", [17, 47.4, 16.8, 48.35]], ["C", [16.6, 49.3, 15.8, 49.8]], ["C", [15.5, 50, 14.5, 50.2]], ["L", [13.4, 50.2]], ["C", [12.9, 50.3, 12.2, 50.25]], ["C", [11.5, 50.2, 10.9, 50.2]], ["C", [9.3, 50.2, 7.35, 50.3]], ["C", [5.4, 50.4, 4.4, 49.6]], ["C", [4, 49.3, 3.8, 48.45]], ["C", [3.6, 47.6, 3.8, 46.75]], ["C", [4, 46.3, 4, 45.8]], ["C", [4, 45.3, 4.2, 44.75]], ["C", [4.5, 43.6, 4.8, 42.4]], ["C", [5.1, 41.3, 5.6, 40.2]], ["C", [7.7, 35.4, 10.9, 32.3]], ["C", [14.1, 29.3, 19.2, 27.4]], ["C", [20.3, 27, 21.55, 26.8]], ["C", [22.8, 26.6, 24.1, 26.4]], ["C", [24.9, 26.3, 25.55, 26.25]], ["C", [26.2, 26.15, 26.9, 26.15]], ["C", [31.9, 25.95, 35.7, 27.25]], ["C", [39.5, 28.5, 42.5, 30.4]], ["C", [43.1, 30.8, 43.65, 31.25]], ["C", [44.2, 31.7, 44.8, 32.15]], ["C", [47.7, 34.25, 49.3, 38]], ["C", [49.5, 38.55, 49.8, 39.2]], ["C", [50.1, 39.8, 50.3, 40.45]], ["C", [50.9, 42.3, 51, 45]]];
__motifs["4"] = [["M", [29, 48]], ["C", [28.5, 48.4, 28.05, 49.05]], ["C", [27.6, 49.75, 27.1, 50.3]], ["C", [26.4, 51.35, 25.65, 52.3]], ["C", [24.9, 53.15, 24.1, 54.3]], ["C", [23.8, 54.8, 23.4, 55.25]], ["C", [23, 55.75, 22.6, 56.3]], ["L", [17.2, 63.45]], ["C", [16.8, 63.95, 16.45, 64.6]], ["C", [16.1, 65.2, 15.6, 65.75]], ["C", [15.4, 66.15, 15.05, 66.5]], ["C", [14.7, 66.9, 14.5, 67.35]], ["C", [14.3, 67.85, 14.4, 68.4]], ["C", [14.5, 69, 14.9, 69.2]], ["C", [15.5, 69.65, 16.65, 69.65]], ["C", [17.8, 69.65, 18.8, 69.65]], ["L", [24.7, 69.65]], ["C", [25.4, 69.65, 26.2, 69.7]], ["C", [27, 69.75, 27.6, 69.65]], ["L", [28.6, 69.65]], ["C", [29.3, 69.45, 29.85, 69.35]], ["C", [30.4, 69.2, 30.7, 68.7]], ["C", [31.1, 68.15, 31.2, 67.5]], ["C", [31.3, 66.9, 31.3, 66.05]], ["L", [31.3, 65]], ["C", [31.4, 64.5, 31.35, 63.75]], ["C", [31.3, 63.1, 31.3, 62.6]], ["L", [31.3, 54.2]], ["C", [31.3, 53.65, 31.35, 53.15]], ["C", [31.4, 52.7, 31.3, 52.2]], ["C", [31.1, 51.55, 31.25, 50.9]], ["C", [31.4, 50.3, 31.2, 49.65]], ["C", [31, 48.85, 30.95, 48.25]], ["C", [30.9, 47.55, 29.9, 47.45]], ["C", [29.7, 47.65, 29.45, 47.7]], ["C", [29.2, 47.75, 29, 48]], ["M", [44.6, 31.95]], ["L", [44.6, 64.6]], ["C", [44.6, 65.35, 44.6, 66.3]], ["C", [44.6, 67.2, 44.8, 67.9]], ["C", [45.05, 69.2, 46.4, 69.45]], ["C", [47.55, 69.9, 49.25, 69.6]], ["C", [51, 69.4, 52.2, 69.75]], ["C", [53.75, 70.3, 53.8, 72]], ["C", [53.85, 73.65, 53.85, 75.65]], ["L", [53.85, 78.5]], ["C", [53.65, 79.5, 53.4, 80.1]], ["C", [53.15, 80.8, 52.3, 81]], ["C", [51.35, 81.3, 50.3, 81.25]], ["C", [49.15, 81.2, 48.2, 81.2]], ["C", [47.15, 81.2, 46.3, 81.45]], ["C", [45.35, 81.7, 44.95, 82.5]], ["C", [44.8, 82.9, 44.6, 83.9]], ["L", [44.6, 85]], ["C", [44.5, 85.5, 44.55, 86.2]], ["C", [44.6, 87, 44.6, 87.7]], ["L", [44.6, 92.9]], ["C", [44.6, 94, 44.6, 94.95]], ["C", [44.6, 95.9, 44.1, 96.45]], ["C", [43.8, 96.9, 43.3, 97.05]], ["C", [42.85, 97.2, 42.4, 97.4]], ["L", [41.9, 97.4]], ["C", [41.05, 97.6, 40, 97.5]], ["C", [38.85, 97.4, 38.1, 97.4]], ["C", [37.1, 97.4, 36.05, 97.45]], ["C", [35, 97.5, 34.1, 97.4]], ["C", [33.2, 97.3, 32.5, 97]], ["C", [31.8, 96.65, 31.5, 96]], ["C", [31.3, 95.5, 31.3, 94.75]], ["C", [31.3, 94, 31.3, 93.2]], ["L", [31.3, 88.35]], ["C", [31.3, 87.9, 31.35, 87.2]], ["C", [31.4, 86.5, 31.3, 86]], ["L", [31.3, 83.9]], ["C", [31.1, 83.1, 30.9, 82.6]], ["C", [30.7, 82.05, 30.2, 81.7]], ["C", [29.3, 81.1, 27.4, 81.15]], ["C", [25.5, 81.2, 24.1, 81.2]], ["L", [9.3, 81.2]], ["C", [8.5, 81.2, 7.45, 81.25]], ["C", [6.4, 81.3, 5.35, 81.25]], ["C", [4.3, 81.2, 3.45, 81.05]], ["C", [2.6, 80.9, 2.3, 80.4]], ["C", [1.7, 79.7, 1.7, 78.2]], ["L", [1.7, 77]], ["C", [1.5, 76.3, 1.55, 75.5]], ["C", [1.6, 74.7, 1.6, 73.9]], ["C", [1.6, 72.7, 1.6, 71.15]], ["C", [1.6, 69.6, 1.9, 68.6]], ["C", [2.1, 67.9, 2.45, 67.3]], ["C", [2.8, 66.7, 3.2, 66.2]], ["C", [4.2, 64.8, 5.2, 63.6]], ["C", [6.2, 62.4, 7.2, 61.05]], ["C", [9.8, 57.2, 12.65, 53.55]], ["C", [15.5, 49.9, 18.2, 46.15]], ["C", [18.7, 45.3, 19.35, 44.6]], ["C", [20, 43.95, 20.5, 43.1]], ["C", [22.3, 40.6, 24.15, 38.2]], ["C", [26, 35.85, 27.8, 33.35]], ["C", [28.3, 32.5, 28.9, 31.85]], ["C", [29.5, 31.15, 30.1, 30.3]], ["C", [30.4, 29.8, 30.7, 29.4]], ["C", [31, 28.95, 31.5, 28.5]], ["C", [31.9, 28.3, 32.25, 28.1]], ["C", [32.6, 27.9, 33.1, 27.8]], ["C", [33.3, 27.7, 33.65, 27.75]], ["C", [34, 27.8, 34.2, 27.6]], ["L", [40.65, 27.6]], ["C", [41.8, 27.6, 42.7, 27.7]], ["C", [43.6, 27.75, 44.1, 28.45]], ["C", [44.5, 29.1, 44.55, 29.95]], ["C", [44.6, 30.9, 44.6, 31.95]]];
__motifs["5"] = [["M", [50, 36.45]], ["C", [50, 37.1, 49.8, 37.6]], ["C", [49.3, 38.8, 48.15, 38.95]], ["C", [47, 39.1, 45.3, 39.1]], ["L", [26.8, 39.1]], ["C", [25.4, 39.1, 23.95, 39.15]], ["C", [22.5, 39.2, 21.7, 39.8]], ["C", [21.2, 40.2, 20.9, 40.95]], ["C", [20.6, 41.7, 20.45, 42.65]], ["C", [20.3, 43.6, 20.2, 44.6]], ["C", [20.1, 45.6, 19.9, 46.3]], ["C", [19.7, 47.1, 19.6, 47.9]], ["C", [19.5, 48.7, 19.3, 49.5]], ["C", [19.2, 49.8, 19.2, 50.5]], ["C", [19, 51, 19, 51.65]], ["C", [19, 52.3, 19.2, 52.7]], ["C", [19.3, 52.9, 19.4, 53]], ["C", [19.5, 53.1, 19.7, 53.3]], ["C", [20.6, 53.4, 21.2, 53.1]], ["C", [21.8, 52.75, 22.3, 52.5]], ["C", [23, 52, 23.7, 51.7]], ["C", [24.4, 51.4, 25.2, 51.1]], ["C", [26.4, 50.6, 28.05, 50.35]], ["C", [29.7, 50.1, 31.55, 50]], ["C", [33.4, 49.9, 35.15, 50.1]], ["C", [36.9, 50.3, 38.2, 50.65]], ["C", [39.3, 51.1, 40.45, 51.5]], ["C", [41.6, 51.9, 42.6, 52.5]], ["C", [48.8, 56.1, 51.7, 62.6]], ["C", [52.2, 63.8, 52.5, 65.05]], ["C", [52.8, 66.3, 53.1, 67.7]], ["C", [53.4, 68.9, 53.6, 70.6]], ["C", [53.8, 72.3, 53.8, 74]], ["C", [53.8, 75.65, 53.6, 77.35]], ["C", [53.4, 79, 53, 80.15]], ["C", [52.4, 81.8, 51.85, 83.3]], ["C", [51.3, 84.8, 50.5, 86.15]], ["C", [49.9, 87.2, 49.25, 88.1]], ["C", [48.6, 89, 47.9, 89.8]], ["C", [47.8, 89.9, 47.7, 89.95]], ["C", [47.6, 90, 47.5, 90.1]], ["C", [47.1, 90.55, 46.7, 91.05]], ["C", [46.3, 91.5, 45.8, 91.9]], ["C", [45.7, 92, 45.65, 92.1]], ["C", [45.6, 92.2, 45.4, 92.3]], ["C", [44.9, 92.65, 44.45, 93.1]], ["C", [44, 93.5, 43.5, 93.9]], ["C", [40.3, 96.2, 36.2, 97.5]], ["C", [35.4, 97.8, 34.5, 97.95]], ["C", [33.6, 98.1, 32.6, 98.3]], ["C", [31.8, 98.55, 30.9, 98.55]], ["C", [30, 98.6, 28.9, 98.7]], ["C", [28.5, 98.7, 28.1, 98.75]], ["C", [27.7, 98.8, 27.3, 98.7]], ["L", [26.6, 98.7]], ["C", [26.1, 98.6, 25.55, 98.6]], ["C", [25, 98.6, 24.5, 98.6]], ["C", [23.4, 98.35, 22.25, 98.3]], ["C", [21.1, 98.25, 20, 97.95]], ["C", [17.7, 97.2, 15.6, 96.45]], ["C", [13.5, 95.6, 11.7, 94.5]], ["C", [11.1, 94.15, 10.55, 93.75]], ["C", [10, 93.3, 9.4, 92.8]], ["L", [8.8, 92.25]], ["C", [8.3, 91.95, 7.95, 91.5]], ["C", [7.6, 91.1, 7.3, 90.7]], ["C", [6.9, 90.2, 6.5, 89.9]], ["C", [6.1, 89.5, 5.8, 89]], ["C", [4.8, 87.6, 4.1, 86.05]], ["C", [3.4, 84.4, 2.8, 82.6]], ["C", [2.6, 81.85, 2.3, 80.25]], ["C", [2, 78.7, 2.5, 77.9]], ["C", [3, 77.1, 3.95, 76.95]], ["C", [4.9, 76.8, 6.2, 76.8]], ["L", [11.6, 76.8]], ["C", [12.5, 76.8, 13.35, 76.8]], ["C", [14.2, 76.8, 14.9, 77.1]], ["C", [15.9, 77.6, 16.25, 78.6]], ["C", [16.6, 79.6, 17, 80.6]], ["C", [17.4, 81.4, 17.8, 82.05]], ["C", [18.2, 82.7, 18.7, 83.4]], ["C", [19, 83.8, 19.4, 84.1]], ["C", [19.8, 84.4, 20.2, 84.7]], ["C", [20.8, 85.4, 21.6, 85.8]], ["C", [23, 86.6, 25.55, 87.05]], ["C", [28.1, 87.5, 30.3, 86.9]], ["C", [31.8, 86.4, 32.95, 85.75]], ["C", [34.1, 85.1, 35.2, 84.3]], ["C", [35.7, 83.95, 36, 83.6]], ["C", [36.3, 83.2, 36.6, 82.7]], ["C", [37.5, 81.6, 38.1, 80.45]], ["C", [38.7, 79.3, 39.2, 77.75]], ["C", [39.4, 76.6, 39.6, 75.9]], ["L", [39.6, 75]], ["C", [39.8, 74.4, 39.8, 73.2]], ["C", [39.8, 72, 39.6, 71.4]], ["C", [39.4, 70.7, 39.25, 69.95]], ["C", [39.1, 69.2, 38.9, 68.6]], ["C", [37.7, 65.7, 35.85, 63.8]], ["C", [34, 61.9, 30.8, 61.05]], ["C", [30.3, 60.8, 29.8, 60.8]], ["C", [29.3, 60.8, 28.8, 60.6]], ["L", [28, 60.6]], ["C", [27.4, 60.4, 26.55, 60.5]], ["C", [25.7, 60.6, 25.2, 60.8]], ["C", [24.7, 60.95, 24.35, 60.95]], ["C", [24, 60.95, 23.6, 61.05]], ["C", [22.5, 61.4, 21.55, 61.9]], ["C", [20.6, 62.4, 19.8, 63.05]], ["C", [18.9, 63.6, 18.25, 64.45]], ["C", [17.6, 65.3, 16.5, 65.8]], ["C", [15.4, 66.3, 13.65, 66.2]], ["C", [11.9, 66.1, 10.4, 66.1]], ["C", [9.7, 66.1, 8.95, 66.2]], ["C", [8.2, 66.3, 7.7, 66.1]], ["L", [6.8, 66.1]], ["C", [5.7, 65.9, 5.3, 65.6]], ["C", [4.4, 64.8, 4.7, 63.15]], ["C", [5, 61.7, 5.2, 60.35]], ["C", [5.4, 59, 5.7, 57.6]], ["C", [5.8, 57.2, 5.8, 56.9]], ["C", [5.8, 56.6, 5.9, 56.2]], ["C", [6.1, 55.2, 6.25, 54.2]], ["C", [6.4, 53.2, 6.6, 52.2]], ["C", [6.8, 51.4, 6.95, 50.45]], ["C", [7.1, 49.5, 7.3, 48.65]], ["C", [7.4, 48.2, 7.4, 47.6]], ["C", [7.4, 47, 7.6, 46.45]], ["C", [8.2, 44.3, 8.5, 41.95]], ["C", [8.8, 39.6, 9.3, 37.4]], ["C", [9.4, 37.1, 9.4, 36.8]], ["C", [9.4, 36.45, 9.5, 36.25]], ["C", [9.7, 35.2, 9.85, 34.1]], ["C", [10, 33.1, 10.3, 31.95]], ["C", [10.5, 30.9, 10.65, 30]], ["C", [10.8, 29.2, 11.4, 28.35]], ["C", [11.8, 27.85, 12.8, 27.7]], ["C", [13, 27.6, 13.2, 27.65]], ["C", [13.4, 27.7, 13.6, 27.6]], ["L", [45.6, 27.6]], ["C", [46.7, 27.6, 47.65, 27.65]], ["C", [48.6, 27.7, 49.2, 28.15]], ["C", [49.6, 28.45, 49.8, 29.35]], ["C", [50, 30.15, 50.05, 31.2]], ["C", [50.1, 32.15, 50.05, 33.25]], ["C", [50, 34.3, 50, 35.1]], ["C", [50, 35.8, 50, 36.45]]];
__motifs["6"] = [["M", [24.2, 61.8]], ["C", [19.5, 63.8, 18, 68.9]], ["C", [17.8, 69.6, 17.65, 70.25]], ["C", [17.5, 70.9, 17.3, 71.7]], ["L", [17.3, 72.5]], ["C", [17.1, 73.4, 17.15, 74.6]], ["C", [17.2, 75.8, 17.4, 76.6]], ["C", [17.6, 77.1, 17.65, 77.6]], ["C", [17.7, 78.1, 17.9, 78.6]], ["C", [19.3, 83.3, 23.4, 85.7]], ["C", [24.6, 86.4, 26.3, 86.9]], ["C", [26.9, 86.9, 27.2, 87]], ["C", [27.6, 87.1, 28.15, 87.15]], ["C", [28.7, 87.2, 29.2, 87.1]], ["C", [30.1, 86.9, 30.85, 86.75]], ["C", [31.6, 86.6, 32.4, 86.3]], ["C", [34.7, 85.3, 36.2, 83.4]], ["C", [37.7, 81.5, 38.5, 79.2]], ["C", [39.2, 77.1, 39.25, 74.3]], ["C", [39.3, 71.5, 38.5, 69.4]], ["C", [37.4, 65.9, 35.1, 63.5]], ["C", [32.8, 61.1, 28.2, 61.1]], ["C", [28, 61.2, 27.6, 61.15]], ["C", [27.2, 61.1, 26.9, 61.2]], ["C", [26.2, 61.4, 25.5, 61.5]], ["C", [24.8, 61.6, 24.2, 61.8]], ["M", [49.1, 36.3]], ["C", [49.9, 37.6, 50.45, 39]], ["C", [51, 40.4, 51.5, 42]], ["C", [51.7, 42.5, 51.65, 43.25]], ["C", [51.6, 44, 51.3, 44.4]], ["C", [51, 44.9, 50.55, 45]], ["C", [50.1, 45.1, 49.5, 45.3]], ["L", [48.4, 45.3]], ["C", [47.8, 45.5, 47, 45.4]], ["C", [46.2, 45.3, 45.4, 45.3]], ["C", [44.6, 45.3, 43.75, 45.4]], ["C", [42.9, 45.5, 42.1, 45.3]], ["C", [41.6, 45.2, 40.6, 45.2]], ["C", [38.9, 44.8, 38.4, 43.65]], ["C", [37.9, 42.5, 37.1, 41.2]], ["C", [35.2, 38.2, 31.5, 37]], ["C", [30.9, 36.8, 29.95, 36.65]], ["C", [29, 36.5, 28.2, 36.7]], ["C", [27.1, 36.9, 26.2, 37.15]], ["C", [25.3, 37.4, 24.5, 37.95]], ["C", [22.1, 39.4, 20.6, 41.6]], ["C", [19.1, 43.8, 18, 46.7]], ["C", [17.8, 47.2, 17.7, 47.65]], ["C", [17.6, 48.1, 17.4, 48.6]], ["C", [17.1, 49.4, 16.9, 50.3]], ["C", [16.7, 51.2, 16.5, 52.1]], ["C", [16.5, 52.3, 16.45, 52.6]], ["C", [16.4, 52.8, 16.4, 53]], ["C", [16.3, 53.5, 16.3, 54.1]], ["C", [16.3, 54.75, 16.5, 55.1]], ["C", [16.6, 55.3, 16.7, 55.4]], ["C", [16.8, 55.5, 17, 55.7]], ["C", [18.1, 55.9, 18.8, 55.2]], ["C", [19.5, 54.5, 20.2, 54]], ["C", [21.3, 53.1, 22.65, 52.45]], ["C", [24, 51.8, 25.5, 51.3]], ["C", [26.3, 51.1, 27.15, 50.95]], ["C", [28, 50.8, 28.8, 50.65]], ["C", [29.3, 50.55, 29.65, 50.65]], ["C", [30, 50.7, 30.5, 50.55]], ["C", [31, 50.45, 31.7, 50.45]], ["C", [32.4, 50.45, 32.9, 50.55]], ["C", [33.3, 50.65, 34.1, 50.65]], ["C", [34.6, 50.7, 35.1, 50.75]], ["C", [35.6, 50.8, 36.1, 51]], ["C", [36.9, 51.2, 37.65, 51.35]], ["C", [38.4, 51.5, 39.2, 51.8]], ["C", [42.4, 53.1, 44.9, 54.95]], ["C", [47.4, 56.85, 49.3, 59.4]], ["C", [50.2, 60.7, 50.95, 62.25]], ["C", [51.7, 63.8, 52.2, 65.5]], ["C", [52.5, 66.3, 52.65, 67.2]], ["C", [52.8, 68, 53, 68.8]], ["C", [53.1, 69.5, 53.15, 70.1]], ["C", [53.2, 70.7, 53.3, 71.45]], ["L", [53.3, 72.5]], ["C", [53.4, 73, 53.35, 74.15]], ["C", [53.3, 75.3, 53.2, 75.8]], ["C", [53.1, 76.3, 53.1, 76.65]], ["C", [53.1, 77, 53, 77.55]], ["C", [52.8, 78.6, 52.65, 79.65]], ["C", [52.5, 80.6, 52.1, 81.6]], ["C", [50.4, 86.8, 47.25, 90.6]], ["C", [44.1, 94.4, 39.3, 96.5]], ["C", [38.4, 96.9, 37.45, 97.15]], ["C", [36.5, 97.4, 35.4, 97.8]], ["C", [34.6, 98, 33.7, 98.1]], ["C", [32.8, 98.2, 31.9, 98.45]], ["C", [31.4, 98.6, 30.85, 98.55]], ["C", [30.3, 98.45, 29.8, 98.55]], ["C", [29.2, 98.7, 28.25, 98.7]], ["C", [27.3, 98.7, 26.8, 98.55]], ["L", [26.1, 98.55]], ["C", [25.7, 98.45, 25.25, 98.45]], ["C", [24.8, 98.45, 24.4, 98.35]], ["C", [23.9, 98.1, 23.45, 98.15]], ["C", [23, 98.2, 22.5, 98]], ["C", [20.5, 97.4, 18.8, 96.85]], ["C", [17.1, 96.35, 15.6, 95.3]], ["C", [11.4, 92.8, 8.8, 89]], ["C", [6.2, 85.2, 4.5, 80.2]], ["C", [3.9, 78.6, 3.6, 76.85]], ["C", [3.3, 75.1, 2.9, 73.45]], ["C", [2.7, 72.6, 2.65, 71.75]], ["C", [2.6, 70.9, 2.4, 70]], ["C", [2.4, 69.1, 2.35, 68.15]], ["C", [2.3, 67.25, 2.2, 66.2]], ["L", [2.2, 64.9]], ["C", [2, 64.4, 2.05, 63.85]], ["C", [2.1, 63.3, 2.1, 62.8]], ["C", [2.1, 62.3, 2.05, 61.75]], ["C", [2, 61.2, 2.2, 60.85]], ["L", [2.5, 55.7]], ["C", [2.9, 54.2, 3, 52.7]], ["C", [3.1, 51.1, 3.6, 49.7]], ["C", [4.7, 45.9, 5.95, 42.65]], ["C", [7.2, 39.4, 9.2, 36.6]], ["C", [11.5, 33.4, 14.55, 31]], ["C", [17.6, 28.6, 21.8, 27.25]], ["C", [22.9, 26.8, 24.1, 26.65]], ["C", [25.3, 26.5, 26.5, 26.2]], ["C", [26.8, 26.1, 27.7, 26.15]], ["C", [28.6, 26.2, 28.8, 26.1]], ["C", [32.6, 26, 35.75, 26.75]], ["C", [38.9, 27.55, 41.35, 28.85]], ["C", [43.8, 30.2, 45.75, 32.1]], ["C", [47.7, 34, 49.1, 36.3]]];
__motifs["7"] = [["M", [51.5, 35.85]], ["C", [51.5, 36.8, 51.5, 37.75]], ["C", [51.5, 38.6, 51.2, 39.4]], ["C", [50.9, 40.05, 50.45, 40.55]], ["C", [50, 41.1, 49.5, 41.6]], ["C", [49.1, 42.05, 48.8, 42.25]], ["C", [48.6, 42.6, 48.25, 42.9]], ["C", [47.9, 43.2, 47.6, 43.5]], ["C", [47, 44.35, 46.3, 45.1]], ["C", [45.6, 45.95, 45, 46.7]], ["C", [40, 53.7, 36.4, 61.9]], ["C", [35.2, 64.75, 34.25, 67.65]], ["C", [33.3, 70.6, 32.3, 73.6]], ["C", [31.8, 75, 31.55, 76.3]], ["C", [31.3, 77.65, 31, 78.9]], ["C", [30.5, 80.5, 30.3, 82.1]], ["C", [30.1, 83.75, 29.7, 85.4]], ["C", [29.6, 85.95, 29.6, 86.35]], ["C", [29.6, 86.8, 29.4, 87.3]], ["C", [29.3, 88.4, 29.2, 89.35]], ["C", [29.1, 90.3, 28.9, 91.4]], ["C", [28.8, 91.95, 28.85, 92.3]], ["C", [28.9, 92.7, 28.8, 93.2]], ["L", [28.8, 94.4]], ["C", [28.5, 95.5, 28.25, 96.25]], ["C", [28, 96.9, 26.9, 97.3]], ["C", [26.3, 97.5, 25.5, 97.45]], ["C", [24.7, 97.4, 23.9, 97.4]], ["L", [17.7, 97.4]], ["C", [16.6, 97.4, 15.65, 97.3]], ["C", [14.7, 97.2, 14.2, 96.45]], ["C", [13.9, 95.95, 13.85, 94.8]], ["C", [13.8, 93.7, 14, 92.9]], ["C", [14.2, 92.3, 14.2, 91.6]], ["C", [14.2, 90.9, 14.4, 90.2]], ["C", [14.8, 88.7, 14.95, 87.15]], ["C", [15.1, 85.65, 15.6, 84.1]], ["C", [16.3, 81.65, 16.9, 79.1]], ["C", [17.5, 76.6, 18.3, 74.3]], ["C", [18.5, 73.8, 18.65, 73.3]], ["C", [18.8, 72.7, 19, 72.2]], ["C", [19.8, 70.2, 20.6, 68.3]], ["C", [21.4, 66.4, 22.2, 64.4]], ["C", [23.6, 61.1, 25.35, 58]], ["C", [27.1, 54.9, 29, 51.9]], ["C", [30.2, 50.15, 31.4, 48.35]], ["C", [32.6, 46.5, 33.9, 44.7]], ["C", [34.1, 44.35, 34.8, 43.45]], ["C", [35.5, 42.6, 35.3, 41.95]], ["C", [35.1, 41.2, 34.6, 41.05]], ["C", [34.1, 40.9, 33.4, 40.7]], ["L", [32.5, 40.7]], ["C", [32.1, 40.5, 31.55, 40.55]], ["C", [31, 40.6, 30.5, 40.6]], ["L", [11.3, 40.6]], ["C", [9.9, 40.6, 7.85, 40.65]], ["C", [5.8, 40.7, 5, 40.2]], ["C", [4.3, 39.85, 4.1, 39.1]], ["C", [3.9, 38.6, 3.9, 37.95]], ["C", [3.9, 37.2, 3.9, 36.5]], ["L", [3.9, 32]], ["C", [3.9, 31.15, 3.9, 30.2]], ["C", [3.9, 29.35, 4.3, 28.75]], ["C", [4.7, 28, 5.8, 27.7]], ["C", [6, 27.65, 6.25, 27.7]], ["C", [6.5, 27.7, 6.7, 27.65]], ["L", [47.3, 27.65]], ["C", [48.5, 27.65, 49.5, 27.7]], ["C", [50.5, 27.8, 51, 28.6]], ["C", [51.4, 29.15, 51.45, 29.95]], ["C", [51.5, 30.8, 51.5, 31.75]], ["L", [51.5, 35.85]]];
__motifs["8"] = [["M", [23.6, 65.9]], ["C", [21.1, 66.7, 19.3, 68.15]], ["C", [17.5, 69.6, 16.5, 71.9]], ["C", [16.3, 72.5, 16.15, 73.15]], ["C", [16, 73.8, 15.8, 74.6]], ["C", [15.6, 75.7, 15.7, 77.15]], ["C", [15.8, 78.6, 16.1, 79.4]], ["C", [16.4, 80.5, 16.8, 81.5]], ["C", [17.6, 83.2, 18.85, 84.5]], ["C", [20.1, 85.8, 21.6, 86.7]], ["C", [22.1, 86.9, 22.5, 87.1]], ["C", [22.9, 87.3, 23.4, 87.5]], ["C", [23.9, 87.7, 24.55, 87.8]], ["C", [25.2, 87.9, 25.8, 88.1]], ["C", [26.2, 88.2, 27, 88.2]], ["C", [27.3, 88.3, 28.05, 88.35]], ["C", [28.8, 88.4, 29.1, 88.3]], ["C", [30.1, 88.1, 31, 88]], ["C", [31.9, 87.9, 32.7, 87.5]], ["C", [34.9, 86.6, 36.55, 85.15]], ["C", [38.2, 83.7, 39.1, 81.6]], ["C", [39.4, 80.9, 39.55, 80.2]], ["C", [39.7, 79.5, 39.9, 78.7]], ["C", [40.4, 77, 40, 75.05]], ["C", [39.6, 73.1, 39.1, 72]], ["C", [37.7, 68.8, 34.85, 67.05]], ["C", [32, 65.3, 27.5, 65.2]], ["C", [27.3, 65.4, 26.9, 65.35]], ["C", [26.5, 65.3, 26.2, 65.3]], ["C", [25.5, 65.5, 24.85, 65.6]], ["C", [24.2, 65.7, 23.6, 65.9]], ["M", [17.3, 46.55]], ["C", [17.3, 48.7, 18, 50.2]], ["C", [18.8, 52, 20.2, 53.15]], ["C", [21.6, 54.3, 23.5, 55.1]], ["C", [24, 55.3, 24.5, 55.35]], ["C", [25, 55.4, 25.5, 55.5]], ["C", [26.6, 55.8, 28.3, 55.8]], ["C", [30, 55.8, 31.1, 55.5]], ["C", [33.7, 54.7, 35.5, 53.35]], ["C", [37.3, 52, 38.1, 49.4]], ["C", [38.3, 48.7, 38.5, 47.5]], ["C", [38.7, 46.3, 38.5, 45.4]], ["C", [38.4, 45, 38.35, 44.7]], ["C", [38.3, 44.4, 38.2, 44]], ["C", [38, 43.2, 37.75, 42.5]], ["C", [37.5, 41.8, 37.1, 41.1]], ["C", [35.4, 38.6, 31.8, 37.3]], ["C", [31.3, 37.1, 30.75, 37.1]], ["C", [30.2, 37.1, 29.7, 36.9]], ["C", [29.1, 36.7, 28.4, 36.8]], ["C", [27.7, 36.9, 27, 36.9]], ["C", [26.8, 37.1, 26.45, 37]], ["C", [26.1, 36.9, 25.8, 37]], ["C", [25.3, 37.2, 24.75, 37.25]], ["C", [24.2, 37.3, 23.7, 37.5]], ["C", [21.7, 38.3, 20.25, 39.6]], ["C", [18.8, 40.9, 18, 42.9]], ["C", [17.3, 44.4, 17.3, 46.55]], ["M", [51.05, 42.9]], ["C", [51.7, 46.5, 50.7, 49.7]], ["C", [49.9, 52, 48.8, 53.85]], ["C", [47.7, 55.7, 46, 57]], ["C", [45.5, 57.4, 44.9, 57.8]], ["C", [44.3, 58.2, 43.9, 58.7]], ["C", [43.7, 58.9, 43.5, 59.15]], ["C", [43.3, 59.4, 43.5, 59.9]], ["C", [43.7, 60.4, 44, 60.65]], ["C", [44.3, 60.9, 44.7, 61.1]], ["C", [45.4, 61.5, 46.1, 61.85]], ["C", [46.8, 62.2, 47.5, 62.7]], ["C", [51, 65.1, 52.8, 69.4]], ["C", [53.3, 70.5, 53.5, 71.6]], ["C", [53.7, 72.7, 54, 74]], ["C", [54, 74.4, 54.05, 74.7]], ["C", [54.1, 75, 54.1, 75.4]], ["C", [54.2, 75.9, 54.25, 76.45]], ["C", [54.3, 77, 54.2, 77.4]], ["C", [54.1, 77.9, 54.1, 78.3]], ["C", [54.1, 78.7, 54.1, 79.2]], ["C", [54, 79.5, 54, 79.9]], ["C", [54, 80.3, 53.9, 80.7]], ["C", [53.7, 81.3, 53.6, 81.9]], ["C", [53.5, 82.5, 53.3, 83]], ["C", [53.1, 83.8, 52.8, 84.6]], ["C", [52.5, 85.4, 52.2, 86.2]], ["C", [51.9, 86.9, 51.45, 87.55]], ["C", [51, 88.2, 50.5, 88.9]], ["C", [48.4, 91.9, 45.3, 93.95]], ["C", [42.2, 96, 38.4, 97.3]], ["C", [37.3, 97.6, 36.2, 97.8]], ["C", [35.1, 98, 34, 98.3]], ["C", [33.6, 98.5, 33.2, 98.45]], ["C", [32.8, 98.4, 32.4, 98.6]], ["C", [31.6, 98.6, 30.8, 98.65]], ["C", [30, 98.7, 29.2, 98.8]], ["L", [28.3, 98.8]], ["C", [27.7, 98.8, 27, 98.85]], ["C", [26.3, 98.9, 25.8, 98.7]], ["C", [25.2, 98.5, 24.6, 98.6]], ["C", [24, 98.7, 23.5, 98.6]], ["C", [23.1, 98.4, 22.7, 98.45]], ["C", [22.3, 98.5, 21.8, 98.3]], ["C", [20.9, 98.1, 20, 97.95]], ["C", [19.1, 97.8, 18.3, 97.5]], ["C", [18.1, 97.4, 17.85, 97.4]], ["C", [17.6, 97.4, 17.4, 97.3]], ["C", [15.4, 96.7, 13.5, 95.8]], ["C", [11.3, 94.8, 9.15, 93.1]], ["C", [7, 91.4, 5.6, 89.6]], ["C", [4.6, 88.3, 3.8, 86.7]], ["C", [3.4, 86.1, 3.15, 85.4]], ["C", [2.9, 84.7, 2.7, 84]], ["C", [2.4, 83.2, 2.2, 82.2]], ["C", [2, 81.2, 1.8, 80.2]], ["C", [1.7, 79.8, 1.7, 79.4]], ["C", [1.7, 79, 1.6, 78.6]], ["L", [1.6, 77.7]], ["C", [1.5, 77.3, 1.55, 76.35]], ["C", [1.6, 75.4, 1.7, 75]], ["C", [2, 73.7, 2.1, 72.55]], ["C", [2.2, 71.4, 2.7, 70.3]], ["C", [3.6, 68.1, 4.8, 66.3]], ["C", [6, 64.5, 7.7, 63.2]], ["C", [9.1, 62.3, 10.8, 61.3]], ["C", [11.2, 61, 11.65, 60.7]], ["C", [12.1, 60.4, 12.3, 59.9]], ["C", [12.4, 59.5, 12.25, 59.25]], ["C", [12.1, 59, 11.9, 58.8]], ["C", [11.1, 58, 9.8, 57.2]], ["C", [8.1, 55.9, 7, 54.05]], ["C", [5.9, 52.2, 5.1, 49.9]], ["C", [4.3, 47.7, 4.5, 44.75]], ["C", [4.7, 41.8, 5.4, 39.8]], ["C", [7.2, 34.9, 10.6, 32.15]], ["C", [14, 29.4, 18.9, 27.7]], ["C", [20.2, 27.2, 21.6, 27]], ["C", [23, 26.8, 24.5, 26.5]], ["C", [25.2, 26.4, 25.85, 26.35]], ["C", [26.5, 26.3, 27.2, 26.3]], ["C", [32.3, 26.1, 36.2, 27.25]], ["C", [40.1, 28.4, 43, 30.5]], ["C", [44, 31.2, 44.85, 31.9]], ["C", [45.7, 32.6, 46.5, 33.5]], ["L", [46.8, 33.8]], ["C", [47.2, 34.3, 47.6, 34.85]], ["C", [48, 35.4, 48.4, 35.9]], ["C", [48.6, 36.2, 48.75, 36.5]], ["C", [48.9, 36.8, 49.1, 37.2]], ["C", [50.4, 39.3, 51.05, 42.9]]];
__motifs["9"] = [["M", [16.6, 46.6]], ["C", [16.2, 47.75, 16.1, 49.7]], ["C", [16, 51.65, 16.3, 52.8]], ["C", [16.5, 53.65, 16.5, 54.25]], ["C", [16.5, 54.8, 16.7, 55.45]], ["C", [17.5, 57.95, 18.7, 59.55]], ["C", [19.9, 61.2, 21.9, 62.45]], ["C", [22.5, 62.85, 23.25, 63.1]], ["C", [24, 63.3, 24.8, 63.5]], ["C", [25, 63.5, 25.25, 63.55]], ["C", [25.5, 63.6, 25.8, 63.6]], ["C", [26.1, 63.7, 26.55, 63.8]], ["C", [27, 63.85, 27.3, 63.7]], ["C", [27.5, 63.6, 27.85, 63.65]], ["C", [28.2, 63.7, 28.5, 63.6]], ["C", [29.1, 63.4, 29.7, 63.3]], ["C", [30.3, 63.2, 30.9, 63.05]], ["C", [35, 61.2, 37, 57]], ["C", [37.3, 56.25, 37.5, 55.4]], ["C", [37.7, 54.65, 37.9, 53.75]], ["C", [38.4, 52.05, 38.2, 49.9]], ["C", [38, 47.75, 37.5, 46.35]], ["C", [36.2, 42.6, 33.65, 40.2]], ["C", [31.1, 37.75, 26.2, 37.75]], ["C", [26, 37.95, 25.6, 37.85]], ["C", [25.2, 37.75, 25, 37.85]], ["L", [22.9, 38.4]], ["C", [20.3, 39.55, 18.85, 41.7]], ["C", [17.4, 43.85, 16.6, 46.6]], ["M", [52, 49.1]], ["C", [52.1, 49.8, 52.3, 50.55]], ["C", [52.6, 51.6, 52.65, 52.7]], ["C", [52.7, 53.7, 52.9, 54.75]], ["C", [53, 55.2, 52.95, 55.55]], ["C", [52.9, 55.9, 53, 56.3]], ["C", [53.1, 56.9, 53.1, 57.45]], ["C", [53.1, 58, 53.1, 58.65]], ["C", [53.2, 58.95, 53.15, 59.3]], ["C", [53.1, 59.7, 53.2, 60]], ["C", [53.3, 60.55, 53.3, 61.9]], ["C", [53.3, 63.3, 53.2, 63.8]], ["L", [53.2, 65.05]], ["C", [53.1, 65.5, 53.1, 66.1]], ["C", [53.1, 66.7, 53, 67.25]], ["C", [52.9, 67.7, 52.9, 68.15]], ["C", [52.9, 68.6, 52.8, 69.15]], ["C", [52.6, 70.3, 52.5, 71.5]], ["C", [52.4, 72.7, 52.1, 73.8]], ["C", [51.7, 74.9, 51.5, 76.05]], ["C", [51.3, 77.25, 50.9, 78.3]], ["C", [50.1, 80.5, 49.2, 82.55]], ["C", [48.3, 84.6, 47.2, 86.4]], ["C", [46.7, 87.2, 46.2, 87.95]], ["C", [45.7, 88.6, 45.2, 89.4]], ["C", [44.9, 89.85, 44.55, 90.15]], ["C", [44.2, 90.4, 43.9, 90.9]], ["C", [43.6, 91.2, 43.2, 91.7]], ["C", [42.8, 92.25, 42.4, 92.4]], ["C", [41.6, 93.1, 40.75, 93.8]], ["C", [39.9, 94.5, 39, 95]], ["C", [37.7, 95.8, 36.25, 96.45]], ["C", [34.8, 97.1, 33.3, 97.6]], ["C", [32.2, 97.9, 31.1, 98.1]], ["C", [30, 98.25, 28.8, 98.45]], ["C", [28.3, 98.6, 27.75, 98.55]], ["C", [27.2, 98.45, 26.7, 98.55]], ["C", [26.2, 98.7, 25.3, 98.65]], ["C", [24.4, 98.6, 23.9, 98.55]], ["C", [23.5, 98.55, 23.15, 98.5]], ["C", [22.8, 98.45, 22.3, 98.45]], ["C", [21.5, 98.25, 20.7, 98.15]], ["C", [19.9, 98.05, 19.2, 97.8]], ["C", [18.1, 97.4, 17.15, 97.15]], ["C", [16.2, 96.9, 15.3, 96.5]], ["C", [6.4, 92.6, 3.8, 82.3]], ["C", [3.6, 81.75, 3.8, 81]], ["C", [4.2, 79.8, 5.2, 79.7]], ["C", [6.2, 79.55, 7.7, 79.55]], ["L", [10.9, 79.55]], ["C", [11.7, 79.55, 12.8, 79.45]], ["C", [13.9, 79.35, 14.6, 79.55]], ["C", [16.4, 80, 16.9, 81.1]], ["C", [17.4, 82.2, 18.2, 83.65]], ["C", [18.8, 84.5, 19.8, 85.55]], ["C", [20.8, 86.5, 22.15, 87.15]], ["C", [23.5, 87.85, 25.1, 88.1]], ["C", [26.7, 88.3, 28.4, 87.85]], ["C", [30.6, 87.2, 32.15, 86.05]], ["C", [33.7, 84.9, 34.8, 83.35]], ["C", [35.9, 81.85, 36.65, 79.85]], ["C", [37.4, 77.9, 38.1, 75.7]], ["C", [38.3, 75.15, 38.4, 74.4]], ["C", [38.5, 73.7, 38.7, 73.05]], ["C", [38.8, 72.6, 38.8, 72.3]], ["C", [38.8, 72, 38.9, 71.7]], ["C", [39, 71.25, 39, 70.6]], ["C", [39, 70, 38.8, 69.6]], ["C", [38.7, 69.4, 38.55, 69.35]], ["C", [38.4, 69.25, 38.3, 69.15]], ["C", [37.4, 69.05, 36.9, 69.4]], ["C", [36.4, 69.8, 35.9, 70.2]], ["C", [35.1, 70.8, 34.2, 71.45]], ["C", [33.3, 72, 32.3, 72.5]], ["C", [30.9, 73.25, 29, 73.65]], ["C", [27.1, 74.1, 25.05, 74.2]], ["C", [23, 74.3, 20.95, 74.1]], ["C", [18.9, 73.9, 17.3, 73.35]], ["C", [12.8, 71.9, 9.95, 69.5]], ["C", [7.1, 67.15, 4.8, 63.4]], ["C", [4.1, 62.2, 3.7, 60.85]], ["C", [3.3, 59.4, 2.8, 58]], ["C", [2.6, 57.3, 2.5, 56.55]], ["C", [2.4, 55.7, 2.2, 54.9]], ["C", [2.2, 54.55, 2.15, 54.15]], ["C", [2.1, 53.8, 2.1, 53.4]], ["C", [2, 52.9, 1.95, 52]], ["C", [1.9, 51.1, 2.1, 50.65]], ["C", [2.2, 50.15, 2.1, 49.55]], ["C", [2, 49, 2.2, 48.55]], ["C", [2.2, 47.7, 2.3, 47.3]], ["C", [2.5, 46.25, 2.65, 45.25]], ["C", [2.8, 44.35, 3.2, 43.3]], ["C", [3.9, 41.2, 4.75, 39.35]], ["C", [5.6, 37.5, 6.8, 35.95]], ["C", [7.2, 35.2, 7.7, 34.65]], ["C", [8.2, 34.1, 8.7, 33.55]], ["C", [9, 33.1, 9.55, 32.6]], ["C", [10.1, 32.1, 10.5, 31.85]], ["L", [10.8, 31.55]], ["C", [11.3, 31.1, 11.8, 30.7]], ["C", [12.3, 30.3, 12.9, 30]], ["C", [14.3, 29, 15.95, 28.3]], ["C", [17.6, 27.65, 19.4, 27]], ["C", [20.4, 26.7, 21.4, 26.55]], ["C", [22.4, 26.4, 23.5, 26.2]], ["C", [23.9, 26.1, 24.75, 26.15]], ["C", [25.6, 26.2, 25.8, 26.1]], ["C", [30.9, 26, 34.75, 27.2]], ["C", [38.6, 28.3, 41.5, 30.5]], ["C", [44.4, 32.7, 46.5, 35.75]], ["C", [48.6, 38.7, 50.1, 42.25]], ["C", [50.6, 43.6, 50.95, 44.95]], ["C", [51.3, 46.35, 51.7, 47.7]], ["C", [51.9, 48.45, 52, 49.1]]];
__motifs["0"] = [["M", [17.2, 48.75]], ["C", [17, 50.5, 16.6, 52.3]], ["C", [16.5, 53.1, 16.45, 53.9]], ["C", [16.4, 54.7, 16.3, 55.5]], ["C", [16.2, 56.3, 16.2, 57.2]], ["C", [16.2, 58.1, 16.2, 58.9]], ["L", [16.2, 60]], ["C", [16, 60.5, 16.05, 61.1]], ["C", [16.1, 61.7, 16.1, 62.2]], ["C", [16.1, 62.7, 16.1, 63.2]], ["C", [16.1, 63.7, 16.2, 64.2]], ["C", [16.3, 64.7, 16.2, 65.35]], ["C", [16.1, 66, 16.2, 66.5]], ["L", [16.2, 67.9]], ["C", [16.4, 68.8, 16.4, 69.8]], ["C", [16.4, 70.8, 16.6, 71.7]], ["L", [16.6, 72.5]], ["C", [16.8, 73.4, 16.9, 74.35]], ["C", [17, 75.3, 17.2, 76.2]], ["C", [17.8, 78.2, 18.4, 79.9]], ["C", [19, 81.6, 20.1, 83.1]], ["C", [21.2, 84.5, 22.35, 85.35]], ["C", [23.5, 86.2, 25.4, 86.8]], ["C", [25.95, 87, 26.8, 87.15]], ["C", [27.75, 87.3, 28.4, 87.1]], ["C", [28.9, 86.9, 29.45, 86.9]], ["C", [30.05, 86.9, 30.5, 86.7]], ["C", [31.6, 86.3, 32.8, 85.55]], ["C", [34.05, 84.8, 34.7, 84]], ["C", [35.6, 82.7, 36.25, 81.55]], ["C", [36.8, 80.4, 37.4, 78.9]], ["C", [37.95, 77.6, 38.15, 76.25]], ["C", [38.35, 74.9, 38.7, 73.5]], ["C", [38.8, 73, 38.8, 72.55]], ["C", [38.8, 72.1, 38.9, 71.6]], ["C", [39.1, 70.9, 39.05, 70.15]], ["C", [39, 69.4, 39.2, 68.7]], ["C", [39.2, 67.9, 39.2, 67]], ["C", [39.2, 66.1, 39.3, 65.3]], ["L", [39.3, 64.3]], ["C", [39.4, 63.8, 39.35, 63.25]], ["C", [39.3, 62.7, 39.3, 62.2]], ["C", [39.3, 61.7, 39.35, 61.15]], ["C", [39.4, 60.6, 39.3, 60.1]], ["L", [39.3, 59.3]], ["C", [39.3, 58.6, 39.3, 57.95]], ["C", [39.3, 57.3, 39.2, 56.7]], ["L", [39.2, 55.7]], ["C", [39, 54.7, 38.95, 53.75]], ["C", [38.9, 52.8, 38.8, 51.8]], ["C", [38.6, 51, 38.55, 50.2]], ["C", [38.45, 49.4, 38.25, 48.6]], ["C", [37.45, 45.8, 36.4, 43.35]], ["C", [35.35, 40.9, 33.2, 39.5]], ["C", [32.05, 38.6, 30.55, 38.15]], ["C", [29.1, 37.7, 26.9, 37.7]], ["C", [26.7, 37.9, 26.35, 37.8]], ["C", [26.05, 37.7, 25.85, 37.8]], ["C", [25.3, 38, 24.85, 38.1]], ["C", [24.4, 38.2, 23.95, 38.4]], ["C", [21.65, 39.4, 20.3, 41.3]], ["C", [19, 43.2, 18, 45.5]], ["C", [17.4, 47, 17.2, 48.75]], ["M", [51.9, 47.5]], ["C", [52.15, 49.3, 52.65, 51.1]], ["C", [52.85, 51.9, 52.8, 52.65]], ["C", [52.75, 53.4, 52.95, 54.2]], ["C", [53.15, 55.2, 53.15, 56.25]], ["C", [53.15, 57.3, 53.3, 58.3]], ["L", [53.3, 59.8]], ["C", [53.4, 60.4, 53.35, 61.1]], ["C", [53.3, 61.8, 53.3, 62.5]], ["C", [53.3, 63, 53.35, 63.5]], ["C", [53.4, 64, 53.3, 64.5]], ["L", [53.05, 69.6]], ["C", [52.95, 70.4, 52.9, 71.25]], ["C", [52.85, 72.1, 52.75, 73]], ["C", [52.25, 74.8, 52, 76.65]], ["C", [51.75, 78.5, 51.1, 80.2]], ["C", [49.1, 86.4, 46, 90.55]], ["C", [42.8, 94.7, 36.9, 97.1]], ["C", [35.6, 97.6, 34.2, 97.8]], ["C", [32.7, 98, 31.2, 98.4]], ["C", [30.5, 98.5, 29.95, 98.5]], ["C", [29.3, 98.5, 28.6, 98.6]], ["C", [28.3, 98.7, 27.6, 98.65]], ["C", [26.9, 98.6, 26.6, 98.5]], ["L", [25.6, 98.5]], ["C", [25.4, 98.5, 25.05, 98.5]], ["C", [24.7, 98.5, 24.5, 98.4]], ["C", [23.75, 98.2, 22.9, 98.15]], ["C", [22.1, 98.1, 21.3, 97.9]], ["C", [19.4, 97.4, 17.8, 96.75]], ["C", [16.2, 96.1, 14.8, 95.2]], ["C", [11.1, 92.9, 8.9, 89.8]], ["C", [6.7, 86.7, 5, 82.5]], ["C", [4.5, 81.1, 4.2, 79.6]], ["C", [3.9, 78.1, 3.35, 76.6]], ["C", [3.1, 75.5, 3, 74.3]], ["C", [2.9, 73.1, 2.6, 71.9]], ["C", [2.5, 71.4, 2.55, 71]], ["C", [2.6, 70.6, 2.4, 70.2]], ["C", [2.4, 69.6, 2.4, 69]], ["C", [2.4, 68.4, 2.3, 67.8]], ["C", [2.2, 67.3, 2.25, 66.9]], ["C", [2.3, 66.5, 2.2, 66]], ["C", [2, 65.2, 2.05, 64.2]], ["C", [2.1, 63.2, 2.1, 62.4]], ["C", [2.1, 61.7, 2.05, 60.95]], ["C", [2, 60.2, 2.2, 59.6]], ["L", [2.2, 58.3]], ["C", [2.4, 57.5, 2.3, 56.75]], ["C", [2.2, 56, 2.4, 55.2]], ["L", [2.4, 54.2]], ["C", [2.6, 53.6, 2.55, 53]], ["C", [2.5, 52.4, 2.7, 51.7]], ["C", [2.9, 51.2, 2.9, 50.55]], ["C", [2.9, 49.9, 3.1, 49.3]], ["C", [3.45, 47.9, 3.7, 46.6]], ["C", [3.9, 45.3, 4.4, 44]], ["C", [6.4, 38, 9.55, 33.95]], ["C", [12.8, 29.9, 18.4, 27.6]], ["C", [19.6, 27.1, 20.95, 26.85]], ["C", [22.3, 26.6, 23.75, 26.3]], ["C", [24.2, 26.2, 24.7, 26.2]], ["C", [25.2, 26.2, 25.75, 26.1]], ["C", [25.95, 26, 26.25, 26.1]], ["C", [26.6, 26.2, 26.8, 26.1]], ["C", [32.15, 26, 36.1, 27.3]], ["C", [40.05, 28.6, 42.9, 31]], ["C", [45.85, 33.4, 47.8, 36.75]], ["C", [49.75, 40.1, 51.05, 44]], ["C", [51.65, 45.7, 51.9, 47.5]]];
__motifs["!"] = [["M", [19.15, 82.25]], ["C", [20.15, 82.3, 20.9, 82.8]], ["C", [21.5, 83.35, 21.6, 84.2]], ["C", [21.7, 85.1, 21.7, 86.2]], ["L", [21.7, 93.4]], ["C", [21.7, 94.5, 21.6, 95.4]], ["C", [21.5, 96.35, 21, 96.8]], ["C", [20.25, 97.3, 19.3, 97.35]], ["C", [18.25, 97.4, 17.2, 97.4]], ["L", [10.5, 97.4]], ["C", [9.4, 97.4, 8.4, 97.35]], ["C", [7.4, 97.3, 6.9, 96.7]], ["C", [6.4, 96.1, 6.3, 95.15]], ["C", [6.2, 94.25, 6.2, 93.1]], ["L", [6.2, 86.8]], ["C", [6.2, 85.85, 6.2, 84.85]], ["C", [6.2, 83.95, 6.6, 83.35]], ["C", [7, 82.7, 8.1, 82.3]], ["C", [8.3, 82.2, 8.55, 82.25]], ["C", [8.8, 82.3, 9, 82.2]], ["L", [16.9, 82.2]], ["C", [18.05, 82.2, 19.15, 82.25]], ["M", [19.25, 26.3]], ["C", [20.3, 26.4, 20.8, 27.1]], ["C", [21.2, 27.7, 21.2, 28.6]], ["C", [21.2, 29.55, 21.2, 30.5]], ["L", [21.2, 41.6]], ["C", [21.2, 42.25, 21.3, 42.95]], ["C", [21.4, 43.7, 21.2, 44.25]], ["L", [21.2, 45.3]], ["C", [21, 46, 21.05, 46.75]], ["C", [21.1, 47.5, 20.9, 48.1]], ["C", [20.7, 48.6, 20.75, 49.05]], ["C", [20.8, 49.5, 20.6, 50]], ["C", [20.4, 50.9, 20.4, 51.75]], ["C", [20.4, 52.65, 20.2, 53.4]], ["C", [20.05, 53.8, 20.05, 54.15]], ["C", [20.05, 54.55, 19.95, 54.9]], ["C", [19.8, 56.2, 19.7, 57.6]], ["C", [19.6, 59, 19.3, 60.3]], ["C", [19.1, 61.05, 19.15, 61.6]], ["C", [19.2, 62.2, 19, 63.05]], ["C", [18.6, 64.8, 18.55, 66.75]], ["C", [18.5, 68.7, 17.95, 70.5]], ["C", [17.7, 71.9, 17.65, 73.4]], ["C", [17.6, 74.8, 16.6, 75.55]], ["C", [16.3, 75.7, 15.85, 75.8]], ["C", [15.5, 75.9, 15, 76]], ["L", [13.55, 76]], ["C", [12.6, 76, 11.85, 75.8]], ["C", [11.1, 75.65, 10.7, 75.1]], ["C", [10.2, 74.5, 10.2, 73.8]], ["C", [10.2, 73.1, 10, 72.3]], ["C", [9.65, 71.25, 9.6, 70]], ["C", [9.55, 68.8, 9.3, 67.7]], ["C", [9.3, 66.9, 9.2, 66.6]], ["C", [9.1, 66, 9.1, 65.4]], ["C", [9.1, 64.8, 9, 64.2]], ["C", [8.6, 62.85, 8.55, 61.25]], ["C", [8.5, 59.7, 8.2, 58.3]], ["C", [8.1, 57.8, 8.1, 57.35]], ["C", [8.1, 56.9, 8, 56.4]], ["C", [7.8, 55.5, 7.75, 54.55]], ["C", [7.7, 53.5, 7.45, 52.55]], ["C", [7.45, 52.3, 7.4, 52.1]], ["C", [7.35, 51.9, 7.35, 51.7]], ["C", [7.2, 50.9, 7.2, 50.15]], ["C", [7.2, 49.4, 7, 48.6]], ["C", [6.5, 46.45, 6.55, 43.8]], ["C", [6.6, 41.2, 6.6, 38.6]], ["L", [6.6, 30.9]], ["C", [6.6, 29.8, 6.6, 28.8]], ["C", [6.6, 27.8, 7.1, 27.1]], ["C", [7.55, 26.5, 8.5, 26.3]], ["C", [8.7, 26.2, 8.9, 26.25]], ["C", [9.1, 26.3, 9.3, 26.2]], ["L", [17, 26.2]], ["C", [18.2, 26.2, 19.25, 26.3]]];
__motifs["@"] = [["M", [39.8, 51]], ["C", [39.3, 51.1, 38.9, 51.2]], ["C", [38.5, 51.3, 38, 51.5]], ["C", [36.1, 52.3, 34.3, 53.8]], ["C", [33.8, 54.2, 33.3, 54.8]], ["C", [32.8, 55.4, 32.4, 55.9]], ["C", [30.7, 58.4, 29.7, 61.2]], ["C", [29.6, 62.1, 29.2, 63.4]], ["C", [29, 64.6, 29.15, 66.45]], ["C", [29.3, 68.3, 29.7, 69.2]], ["C", [30.5, 71.2, 31.75, 72.4]], ["C", [33, 73.6, 35.1, 74.2]], ["C", [36.8, 74.7, 38.75, 74.25]], ["C", [40.7, 73.8, 41.8, 73.1]], ["C", [44.6, 71.4, 46.2, 68.95]], ["C", [47.8, 66.5, 48.8, 63]], ["C", [48.9, 62.5, 49, 62]], ["C", [49.1, 61.5, 49.2, 61]], ["C", [49.4, 60.2, 49.3, 59.1]], ["C", [49.2, 58, 49, 57.3]], ["C", [48.3, 54.8, 46.95, 53.3]], ["C", [45.6, 51.8, 43.1, 51]], ["C", [42.6, 50.8, 41.9, 50.85]], ["C", [41.2, 50.9, 40.5, 50.9]], ["C", [40.3, 51, 40.15, 50.95]], ["C", [40, 50.9, 39.8, 51]], ["M", [41.7, 32.3]], ["C", [40.9, 32.3, 40.05, 32.3]], ["C", [39.2, 32.3, 38.5, 32.5]], ["C", [37.8, 32.7, 37.15, 32.65]], ["C", [36.5, 32.6, 35.9, 32.8]], ["C", [34.4, 33.2, 32.95, 33.55]], ["C", [31.5, 33.9, 30.1, 34.4]], ["C", [25.9, 36.2, 22.8, 38.95]], ["C", [19.7, 41.7, 17.4, 45.4]], ["C", [16.2, 47.4, 15.45, 49.65]], ["C", [14.7, 51.9, 13.9, 54.4]], ["C", [13.8, 54.9, 13.8, 55.3]], ["C", [13.8, 55.7, 13.6, 56.2]], ["C", [13.3, 57.6, 13.2, 59.35]], ["C", [13.1, 61.1, 13.15, 62.9]], ["C", [13.2, 64.7, 13.45, 66.4]], ["C", [13.7, 68.1, 14, 69.3]], ["C", [14.4, 70.7, 14.7, 71.95]], ["C", [15, 73.2, 15.6, 74.5]], ["C", [17.8, 79.6, 21.55, 83.2]], ["C", [25.3, 86.8, 30.4, 89]], ["C", [32, 89.6, 33.65, 89.95]], ["C", [35.3, 90.3, 37.1, 90.8]], ["C", [38, 91, 38.95, 91]], ["C", [39.9, 91, 40.8, 91.2]], ["L", [42.2, 91.2]], ["C", [42.6, 91.3, 43.35, 91.3]], ["C", [44.1, 91.3, 44.6, 91.1]], ["L", [45.3, 91.1]], ["C", [45.8, 91, 46.4, 91]], ["C", [47, 91, 47.5, 90.8]], ["C", [48.3, 90.6, 48.9, 90.6]], ["C", [49.5, 90.6, 50.2, 90.4]], ["C", [51.3, 90.1, 52.3, 89.9]], ["C", [53.3, 89.7, 54.2, 89.3]], ["C", [54.8, 89, 55.4, 88.7]], ["C", [56, 88.4, 56.6, 88.2]], ["C", [57.6, 87.9, 58.2, 87.5]], ["C", [59, 87, 59.7, 86.6]], ["C", [60.4, 86.2, 61.1, 85.7]], ["C", [61.8, 85.2, 62.45, 84.65]], ["C", [63.1, 84.1, 63.9, 83.6]], ["C", [64.7, 83.2, 66.3, 83]], ["C", [67.9, 82.8, 69.1, 83.1]], ["C", [69.7, 83.3, 70.2, 83.4]], ["C", [70.7, 83.5, 70.9, 84]], ["C", [71.1, 84.2, 71, 84.55]], ["C", [70.9, 84.9, 70.8, 85.1]], ["C", [70.5, 85.7, 70.15, 86.1]], ["C", [69.8, 86.5, 69.4, 87]], ["C", [69, 87.5, 68.6, 87.9]], ["C", [68.2, 88.3, 67.7, 88.8]], ["C", [67.2, 89.2, 66.85, 89.65]], ["C", [66.5, 90.1, 66, 90.5]], ["C", [64.9, 91.3, 63.8, 92.05]], ["C", [62.7, 92.8, 61.5, 93.6]], ["C", [58, 95.9, 53.7, 97.2]], ["C", [52.9, 97.5, 52.1, 97.7]], ["C", [51.3, 97.9, 50.5, 98.1]], ["C", [49.4, 98.4, 48.35, 98.45]], ["C", [47.3, 98.5, 46.2, 98.8]], ["C", [45.7, 98.8, 45.3, 98.8]], ["C", [44.9, 98.8, 44.4, 98.9]], ["C", [43.9, 99, 42.65, 99.05]], ["C", [41.4, 99.1, 40.8, 98.9]], ["L", [38.9, 98.9]], ["C", [38, 98.7, 37, 98.65]], ["C", [36, 98.6, 35.1, 98.4]], ["C", [33.7, 98, 32.4, 97.8]], ["C", [31.1, 97.6, 29.9, 97.1]], ["C", [24.5, 95.3, 20.1, 92.5]], ["C", [19.1, 91.9, 18.2, 91.2]], ["C", [17.3, 90.5, 16.4, 89.7]], ["C", [16.2, 89.5, 16.05, 89.35]], ["C", [15.9, 89.2, 15.7, 89]], ["C", [13.7, 87.4, 11.9, 85]], ["C", [11.3, 84.2, 10.6, 83.35]], ["C", [9.9, 82.5, 9.4, 81.6]], ["C", [8, 79.6, 7, 77.3]], ["C", [6, 75, 5.2, 72.4]], ["C", [4.7, 71.1, 4.55, 69.75]], ["C", [4.4, 68.4, 4, 67]], ["C", [4, 66.4, 3.95, 65.85]], ["C", [3.9, 65.3, 3.8, 64.7]], ["L", [3.8, 64]], ["C", [3.6, 63.4, 3.6, 62.3]], ["C", [3.6, 61.2, 3.8, 60.6]], ["L", [3.8, 58.8]], ["C", [4, 57.9, 4.05, 56.9]], ["C", [4.1, 55.9, 4.3, 55.1]], ["C", [4.4, 54.7, 4.4, 54.45]], ["C", [4.4, 54.2, 4.5, 53.8]], ["C", [4.9, 52.6, 5.15, 51.35]], ["C", [5.4, 50.1, 5.9, 49]], ["C", [7, 46.4, 8.15, 44.2]], ["C", [9.3, 42, 10.8, 39.9]], ["C", [11.3, 39.1, 12, 38.3]], ["C", [12.7, 37.5, 13.4, 36.7]], ["L", [14.2, 35.9]], ["C", [14.5, 35.5, 14.9, 35.15]], ["C", [15.3, 34.8, 15.8, 34.4]], ["C", [16, 34.2, 16.3, 33.9]], ["C", [16.6, 33.6, 16.9, 33.4]], ["C", [18.3, 32.3, 19.65, 31.35]], ["C", [21, 30.4, 22.4, 29.5]], ["C", [24.4, 28.3, 26.55, 27.5]], ["C", [28.7, 26.7, 31, 25.9]], ["C", [32.4, 25.4, 33.95, 25.25]], ["C", [35.5, 25.1, 37.1, 24.7]], ["C", [37.9, 24.6, 38.75, 24.55]], ["C", [39.6, 24.5, 40.4, 24.5]], ["C", [47.7, 24.3, 53.1, 26.1]], ["C", [58.5, 27.9, 63, 30.7]], ["C", [63.8, 31.2, 64.55, 31.85]], ["C", [65.3, 32.5, 66.1, 33]], ["C", [66.3, 33.2, 66.5, 33.4]], ["C", [66.7, 33.6, 66.9, 33.8]], ["C", [68.1, 34.7, 69, 35.9]], ["C", [69.3, 36.4, 69.7, 36.75]], ["C", [70.1, 37.1, 70.5, 37.6]], ["C", [71.4, 38.9, 72.25, 40.25]], ["C", [73.1, 41.6, 73.8, 43]], ["C", [74.5, 44.5, 74.95, 46.15]], ["C", [75.4, 47.8, 75.9, 49.5]], ["C", [76.1, 50.1, 76.05, 50.65]], ["C", [76, 51.2, 76.1, 51.9]], ["C", [76.3, 52.5, 76.4, 53.85]], ["C", [76.5, 55.2, 76.3, 56]], ["C", [76.1, 56.6, 76.25, 57.15]], ["C", [76.4, 57.7, 76.2, 58.2]], ["C", [76.1, 58.6, 76.1, 59]], ["C", [76.1, 59.4, 76, 59.8]], ["C", [75.8, 60.6, 75.7, 61.3]], ["C", [75.6, 62, 75.4, 62.7]], ["C", [75.3, 63, 75.25, 63.35]], ["C", [75.2, 63.7, 75.1, 64]], ["C", [74.4, 66.1, 73.5, 68.2]], ["C", [73.2, 69, 72.8, 69.65]], ["C", [72.4, 70.3, 71.9, 71]], ["C", [69.5, 74.8, 66.3, 77.65]], ["C", [63.1, 80.5, 58.8, 82.3]], ["C", [57.8, 82.8, 56.55, 83.15]], ["C", [55.3, 83.5, 53.95, 83.6]], ["C", [52.6, 83.7, 51.25, 83.55]], ["C", [49.9, 83.4, 48.9, 82.8]], ["C", [48.4, 82.5, 47.95, 82.15]], ["C", [47.5, 81.8, 47.1, 81.4]], ["C", [46.7, 80.9, 46.3, 80.45]], ["C", [45.9, 80, 45.1, 79.8]], ["C", [44.5, 79.7, 44, 80.2]], ["C", [43.2, 80.7, 42.6, 81.15]], ["C", [42, 81.6, 41.3, 82.1]], ["C", [39.6, 83.2, 36.65, 83.7]], ["C", [33.7, 84.2, 31.2, 83.4]], ["C", [26.6, 82, 23.9, 79.1]], ["C", [21.2, 76.2, 19.7, 71.7]], ["C", [19.5, 71, 19.4, 70.25]], ["C", [19.3, 69.5, 19.1, 68.7]], ["L", [19.1, 67.4]], ["C", [18.9, 66.6, 19.1, 65.8]], ["L", [19.1, 64.9]], ["C", [19.1, 64.5, 19.15, 64.15]], ["C", [19.2, 63.8, 19.2, 63.4]], ["C", [19.4, 62.3, 19.55, 61.3]], ["C", [19.7, 60.3, 20, 59.3]], ["C", [20.8, 57.1, 21.55, 55.15]], ["C", [22.3, 53.2, 23.4, 51.5]], ["C", [24.1, 50.5, 24.85, 49.6]], ["C", [25.6, 48.7, 26.4, 47.8]], ["C", [26.6, 47.5, 27.2, 47.1]], ["C", [27.4, 46.9, 27.5, 46.75]], ["C", [27.6, 46.6, 27.8, 46.4]], ["C", [28.4, 46, 28.7, 45.7]], ["C", [30.1, 44.7, 31.6, 43.85]], ["C", [33.1, 43, 34.9, 42.4]], ["C", [35.5, 42.2, 36.15, 42.05]], ["C", [36.8, 41.9, 37.4, 41.7]], ["L", [38.1, 41.7]], ["C", [38.9, 41.5, 40.3, 41.45]], ["C", [41.7, 41.4, 42.6, 41.6]], ["C", [43.2, 41.8, 43.8, 41.85]], ["C", [44.4, 41.9, 44.9, 42.1]], ["C", [47.3, 42.9, 49.1, 44.2]], ["C", [49.7, 44.7, 50.3, 45.35]], ["C", [50.9, 46, 51.7, 46.2]], ["C", [52.2, 46.4, 52.6, 46.05]], ["C", [53, 45.7, 53.2, 45.5]], ["C", [53.6, 44.9, 53.9, 44.35]], ["C", [54.2, 43.8, 54.9, 43.4]], ["C", [55.1, 43.2, 55.45, 43.2]], ["C", [55.8, 43.2, 56.1, 43.1]], ["L", [56.7, 43.1]], ["C", [57.2, 43, 57.85, 43]], ["C", [58.5, 43, 59, 43.1]], ["L", [59.6, 43.1]], ["C", [60.2, 43.3, 60.7, 43.5]], ["C", [61.2, 43.7, 61.4, 44.2]], ["C", [61.6, 44.7, 61.5, 45.35]], ["C", [61.4, 46, 61.3, 46.4]], ["C", [60.9, 47.6, 60.7, 48.85]], ["C", [60.5, 50.1, 60.1, 51.2]], ["C", [59.9, 51.9, 59.8, 52.55]], ["C", [59.7, 53.2, 59.5, 54]], ["C", [58.8, 56.3, 58.3, 58.8]], ["C", [57.8, 61.3, 57.1, 63.6]], ["C", [56.9, 64.2, 56.8, 64.85]], ["C", [56.7, 65.5, 56.5, 66.1]], ["C", [56.1, 67.2, 55.9, 68.4]], ["C", [55.7, 69.6, 55.4, 70.8]], ["C", [55.3, 71.2, 55.2, 71.75]], ["C", [55.1, 72.3, 55.2, 72.8]], ["C", [55.4, 73.9, 55.8, 74.4]], ["C", [56.2, 74.9, 57.3, 75.1]], ["C", [58.1, 75.3, 58.7, 75]], ["C", [59.2, 75, 59.7, 74.7]], ["C", [61.7, 73.9, 63.2, 72.3]], ["C", [64.7, 70.7, 65.8, 68.9]], ["C", [66.6, 67.5, 67.1, 65.85]], ["C", [67.6, 64.2, 68.1, 62.5]], ["C", [68.3, 61.8, 68.35, 61.15]], ["C", [68.4, 60.5, 68.6, 59.7]], ["L", [68.6, 59.2]], ["C", [68.7, 58.5, 68.7, 57.75]], ["C", [68.7, 57, 68.7, 56.2]], ["C", [68.7, 52.8, 67.8, 50.2]], ["C", [67.6, 49.6, 67.55, 49.1]], ["C", [67.5, 48.6, 67.3, 48.1]], ["C", [65.3, 43.3, 62.2, 40]], ["C", [59.1, 36.7, 54.3, 34.7]], ["C", [52.3, 33.9, 49.7, 33.2]], ["C", [49.2, 33, 48.75, 33]], ["C", [48.3, 33, 47.8, 32.9]], ["C", [46.4, 32.5, 44.9, 32.4]], ["C", [43.4, 32.3, 41.7, 32.3]]];
__motifs["#"] = [["M", [33.55, 59.05]], ["C", [33.6, 58, 33.2, 57.4]], ["C", [32.5, 56.3, 30.75, 56.3]], ["C", [29, 56.3, 27.3, 56.3]], ["C", [27.1, 56.5, 26.75, 56.4]], ["C", [26.4, 56.3, 26.2, 56.4]], ["C", [24.9, 56.7, 24.3, 57.6]], ["C", [24, 58.1, 23.95, 58.65]], ["C", [23.9, 59.2, 23.7, 59.9]], ["C", [23.4, 61.2, 23.25, 62.55]], ["C", [23.1, 63.9, 22.8, 65.2]], ["C", [22.7, 65.8, 22.75, 66.6]], ["C", [22.8, 67.4, 23, 67.8]], ["C", [23.5, 68.6, 24.65, 68.75]], ["C", [25.8, 68.9, 27.2, 68.9]], ["C", [27.7, 68.9, 28.2, 68.95]], ["C", [28.7, 69, 29.1, 68.8]], ["C", [29.5, 68.7, 29.85, 68.8]], ["C", [30.2, 68.9, 30.6, 68.7]], ["C", [31.6, 68.4, 32.05, 67.55]], ["C", [32.5, 66.7, 32.7, 65.55]], ["C", [32.9, 64.4, 32.95, 63.2]], ["C", [33, 62, 33.3, 60.9]], ["C", [33.5, 60.1, 33.55, 59.05]], ["M", [46.5, 34.7]], ["C", [46.2, 36, 46.1, 37.45]], ["C", [46, 38.9, 45.7, 40.2]], ["C", [45.6, 40.7, 45.6, 41.7]], ["C", [45.4, 42.3, 45.2, 43.65]], ["C", [45, 45, 45.2, 45.8]], ["C", [45.5, 46.9, 46.15, 47.1]], ["C", [46.8, 47.3, 47.9, 47.5]], ["C", [48.2, 47.6, 48.6, 47.55]], ["C", [49, 47.5, 49.2, 47.5]], ["C", [49.6, 47.6, 49.9, 47.55]], ["C", [50.2, 47.5, 50.5, 47.7]], ["C", [51.8, 48.1, 51.95, 49.25]], ["C", [52.1, 50.4, 52.1, 52.1]], ["C", [52.1, 52.8, 52.15, 53.45]], ["C", [52.2, 54.1, 52, 54.6]], ["C", [51.7, 55.7, 50.95, 56]], ["C", [50.2, 56.3, 49.2, 56.3]], ["C", [48.2, 56.3, 47.15, 56.25]], ["C", [46.1, 56.2, 45.1, 56.5]], ["C", [44.1, 56.8, 43.65, 57.55]], ["C", [43.2, 58.3, 43.05, 59.35]], ["C", [42.9, 60.4, 42.8, 61.55]], ["C", [42.7, 62.7, 42.5, 63.7]], ["C", [42.4, 64.1, 42.35, 64.55]], ["C", [42.3, 65, 42.2, 65.5]], ["L", [42.2, 66.1]], ["C", [42.2, 66.2, 42.15, 66.35]], ["C", [42.1, 66.5, 42.1, 66.7]], ["C", [42.3, 67.3, 42.45, 67.75]], ["C", [42.6, 68.2, 43.1, 68.5]], ["C", [43.9, 69, 45.3, 68.85]], ["C", [46.7, 68.7, 47.7, 69.1]], ["C", [48.8, 69.6, 49.1, 71.3]], ["L", [49.1, 72.2]], ["C", [49.2, 72.7, 49.2, 73.35]], ["C", [49.2, 74, 49.1, 74.5]], ["L", [49.1, 75.3]], ["C", [49, 75.6, 49, 75.9]], ["C", [49, 76.2, 48.8, 76.5]], ["C", [48.4, 77.4, 47.3, 77.55]], ["C", [46.2, 77.7, 44.8, 77.7]], ["C", [44.4, 77.7, 44, 77.7]], ["C", [43.6, 77.7, 43.3, 77.8]], ["L", [42.7, 77.8]], ["C", [41.2, 78.1, 40.6, 79]], ["C", [40.1, 79.8, 40.05, 81.05]], ["C", [40, 82.3, 39.7, 83.5]], ["C", [39.2, 85.6, 39.05, 87.85]], ["C", [38.9, 90.1, 38.4, 92.3]], ["C", [38.2, 93.1, 38.15, 93.9]], ["C", [38.1, 94.7, 37.95, 95.4]], ["C", [37.8, 96.1, 37.4, 96.6]], ["C", [37, 97.1, 36.2, 97.4]], ["C", [35.7, 97.6, 35.05, 97.55]], ["C", [34.4, 97.5, 33.8, 97.5]], ["C", [32.4, 97.5, 30.9, 97.45]], ["C", [29.4, 97.4, 28.9, 96.5]], ["C", [28.5, 96, 28.55, 94.7]], ["C", [28.6, 93.4, 28.8, 92.7]], ["C", [29.3, 90.9, 29.4, 89]], ["C", [29.5, 87.1, 29.9, 85.3]], ["C", [30, 84.8, 30, 84.4]], ["C", [30, 84, 30.1, 83.5]], ["C", [30.2, 83.1, 30.2, 82.75]], ["C", [30.2, 82.4, 30.3, 82]], ["C", [30.6, 80.5, 30.4, 79.4]], ["C", [30.2, 78.3, 28.8, 77.9]], ["C", [28.3, 77.7, 27.7, 77.7]], ["C", [27.1, 77.7, 26.4, 77.7]], ["C", [25.1, 77.7, 23.85, 77.75]], ["C", [22.6, 77.8, 21.8, 78.3]], ["C", [21, 79, 20.9, 80.15]], ["C", [20.8, 81.3, 20.5, 82.5]], ["C", [20.3, 83.1, 20.35, 83.7]], ["C", [20.4, 84.3, 20.2, 84.9]], ["C", [19.7, 86.9, 19.6, 88.95]], ["C", [19.5, 91, 19, 93]], ["C", [18.7, 94.1, 18.6, 94.95]], ["C", [18.5, 95.8, 18, 96.6]], ["C", [17.5, 97.4, 16.2, 97.45]], ["C", [14.9, 97.5, 13.6, 97.5]], ["C", [13.1, 97.5, 12.6, 97.55]], ["C", [12.1, 97.6, 11.7, 97.5]], ["C", [11.2, 97.3, 10.85, 97.35]], ["C", [10.5, 97.4, 10.2, 97.2]], ["C", [9.4, 96.7, 9.3, 95.65]], ["C", [9.2, 94.6, 9.4, 93.5]], ["C", [9.5, 93.1, 9.5, 92.75]], ["C", [9.5, 92.4, 9.6, 92.1]], ["C", [10, 90.4, 10.1, 88.55]], ["C", [10.2, 86.7, 10.6, 85]], ["C", [10.7, 84.5, 10.7, 84.1]], ["C", [10.7, 83.7, 10.8, 83.2]], ["C", [11, 82.4, 11.15, 81.1]], ["C", [11.3, 79.8, 11, 79]], ["C", [10.7, 78.2, 9.9, 77.95]], ["C", [9.1, 77.7, 8, 77.7]], ["C", [7.6, 77.7, 7.15, 77.75]], ["C", [6.7, 77.8, 6.3, 77.7]], ["C", [6.1, 77.7, 5.8, 77.65]], ["C", [5.5, 77.6, 5.3, 77.6]], ["C", [3.8, 77.3, 3.5, 76]], ["C", [3.3, 75.5, 3.3, 74.9]], ["C", [3.3, 74.3, 3.3, 73.6]], ["C", [3.3, 72.4, 3.35, 71.2]], ["C", [3.4, 70, 4.1, 69.5]], ["C", [4.7, 69.1, 5.65, 69]], ["C", [6.6, 68.9, 7.65, 68.9]], ["C", [8.7, 68.9, 9.7, 68.9]], ["C", [10.7, 68.9, 11.5, 68.6]], ["C", [12.3, 68.3, 12.7, 67.45]], ["C", [13.1, 66.6, 13.3, 65.55]], ["C", [13.5, 64.5, 13.6, 63.35]], ["C", [13.7, 62.2, 13.9, 61.2]], ["C", [14, 60.7, 14.15, 59.75]], ["C", [14.3, 58.8, 14.2, 58.3]], ["C", [13.9, 57.1, 13.2, 56.7]], ["C", [12.3, 56.2, 10.8, 56.35]], ["C", [9.3, 56.5, 8.2, 56.2]], ["C", [6.7, 55.7, 6.4, 54.3]], ["C", [6.4, 53.3, 6.3, 52.8]], ["C", [6.1, 52, 6.3, 51.1]], ["C", [6.5, 50.5, 6.45, 49.85]], ["C", [6.4, 49.2, 6.6, 48.7]], ["C", [7.1, 47.6, 8.55, 47.55]], ["C", [10, 47.5, 11.6, 47.5]], ["L", [13, 47.5]], ["C", [14.1, 47.3, 14.75, 47.05]], ["C", [15.4, 46.8, 15.9, 45.8]], ["C", [16.2, 45, 16.25, 44.05]], ["C", [16.3, 43.1, 16.5, 42.2]], ["C", [17, 40, 17.15, 37.75]], ["C", [17.3, 35.5, 17.8, 33.4]], ["C", [18.1, 32.1, 18.15, 30.8]], ["C", [18.2, 29.5, 18.9, 28.7]], ["C", [19.2, 28.1, 20.2, 27.9]], ["C", [20.4, 27.8, 20.7, 27.85]], ["C", [21, 27.9, 21.2, 27.7]], ["C", [22, 27.7, 22.95, 27.65]], ["C", [23.9, 27.6, 24.8, 27.65]], ["C", [25.7, 27.7, 26.4, 27.9]], ["C", [27.1, 28.1, 27.4, 28.6]], ["C", [27.8, 29.2, 27.75, 30.5]], ["C", [27.7, 31.8, 27.5, 32.6]], ["C", [27.3, 33.5, 27.2, 34.45]], ["C", [27.1, 35.4, 26.9, 36.4]], ["C", [26.5, 38.1, 26.4, 39.95]], ["C", [26.3, 41.8, 25.9, 43.5]], ["C", [25.7, 44.2, 25.75, 45.05]], ["C", [25.8, 45.9, 26.1, 46.4]], ["C", [26.5, 47.2, 27.9, 47.4]], ["C", [28.4, 47.5, 28.95, 47.5]], ["C", [29.5, 47.5, 30, 47.5]], ["C", [31.4, 47.5, 32.8, 47.45]], ["C", [34.2, 47.4, 34.8, 46.6]], ["C", [35.3, 46, 35.45, 45.15]], ["C", [35.6, 44.3, 35.8, 43.5]], ["C", [35.8, 42.7, 35.9, 42.4]], ["C", [36.3, 40.6, 36.4, 38.7]], ["C", [36.5, 36.8, 36.9, 35.1]], ["C", [37.1, 34.5, 37.05, 33.95]], ["C", [37, 33.4, 37.2, 32.9]], ["C", [37.4, 31.8, 37.5, 30.7]], ["C", [37.6, 29.6, 38.1, 28.8]], ["C", [38.7, 27.8, 40.25, 27.75]], ["C", [41.8, 27.7, 43.5, 27.7]], ["C", [44.4, 27.7, 45.3, 27.8]], ["C", [46.2, 27.9, 46.6, 28.5]], ["C", [47.1, 29.3, 47, 30.75]], ["C", [46.9, 32.2, 46.7, 33.2]], ["C", [46.6, 33.6, 46.6, 33.95]], ["C", [46.6, 34.3, 46.5, 34.7]]];
__motifs["$"] = [["M", [30.7, 73.8]], ["L", [30.7, 82.5]], ["C", [30.7, 84.1, 30.8, 85.3]], ["C", [30.9, 86.5, 32.15, 87]], ["C", [32.8, 87.2, 33.3, 87.1]], ["C", [36.05, 86.4, 38.05, 84.85]], ["C", [40, 83.3, 41, 80.9]], ["C", [41.2, 80.4, 41.25, 79.9]], ["C", [41.3, 79.4, 41.5, 78.9]], ["C", [41.7, 78.1, 41.55, 77.1]], ["C", [41.4, 76.1, 41.2, 75.5]], ["C", [40.55, 73.2, 39.15, 72.05]], ["C", [37.8, 70.9, 35.8, 70]], ["C", [35, 69.6, 34.25, 69.35]], ["C", [33.4, 69.1, 32.25, 69.1]], ["C", [31.85, 69.3, 31.55, 69.4]], ["C", [31.3, 69.5, 31.1, 69.9]], ["C", [30.6, 70.6, 30.65, 71.7]], ["C", [30.7, 72.8, 30.7, 73.8]], ["M", [16.3, 47.1]], ["C", [16.9, 48.5, 17.8, 49.25]], ["C", [18.7, 50, 19.8, 50.7]], ["C", [20.3, 51, 21.4, 51.5]], ["C", [22.5, 52, 23.3, 51.8]], ["C", [24.7, 51.5, 24.8, 50.1]], ["C", [24.9, 48.7, 24.9, 47]], ["L", [24.9, 40.7]], ["C", [24.9, 39.6, 24.9, 38.7]], ["C", [24.9, 37.8, 24.4, 37.2]], ["C", [23.8, 36.5, 22.5, 36.5]], ["C", [22.4, 36.6, 22.25, 36.55]], ["C", [22.1, 36.5, 21.9, 36.6]], ["C", [21.1, 36.8, 20.7, 37]], ["C", [19.1, 37.7, 17.9, 38.95]], ["C", [16.7, 40.2, 16.2, 42]], ["L", [15.9, 43.5]], ["C", [15.7, 44, 15.8, 44.75]], ["C", [15.9, 45.5, 16, 45.9]], ["C", [16.2, 46.3, 16.2, 46.55]], ["C", [16.2, 46.8, 16.3, 47.1]], ["M", [40.9, 45.5]], ["C", [39.5, 45.1, 39.1, 44]], ["C", [38.7, 42.9, 38.25, 41.6]], ["C", [36.9, 38.8, 34.8, 37.4]], ["C", [33.95, 36.9, 32.65, 36.7]], ["C", [31.4, 36.5, 30.9, 37.8]], ["C", [30.6, 38.45, 30.65, 39.6]], ["C", [30.7, 40.7, 30.7, 41.7]], ["L", [30.7, 49.3]], ["C", [30.7, 50.4, 30.7, 51.45]], ["C", [30.7, 52.5, 31.2, 53.2]], ["C", [31.95, 54.3, 33.3, 54.55]], ["C", [34.7, 54.8, 36.15, 55.3]], ["C", [38.7, 56.1, 41.15, 56.9]], ["C", [43.6, 57.8, 45.7, 59.2]], ["C", [48.55, 60.9, 50.7, 63.15]], ["C", [52.85, 65.4, 54.2, 68.6]], ["C", [54.6, 69.6, 54.9, 70.6]], ["C", [55.15, 71.6, 55.3, 72.7]], ["C", [55.5, 73.2, 55.4, 73.7]], ["C", [55.3, 74.2, 55.5, 74.7]], ["C", [55.7, 76, 55.65, 77.95]], ["C", [55.6, 79.9, 55.3, 81]], ["C", [55.15, 81.85, 55, 82.45]], ["C", [54.85, 83.1, 54.6, 83.8]], ["C", [53.3, 86.8, 51.55, 89.25]], ["C", [49.8, 91.7, 47.2, 93.5]], ["C", [46.75, 93.9, 46.1, 94.35]], ["C", [45.5, 94.7, 44.9, 95.1]], ["C", [43.4, 96.1, 41.65, 96.7]], ["C", [39.9, 97.3, 38.15, 97.9]], ["C", [37.2, 98.2, 36.3, 98.4]], ["C", [35.3, 98.55, 34.4, 98.7]], ["C", [34.05, 98.8, 33.65, 98.8]], ["C", [33.3, 98.8, 32.9, 98.9]], ["C", [31.2, 99.5, 30.8, 101]], ["C", [30.8, 101.2, 30.75, 101.4]], ["C", [30.7, 101.6, 30.7, 101.8]], ["C", [30.6, 102, 30.65, 102.45]], ["C", [30.7, 102.8, 30.7, 103.2]], ["C", [30.7, 104.2, 30.65, 105.15]], ["C", [30.6, 106.1, 30.2, 106.75]], ["C", [29.7, 107.3, 28.4, 107.5]], ["C", [28.2, 107.6, 27.85, 107.55]], ["C", [27.4, 107.5, 27.2, 107.5]], ["C", [26.4, 107.3, 25.85, 107.05]], ["C", [25.3, 106.85, 25.1, 106]], ["C", [24.8, 105.1, 24.85, 104.15]], ["C", [24.9, 103.2, 24.9, 102.3]], ["C", [24.9, 101.4, 24.7, 100.65]], ["C", [24.5, 99.9, 23.8, 99.4]], ["C", [23.1, 98.9, 22.25, 98.8]], ["C", [21.4, 98.7, 20.6, 98.55]], ["C", [19.2, 98.2, 17.9, 97.9]], ["C", [16.6, 97.6, 15.4, 97.1]], ["C", [10.5, 95.1, 7.45, 92.2]], ["C", [4.4, 89.2, 2.4, 84.3]], ["C", [1.9, 83.2, 1.6, 82.1]], ["C", [1.3, 81, 1.05, 79.9]], ["C", [0.8, 79.5, 0.85, 79.2]], ["C", [0.9, 78.9, 0.7, 78.5]], ["C", [0.5, 77.9, 0.45, 77.1]], ["C", [0.4, 76.3, 0.6, 75.7]], ["C", [0.9, 75, 1.7, 74.7]], ["C", [2.2, 74.5, 2.9, 74.45]], ["C", [3.6, 74.4, 4.4, 74.4]], ["L", [9.35, 74.4]], ["C", [10.1, 74.4, 10.95, 74.4]], ["C", [11.8, 74.4, 12.4, 74.6]], ["C", [13.2, 74.9, 13.6, 75.5]], ["C", [14, 76.1, 14.2, 76.85]], ["C", [14.4, 77.6, 14.6, 78.45]], ["C", [14.8, 79.3, 15.1, 80]], ["C", [15.9, 81.9, 17.1, 83.25]], ["C", [18.3, 84.6, 20, 85.7]], ["C", [20.4, 86.05, 21.05, 86.3]], ["C", [21.7, 86.6, 22.35, 86.75]], ["C", [23, 86.9, 23.65, 86.8]], ["C", [24.3, 86.7, 24.6, 86.05]], ["C", [24.8, 85.5, 24.85, 84.7]], ["C", [24.9, 83.95, 24.9, 83.1]], ["L", [24.9, 71.1]], ["C", [24.9, 69.9, 24.85, 68.85]], ["C", [24.8, 67.8, 24.3, 67.1]], ["C", [23.8, 66.3, 22.95, 66.1]], ["C", [22.1, 65.9, 21.2, 65.6]], ["C", [20.1, 65.2, 18.95, 64.9]], ["C", [17.8, 64.6, 16.7, 64.2]], ["C", [13.8, 63.1, 11.2, 61.75]], ["C", [8.6, 60.4, 6.6, 58.4]], ["L", [5.5, 57.3]], ["C", [4.6, 56.1, 3.85, 54.75]], ["C", [3.15, 53.4, 2.6, 51.7]], ["C", [2.3, 50.75, 2.15, 49.85]], ["C", [2, 48.85, 1.8, 47.9]], ["L", [1.8, 45.8]], ["C", [1.8, 44.4, 1.9, 43.25]], ["C", [2, 42.1, 2.3, 41]], ["C", [2.6, 40, 2.8, 39.1]], ["C", [3, 38.15, 3.5, 37.3]], ["C", [4.9, 34.15, 7.15, 31.95]], ["C", [9.4, 29.8, 12.2, 28.05]], ["C", [13.8, 27.1, 15.65, 26.5]], ["C", [17.4, 25.85, 19.4, 25.3]], ["C", [20.5, 25, 21.7, 24.9]], ["C", [22.9, 24.8, 23.7, 24.3]], ["C", [24.4, 23.75, 24.55, 23.2]], ["C", [24.7, 22.6, 24.9, 21.55]], ["C", [25, 21.2, 24.95, 20.75]], ["C", [24.9, 20.3, 25, 19.85]], ["C", [25.1, 19.4, 25.05, 19.1]], ["C", [25, 18.8, 25.1, 18.4]], ["C", [25.5, 17.35, 26.2, 17.1]], ["C", [26.4, 17, 26.7, 17.05]], ["C", [27, 17.1, 27.2, 16.9]], ["C", [28.4, 16.9, 29.2, 17.15]], ["C", [30.05, 17.35, 30.4, 18.2]], ["C", [30.6, 18.8, 30.6, 19.2]], ["L", [30.6, 20.3]], ["C", [30.7, 20.6, 30.65, 21.05]], ["C", [30.6, 21.45, 30.7, 21.85]], ["C", [30.9, 22.7, 31.05, 23.3]], ["C", [31.2, 23.85, 31.85, 24.3]], ["C", [32.4, 24.7, 33.15, 24.8]], ["C", [33.95, 24.9, 34.7, 25.1]], ["C", [35.8, 25.5, 36.9, 25.7]], ["C", [38.05, 25.95, 39.1, 26.4]], ["C", [43.6, 28.15, 46.65, 30.85]], ["C", [49.6, 33.5, 51.4, 37.9]], ["C", [51.9, 39, 52.4, 40.7]], ["C", [52.5, 41, 52.5, 41.3]], ["C", [52.5, 41.6, 52.65, 41.9]], ["C", [52.85, 42.35, 52.95, 43]], ["C", [53.05, 43.6, 52.85, 44.1]], ["C", [52.5, 45.1, 51.7, 45.4]], ["C", [51.1, 45.6, 50.4, 45.6]], ["C", [49.7, 45.6, 48.95, 45.6]], ["L", [44.1, 45.6]], ["C", [43.3, 45.6, 42.5, 45.65]], ["C", [41.6, 45.7, 40.9, 45.5]]];
__motifs["%"] = [["M", [58.6, 39.9]], ["C", [59.9, 37.8, 61.05, 35.55]], ["C", [62.2, 33.3, 63.5, 31.2]], ["C", [64, 30.3, 64.5, 29.4]], ["C", [65, 28.5, 65.5, 27.7]], ["C", [65.7, 27.3, 65.95, 26.9]], ["C", [66.2, 26.5, 66.5, 26.3]], ["C", [67.3, 25.7, 67.8, 25.5]], ["C", [68.2, 25.5, 69, 25.3]], ["C", [70.3, 25.3, 71.75, 25.3]], ["C", [73.2, 25.3, 73.7, 26.1]], ["C", [73.9, 26.3, 73.9, 26.75]], ["C", [73.9, 27.2, 73.8, 27.5]], ["C", [73.6, 28.2, 73.25, 28.8]], ["C", [72.9, 29.4, 72.6, 30]], ["C", [71.7, 31.6, 70.8, 33.2]], ["C", [69.9, 34.8, 69, 36.3]], ["C", [68.4, 37.3, 67.9, 38.3]], ["C", [67.4, 39.3, 66.8, 40.3]], ["C", [64.3, 44.4, 62.15, 48.65]], ["C", [60, 52.9, 57.5, 57]], ["C", [56.7, 58.2, 56.1, 59.45]], ["C", [55.5, 60.7, 54.8, 61.9]], ["C", [53.9, 63.4, 53.1, 64.95]], ["C", [52.3, 66.5, 51.4, 68]], ["C", [51.1, 68.5, 50.9, 68.9]], ["C", [50.7, 69.3, 50.5, 69.8]], ["C", [49.5, 71.3, 48.7, 72.9]], ["C", [47.9, 74.5, 47, 76]], ["C", [46.6, 76.5, 46.4, 77.05]], ["C", [46.2, 77.6, 45.9, 78.1]], ["C", [44.8, 80, 43.75, 81.9]], ["C", [42.7, 83.8, 41.6, 85.7]], ["C", [41.3, 86.2, 41.05, 86.75]], ["C", [40.8, 87.3, 40.5, 87.8]], ["C", [39.4, 89.5, 38.5, 91.35]], ["C", [37.6, 93.2, 36.5, 94.9]], ["C", [35.8, 96, 35.3, 97.15]], ["C", [34.8, 98.3, 33.7, 98.9]], ["C", [33.3, 99.2, 32.4, 99.35]], ["C", [31.5, 99.5, 30.5, 99.55]], ["C", [29.5, 99.6, 28.6, 99.5]], ["C", [27.7, 99.4, 27.3, 99.1]], ["C", [26.4, 98.6, 26.8, 97.3]], ["C", [27, 96.6, 27.4, 95.85]], ["C", [27.8, 95.1, 28.2, 94.6]], ["C", [29.7, 92, 31.1, 89.3]], ["C", [32.5, 86.6, 34.1, 84]], ["C", [34.6, 83.3, 34.9, 82.6]], ["C", [35.2, 81.9, 35.6, 81.1]], ["C", [38.2, 76.9, 40.4, 72.7]], ["C", [42.6, 68.5, 45.1, 64.3]], ["C", [45.9, 62.9, 46.6, 61.55]], ["C", [47.3, 60.2, 48.1, 58.9]], ["C", [48.4, 58.4, 48.55, 58]], ["C", [48.7, 57.6, 49, 57.2]], ["C", [49.8, 55.8, 50.55, 54.45]], ["C", [51.3, 53.1, 52.1, 51.7]], ["C", [52.3, 51.2, 52.5, 50.85]], ["C", [52.7, 50.5, 53, 50]], ["C", [54.1, 48.2, 55.1, 46.25]], ["C", [56.1, 44.3, 57.2, 42.5]], ["C", [57.6, 41.9, 57.9, 41.25]], ["C", [58.2, 40.6, 58.6, 39.9]], ["M", [17.6, 48.8]], ["C", [17.8, 49.4, 17.75, 50]], ["C", [17.7, 50.6, 17.8, 51.1]], ["C", [18.3, 52.8, 18.8, 54.1]], ["C", [19.3, 55.4, 20.4, 56.3]], ["C", [21.5, 57, 22.6, 57.4]], ["C", [23.2, 57.4, 23.5, 57.5]], ["C", [23.7, 57.5, 23.95, 57.55]], ["C", [24.2, 57.6, 24.4, 57.5]], ["C", [24.8, 57.4, 25.1, 57.4]], ["C", [25.4, 57.4, 25.8, 57.3]], ["C", [27.6, 56.7, 28.7, 55.2]], ["C", [29.4, 54.2, 29.75, 53.05]], ["C", [30.1, 51.9, 30.4, 50.5]], ["C", [30.6, 50, 30.5, 49.45]], ["C", [30.4, 48.9, 30.6, 48.2]], ["C", [30.7, 47.8, 30.75, 46.85]], ["C", [30.8, 45.9, 30.6, 45.4]], ["L", [30.6, 43.1]], ["C", [30.5, 42.7, 30.55, 42.35]], ["C", [30.6, 42, 30.5, 41.6]], ["C", [30.3, 40.9, 30.2, 40.2]], ["C", [30.1, 39.5, 29.9, 38.9]], ["C", [29.7, 38.2, 29.5, 37.55]], ["C", [29.3, 36.9, 28.9, 36.3]], ["C", [28.4, 35.7, 27.9, 35.15]], ["C", [27.4, 34.6, 26.8, 34.2]], ["C", [25.6, 33.5, 23.6, 33.7]], ["C", [23.4, 33.8, 22.7, 33.8]], ["C", [22.4, 34, 22.05, 34.1]], ["C", [21.7, 34.2, 21.4, 34.4]], ["C", [20.2, 35.2, 19.5, 36.35]], ["C", [18.8, 37.5, 18.3, 38.9]], ["C", [18, 39.9, 17.9, 40.9]], ["C", [17.8, 41.9, 17.6, 43]], ["L", [17.6, 44.9]], ["C", [17.4, 45.5, 17.45, 46.85]], ["C", [17.5, 48.2, 17.6, 48.8]], ["M", [40.65, 43.35]], ["C", [40.6, 43.7, 40.7, 43.9]], ["L", [40.7, 45]], ["C", [40.9, 46.1, 40.7, 47.1]], ["C", [40.5, 47.7, 40.6, 48.25]], ["C", [40.7, 48.8, 40.6, 49.3]], ["C", [40.5, 49.8, 40.5, 50.2]], ["C", [40.5, 50.6, 40.3, 51.1]], ["C", [40.1, 52.2, 39.85, 53.25]], ["C", [39.6, 54.3, 39.2, 55.3]], ["C", [37.9, 58.5, 35.7, 60.7]], ["C", [33.5, 62.9, 30.2, 64]], ["C", [29.3, 64.3, 28.45, 64.45]], ["C", [27.6, 64.6, 26.6, 64.8]], ["C", [26.1, 64.9, 25.7, 64.85]], ["C", [25.3, 64.8, 24.8, 64.9]], ["C", [24.4, 65.1, 23.45, 65.05]], ["C", [22.5, 65, 22.1, 64.9]], ["C", [21.6, 64.7, 21.25, 64.75]], ["C", [20.9, 64.8, 20.4, 64.7]], ["C", [19.4, 64.5, 18.5, 64.3]], ["C", [17.6, 64.1, 16.8, 63.7]], ["C", [10.9, 61.1, 8.7, 54.7]], ["C", [8.4, 53.9, 8.25, 53]], ["C", [8.1, 52.1, 7.9, 51.3]], ["C", [7.8, 50.8, 7.8, 49.8]], ["C", [7.6, 49.4, 7.65, 48.95]], ["C", [7.7, 48.5, 7.6, 48.1]], ["L", [7.6, 47]], ["C", [7.2, 46, 7.6, 44.9]], ["L", [7.6, 44.1]], ["C", [7.6, 43.6, 7.65, 43.15]], ["C", [7.7, 42.7, 7.7, 42.2]], ["C", [8, 40.9, 8.2, 39.6]], ["C", [8.4, 38.3, 8.9, 37.1]], ["C", [10.3, 33.6, 12.35, 31.15]], ["C", [14.4, 28.7, 17.9, 27.3]], ["C", [18.8, 26.9, 19.75, 26.7]], ["C", [20.7, 26.5, 21.8, 26.3]], ["C", [22.1, 26.2, 22.75, 26.3]], ["C", [23.4, 26.4, 23.6, 26.2]], ["C", [29.8, 26.1, 33.4, 28.55]], ["C", [37, 31, 38.9, 35.3]], ["C", [39.3, 36.1, 39.55, 37.05]], ["C", [39.8, 38, 40, 38.9]], ["C", [40.1, 39.2, 40.1, 39.5]], ["C", [40.1, 39.8, 40.2, 40.1]], ["C", [40.4, 40.7, 40.4, 41.35]], ["C", [40.4, 42, 40.6, 42.7]], ["C", [40.7, 43, 40.65, 43.35]], ["M", [82.2, 80.3]], ["C", [82.4, 79.8, 82.35, 78.7]], ["C", [82.3, 77.6, 82.2, 77.1]], ["L", [82.2, 76.4]], ["C", [82.1, 75.9, 82.1, 75.5]], ["C", [82.1, 75.1, 82, 74.7]], ["C", [81.7, 73.3, 81.4, 72.1]], ["C", [81.1, 70.9, 80.4, 69.8]], ["C", [80, 69.3, 79.5, 68.85]], ["C", [79, 68.4, 78.5, 68.1]], ["C", [77.8, 67.6, 77.05, 67.5]], ["C", [76.3, 67.4, 75.2, 67.4]], ["C", [75, 67.6, 74.8, 67.55]], ["C", [74.6, 67.5, 74.4, 67.6]], ["C", [73.6, 67.8, 73, 68.2]], ["C", [71.8, 68.9, 71.1, 70.05]], ["C", [70.4, 71.2, 69.9, 72.6]], ["C", [69.6, 73.4, 69.5, 74.4]], ["C", [69.4, 75.4, 69.2, 76.4]], ["L", [69.2, 78.3]], ["C", [69, 78.9, 69.05, 80.2]], ["C", [69.1, 81.5, 69.2, 82.1]], ["C", [69.4, 82.6, 69.3, 83.15]], ["C", [69.2, 83.7, 69.4, 84.2]], ["C", [69.9, 86.1, 70.25, 87.35]], ["C", [70.6, 88.6, 71.8, 89.8]], ["C", [72.3, 90.3, 73.55, 90.9]], ["C", [74.8, 91.5, 76, 91.3]], ["C", [76.3, 91.2, 76.65, 91.2]], ["C", [77, 91.2, 77.3, 91.1]], ["C", [78.1, 90.8, 78.8, 90.35]], ["C", [79.5, 89.9, 79.9, 89.3]], ["C", [80.5, 88.5, 80.9, 87.6]], ["C", [81.3, 86.7, 81.7, 85.6]], ["C", [82, 84.7, 82, 83.65]], ["C", [82, 82.6, 82.2, 81.5]], ["L", [82.2, 80.3]], ["M", [91.8, 73.5]], ["C", [92, 74.2, 92, 74.95]], ["C", [92, 75.7, 92.2, 76.5]], ["C", [92.2, 77, 92.25, 77.4]], ["C", [92.3, 77.8, 92.3, 78.3]], ["C", [92.4, 78.8, 92.4, 79.45]], ["C", [92.4, 80.1, 92.3, 80.6]], ["L", [92.3, 81.5]], ["C", [92.2, 81.9, 92.2, 82.3]], ["C", [92.2, 82.7, 92.1, 83.1]], ["C", [92, 83.6, 92, 84.05]], ["C", [92, 84.5, 91.8, 85]], ["C", [91.6, 86.1, 91.35, 87.1]], ["C", [91.1, 88.1, 90.7, 89]], ["C", [88, 95.5, 81.2, 97.9]], ["C", [80.5, 98.1, 79.75, 98.2]], ["C", [79, 98.3, 78.2, 98.5]], ["C", [77.7, 98.6, 77.3, 98.55]], ["C", [76.9, 98.5, 76.4, 98.6]], ["C", [76, 98.8, 75.05, 98.75]], ["C", [74.1, 98.7, 73.8, 98.5]], ["C", [73.3, 98.4, 72.9, 98.45]], ["C", [72.5, 98.5, 72.1, 98.4]], ["C", [71.2, 98.2, 70.35, 98]], ["C", [69.5, 97.8, 68.7, 97.4]], ["C", [65.3, 96, 63.35, 93.7]], ["C", [61.4, 91.4, 60.3, 87.9]], ["C", [60, 87.1, 59.85, 86.25]], ["C", [59.7, 85.4, 59.5, 84.6]], ["C", [59.5, 84.3, 59.45, 84.05]], ["C", [59.4, 83.8, 59.4, 83.5]], ["C", [59.3, 83, 59.3, 82.45]], ["C", [59.3, 81.9, 59.2, 81.4]], ["L", [59.2, 80.2]], ["C", [59, 79.4, 59.2, 78.4]], ["L", [59.2, 77.5]], ["C", [59.2, 76.5, 59.3, 76.1]], ["C", [59.4, 75.6, 59.4, 74.6]], ["C", [59.7, 73.6, 59.85, 72.6]], ["C", [60, 71.6, 60.4, 70.7]], ["C", [61.9, 67, 63.9, 64.75]], ["C", [65.9, 62.5, 69.7, 61]], ["C", [70.5, 60.6, 71.45, 60.45]], ["C", [72.4, 60.3, 73.5, 60.1]], ["C", [74, 60.1, 74.45, 60.05]], ["C", [74.9, 60, 75.4, 60]], ["C", [81.3, 59.8, 84.95, 62.1]], ["C", [88.6, 64.4, 90.4, 68.5]], ["C", [90.8, 69.3, 91.05, 70.3]], ["C", [91.3, 71.3, 91.6, 72.3]], ["C", [91.7, 72.6, 91.7, 72.9]], ["C", [91.7, 73.2, 91.8, 73.5]]];
__motifs["&"] = [["M", [23.1, 67.9]], ["C", [21.1, 69.1, 19.5, 70.85]], ["C", [17.9, 72.6, 17.1, 74.9]], ["C", [17, 75.3, 16.95, 75.7]], ["C", [16.9, 76.1, 16.8, 76.6]], ["C", [16.6, 77.6, 16.8, 78.75]], ["C", [17, 79.9, 17.2, 80.6]], ["C", [18.9, 85.3, 24.2, 87]], ["C", [25.2, 87.3, 26.8, 87.35]], ["C", [28.4, 87.4, 29.5, 87.1]], ["C", [31.8, 86.5, 33.45, 85.55]], ["C", [35.1, 84.6, 36.7, 83.2]], ["C", [37.2, 82.8, 37.75, 82.1]], ["C", [38.3, 81.4, 38, 80.4]], ["C", [37.8, 79.6, 37.25, 78.95]], ["C", [36.7, 78.3, 36.2, 77.7]], ["C", [35.4, 76.6, 34.6, 75.7]], ["C", [33.8, 74.8, 33, 73.7]], ["C", [32.8, 73.5, 32.65, 73.35]], ["C", [32.5, 73.2, 32.3, 73]], ["C", [31.6, 72.1, 30.9, 71.25]], ["C", [30.2, 70.4, 29.5, 69.5]], ["C", [28.8, 68.6, 28, 67.7]], ["C", [27.2, 66.8, 25.5, 66.8]], ["C", [25.3, 66.9, 24.7, 67.1]], ["C", [24.2, 67.3, 23.85, 67.5]], ["C", [23.5, 67.7, 23.1, 67.9]], ["M", [30.4, 35.1]], ["C", [29.6, 35.3, 29.1, 35.5]], ["C", [26.6, 36.5, 25.5, 39.5]], ["C", [25.3, 40.3, 25.3, 41.3]], ["C", [25.3, 42.3, 25.5, 43.1]], ["C", [25.7, 43.6, 25.75, 44.05]], ["C", [25.8, 44.5, 26, 45]], ["C", [26.5, 46.2, 27.15, 47.15]], ["C", [27.8, 48.1, 28.5, 49.1]], ["C", [28.9, 49.6, 29.75, 50.45]], ["C", [30.6, 51.3, 31.5, 51.1]], ["C", [32.5, 50.9, 33.05, 50.45]], ["C", [33.6, 50, 34.3, 49.5]], ["C", [36.8, 47.7, 37.8, 44.4]], ["C", [38, 44, 37.95, 43.65]], ["C", [37.9, 43.3, 38.1, 42.9]], ["C", [38.3, 42.2, 38.2, 41.4]], ["C", [38.1, 40.6, 37.9, 40.1]], ["C", [36.8, 36.3, 33.5, 35.3]], ["C", [32.6, 35, 31.3, 35]], ["C", [31.1, 35.1, 30.85, 35.05]], ["C", [30.6, 35, 30.4, 35.1]], ["M", [49.15, 49]], ["C", [48.7, 50.2, 48.1, 51.3]], ["C", [47, 52.9, 45.6, 54.45]], ["C", [44.2, 56, 42.7, 57.1]], ["C", [42.2, 57.6, 41.6, 57.95]], ["C", [41, 58.3, 40.5, 58.7]], ["C", [40.2, 58.9, 39.9, 59.15]], ["C", [39.6, 59.4, 39.4, 59.7]], ["C", [38.9, 60.3, 39, 61.05]], ["C", [39.1, 61.8, 39.5, 62.3]], ["C", [39.8, 62.8, 40.2, 63.2]], ["C", [40.6, 63.6, 40.9, 64.1]], ["C", [41.9, 65.5, 42.9, 66.65]], ["C", [43.9, 67.8, 44.9, 69.1]], ["C", [45.2, 69.6, 45.95, 70]], ["C", [46.7, 70.4, 47.4, 69.9]], ["C", [48, 69.5, 48.35, 68.8]], ["C", [48.7, 68.1, 48.9, 67.25]], ["C", [49.1, 66.4, 49.3, 65.6]], ["C", [49.5, 64.8, 50, 64.2]], ["C", [50.8, 63.2, 52.7, 63.2]], ["C", [54.6, 63.2, 56.3, 63.2]], ["C", [56.9, 63.2, 57.6, 63.15]], ["C", [58.3, 63.1, 58.8, 63.3]], ["L", [59.4, 63.3]], ["C", [60.7, 63.5, 61.2, 64.2]], ["C", [61.7, 65, 61.35, 66.5]], ["C", [61, 68, 60.8, 68.8]], ["C", [60.6, 69.5, 60.45, 70.1]], ["C", [60.3, 70.7, 60.1, 71.2]], ["C", [59.4, 72.9, 58.75, 74.45]], ["C", [58.1, 76, 57.3, 77.4]], ["C", [57, 77.9, 56.3, 79]], ["C", [55.6, 80.1, 55.8, 81]], ["C", [56.2, 82.4, 57.1, 83.25]], ["C", [58, 84.1, 58.8, 85.1]], ["C", [60, 86.8, 61.4, 88.2]], ["C", [62.8, 89.6, 64, 91.3]], ["C", [64.3, 91.8, 64.7, 92.1]], ["C", [65.1, 92.4, 65.4, 92.9]], ["C", [65.9, 93.6, 66.5, 94.25]], ["C", [67.1, 94.9, 67.5, 95.7]], ["C", [67.7, 96.2, 67.55, 96.55]], ["C", [67.4, 96.9, 67.1, 97.1]], ["C", [66.4, 97.6, 65.2, 97.55]], ["C", [64, 97.5, 62.9, 97.5]], ["L", [56.8, 97.5]], ["C", [55.1, 97.5, 53.85, 97.45]], ["C", [52.6, 97.4, 51.6, 96.6]], ["C", [51.2, 96.3, 50.9, 95.95]], ["C", [50.6, 95.6, 50.3, 95.2]], ["C", [50.1, 95, 49.95, 94.8]], ["C", [49.8, 94.6, 49.6, 94.4]], ["C", [49.2, 93.9, 48.8, 93.4]], ["C", [48.4, 92.9, 47.9, 92.4]], ["C", [47.6, 92.1, 47.1, 91.75]], ["C", [46.6, 91.4, 45.8, 91.6]], ["C", [45, 91.8, 44.5, 92.2]], ["C", [44, 92.6, 43.5, 93]], ["C", [42.7, 93.5, 41.9, 94.1]], ["C", [41.1, 94.7, 40.3, 95.2]], ["C", [38.9, 96, 37.25, 96.65]], ["C", [35.6, 97.3, 33.9, 97.9]], ["C", [33.2, 98.1, 32.5, 98.2]], ["C", [31.8, 98.3, 31, 98.5]], ["C", [30.5, 98.7, 30, 98.65]], ["C", [29.5, 98.6, 29, 98.7]], ["L", [28.3, 98.7]], ["C", [27.8, 98.9, 26.85, 98.9]], ["C", [25.9, 98.9, 25.4, 98.8]], ["C", [24.9, 98.8, 24.5, 98.75]], ["C", [24.1, 98.7, 23.6, 98.7]], ["C", [22.6, 98.5, 21.6, 98.4]], ["C", [20.6, 98.3, 19.7, 98.1]], ["C", [18.4, 97.7, 17.35, 97.4]], ["C", [16.3, 97.1, 15.2, 96.6]], ["C", [12.9, 95.6, 10.85, 94.05]], ["C", [8.8, 92.5, 7.5, 90.7]], ["C", [7, 90, 6.55, 89.3]], ["C", [6.1, 88.6, 5.6, 87.8]], ["C", [5.2, 87.1, 4.95, 86.4]], ["C", [4.7, 85.7, 4.4, 84.9]], ["C", [3.9, 83.5, 3.6, 81.95]], ["C", [3.3, 80.4, 3.3, 78.6]], ["L", [3.3, 76.3]], ["C", [3.4, 76, 3.4, 75.65]], ["C", [3.4, 75.3, 3.5, 75]], ["C", [3.7, 74.2, 3.8, 73.5]], ["C", [3.9, 72.8, 4.1, 72.1]], ["C", [5.2, 68.7, 7.35, 66]], ["C", [9.5, 63.3, 12.1, 61.3]], ["C", [13.8, 60.1, 15.8, 58.8]], ["C", [16.4, 58.4, 17.05, 58.05]], ["C", [17.7, 57.7, 18, 56.9]], ["C", [18.3, 55.9, 17.6, 54.9]], ["C", [16.9, 53.9, 16.5, 53.4]], ["C", [14.7, 50.8, 13.6, 48]], ["C", [13.3, 47.3, 13.15, 46.6]], ["C", [13, 45.9, 12.8, 45.1]], ["C", [12.3, 43.4, 12.45, 41.2]], ["C", [12.6, 39, 13.1, 37.6]], ["C", [14.5, 33.4, 17.1, 30.95]], ["C", [19.7, 28.5, 23.6, 26.8]], ["C", [24.7, 26.4, 25.8, 26.2]], ["C", [26.9, 26, 28.1, 25.7]], ["C", [28.7, 25.7, 29.3, 25.65]], ["C", [29.9, 25.6, 30.5, 25.5]], ["C", [36.8, 25.4, 41.3, 27.65]], ["C", [45.8, 29.9, 48.2, 33.7]], ["C", [48.5, 34.3, 48.75, 34.9]], ["C", [49, 35.5, 49.3, 36.1]], ["C", [50.1, 38.1, 50.45, 41.05]], ["C", [50.8, 44, 50, 46.5]], ["C", [49.6, 47.8, 49.15, 49]]];
__motifs["*"] = [["M", [16.4, 29.4]], ["C", [16.5, 29, 16.4, 28.65]], ["C", [16.3, 28.3, 16.5, 27.9]], ["C", [16.8, 26.7, 17.9, 26.3]], ["C", [18.1, 26.3, 18.35, 26.25]], ["C", [18.6, 26.2, 18.9, 26.2]], ["C", [20.5, 26.1, 21.95, 26.2]], ["C", [23.4, 26.3, 23.9, 27.4]], ["C", [24.1, 27.9, 24.1, 28.6]], ["C", [24.1, 29.3, 24.1, 30.1]], ["C", [24.1, 31.2, 24.15, 32.2]], ["C", [24.2, 33.2, 24.2, 34.2]], ["C", [24.2, 35.2, 24.3, 36.05]], ["C", [24.4, 36.9, 24.9, 37.3]], ["C", [25.4, 37.6, 26.05, 37.65]], ["C", [26.7, 37.7, 27.3, 37.5]], ["C", [28.7, 37, 30.05, 36.45]], ["C", [31.4, 35.9, 32.8, 35.4]], ["C", [33.6, 35.1, 34.55, 35.1]], ["C", [35.5, 35.1, 36, 35.7]], ["C", [36.4, 36.2, 36.65, 36.75]], ["C", [36.9, 37.3, 37.1, 37.9]], ["C", [37.3, 38.4, 37.4, 38.85]], ["C", [37.5, 39.3, 37.7, 39.8]], ["C", [38, 41.2, 37.2, 41.75]], ["C", [36.4, 42.3, 35.6, 42.7]], ["C", [34.3, 43.2, 32.9, 43.65]], ["C", [31.5, 44.1, 30.2, 44.6]], ["C", [29.5, 44.9, 28.85, 45.15]], ["C", [28.2, 45.4, 28, 46.2]], ["C", [27.7, 47.1, 28.35, 47.95]], ["C", [29, 48.8, 29.4, 49.3]], ["C", [30.2, 50.4, 30.9, 51.4]], ["C", [31.6, 52.4, 32.4, 53.5]], ["C", [32.6, 53.8, 32.9, 54.3]], ["C", [33.2, 54.8, 33, 55.5]], ["C", [32.8, 56.4, 32.1, 56.95]], ["C", [31.4, 57.5, 30.7, 58]], ["C", [30.2, 58.3, 29.75, 58.7]], ["C", [29.3, 59.1, 28.7, 59.3]], ["C", [27.5, 59.7, 26.8, 58.95]], ["C", [26.1, 58.2, 25.6, 57.6]], ["C", [24.9, 56.6, 24.2, 55.65]], ["C", [23.5, 54.7, 22.7, 53.7]], ["C", [22.3, 53.1, 21.8, 52.4]], ["C", [21.3, 51.7, 20.4, 51.5]], ["C", [19.6, 51.3, 19, 52]], ["C", [18.4, 52.7, 18.1, 53.1]], ["L", [15.4, 57]], ["C", [15, 57.5, 14.75, 58]], ["C", [14.5, 58.5, 14, 58.8]], ["C", [13.6, 59.1, 13, 59.25]], ["C", [12.4, 59.4, 11.8, 59.2]], ["C", [11.2, 59, 10.7, 58.6]], ["C", [10.2, 58.2, 9.7, 57.8]], ["C", [9.2, 57.4, 8.6, 56.95]], ["C", [8, 56.5, 7.7, 55.8]], ["C", [7.5, 55.3, 7.65, 54.7]], ["C", [7.8, 54.1, 8, 53.8]], ["C", [8.7, 52.6, 9.55, 51.5]], ["C", [10.4, 50.4, 11.2, 49.3]], ["C", [11.6, 48.8, 12.25, 47.9]], ["C", [12.9, 47, 12.6, 46.1]], ["C", [12.3, 45.3, 11.6, 45]], ["C", [10.9, 44.7, 10.1, 44.4]], ["C", [8.9, 44, 7.65, 43.65]], ["C", [6.4, 43.3, 5.3, 42.8]], ["C", [4.3, 42.3, 3.5, 41.7]], ["C", [2.7, 41.1, 3.2, 39.6]], ["C", [3.3, 39.1, 3.45, 38.7]], ["C", [3.6, 38.3, 3.8, 37.8]], ["C", [4, 37.2, 4.2, 36.6]], ["C", [4.4, 36, 4.9, 35.6]], ["C", [6, 34.7, 7.4, 35.2]], ["C", [8.8, 35.7, 10.05, 36.2]], ["C", [11.3, 36.7, 12.6, 37.2]], ["C", [13.3, 37.5, 14.3, 37.65]], ["C", [15.3, 37.8, 15.8, 37.1]], ["C", [16.4, 36.3, 16.35, 34.35]], ["C", [16.3, 32.4, 16.3, 31]], ["C", [16.3, 30.6, 16.3, 30.15]], ["C", [16.3, 29.7, 16.4, 29.4]]];
__motifs["("] = [["M", [26.5, 24.45]], ["C", [27.4, 24.5, 28.05, 24.85]], ["C", [28.7, 25.15, 28.9, 25.7]], ["C", [29.1, 26.3, 28.85, 26.95]], ["C", [28.6, 27.55, 28.4, 27.9]], ["C", [27.9, 29.05, 27.4, 30.15]], ["C", [26.9, 31.35, 26.4, 32.4]], ["C", [25.3, 35.25, 24.45, 38.15]], ["C", [23.6, 41, 22.6, 43.95]], ["C", [22.1, 45.4, 21.85, 47.05]], ["C", [21.6, 48.7, 21.2, 50.25]], ["C", [20.7, 51.95, 20.6, 53.55]], ["C", [20.5, 55.2, 20.1, 56.9]], ["C", [20, 57.4, 20, 58]], ["C", [20, 58.55, 19.9, 59.1]], ["C", [19.7, 60.25, 19.7, 61.5]], ["C", [19.7, 62.85, 19.5, 63.9]], ["C", [19.3, 64.55, 19.4, 65.2]], ["C", [19.5, 65.8, 19.4, 66.35]], ["L", [19.4, 68.65]], ["C", [19.2, 69.6, 19.4, 70.55]], ["C", [19.4, 71.15, 19.35, 71.7]], ["C", [19.3, 72.3, 19.4, 72.85]], ["L", [19.4, 74.1]], ["C", [19.6, 74.75, 19.5, 75.5]], ["C", [19.4, 76.2, 19.6, 76.85]], ["C", [19.6, 77.25, 19.65, 77.55]], ["C", [19.7, 77.8, 19.7, 78.2]], ["C", [19.9, 79.15, 19.9, 80.1]], ["C", [19.9, 81.15, 20.1, 82.1]], ["C", [20.3, 83.25, 20.35, 84.2]], ["C", [20.4, 85.25, 20.6, 86.3]], ["C", [20.8, 87, 20.85, 87.75]], ["C", [20.9, 88.4, 21.1, 89.1]], ["C", [21.4, 90.4, 21.65, 91.75]], ["C", [21.9, 93, 22.3, 94.25]], ["C", [22.8, 96.25, 23.25, 98.05]], ["C", [23.7, 99.85, 24.3, 101.6]], ["C", [24.5, 102.25, 24.65, 102.75]], ["C", [24.8, 103.3, 25, 103.95]], ["C", [25.8, 105.6, 26.4, 107.4]], ["C", [27, 109.2, 27.8, 110.95]], ["C", [28.1, 111.5, 28.6, 112.65]], ["C", [29.1, 113.7, 28.8, 114.55]], ["C", [28.5, 115.2, 27.4, 115.4]], ["C", [27.2, 115.5, 27, 115.45]], ["C", [26.8, 115.4, 26.6, 115.5]], ["L", [22.6, 115.5]], ["C", [21.6, 115.5, 20.7, 115.5]], ["C", [19.8, 115.5, 19, 115.2]], ["C", [17.9, 114.75, 17.35, 113.6]], ["C", [16.8, 112.55, 16.2, 111.5]], ["C", [14.8, 109.2, 13.7, 106.7]], ["C", [12.6, 104.15, 11.5, 101.5]], ["C", [10.7, 99.85, 10.1, 98.1]], ["C", [9.5, 96.35, 9, 94.6]], ["C", [8.6, 93.65, 8.4, 92.6]], ["C", [8.2, 91.65, 7.9, 90.6]], ["L", [6.7, 85.55]], ["C", [6.3, 84, 6.2, 82.45]], ["C", [6.1, 80.95, 5.8, 79.55]], ["C", [5.7, 79.05, 5.7, 78.55]], ["C", [5.7, 78.1, 5.6, 77.65]], ["C", [5.5, 76.75, 5.45, 75.8]], ["C", [5.4, 74.95, 5.4, 74]], ["L", [5.4, 72.55]], ["C", [5.2, 72, 5.25, 71.45]], ["C", [5.3, 70.95, 5.3, 70.4]], ["C", [5.3, 69.9, 5.25, 69.4]], ["C", [5.2, 68.95, 5.4, 68.45]], ["L", [5.4, 67.4]], ["C", [5.4, 66.95, 5.4, 66.35]], ["C", [5.4, 65.7, 5.5, 65.2]], ["C", [5.5, 64.75, 5.55, 64.25]], ["C", [5.6, 63.7, 5.6, 63.2]], ["L", [6.2, 57.8]], ["C", [6.4, 56.75, 6.55, 55.75]], ["C", [6.7, 54.8, 6.9, 53.7]], ["C", [7.1, 52.8, 7.3, 51.85]], ["C", [7.5, 50.8, 7.7, 49.85]], ["C", [8.4, 47.55, 8.95, 45.15]], ["C", [9.5, 42.8, 10.4, 40.7]], ["C", [10.7, 39.95, 10.9, 39.25]], ["C", [11.1, 38.5, 11.5, 37.75]], ["C", [12.3, 35.65, 13.25, 33.6]], ["C", [14.2, 31.55, 15.3, 29.65]], ["C", [16.1, 28.4, 16.8, 27.1]], ["C", [17.5, 25.7, 18.8, 24.95]], ["C", [19.2, 24.75, 19.65, 24.7]], ["C", [20.1, 24.65, 20.6, 24.5]], ["L", [22.8, 24.5]], ["C", [23.6, 24.5, 24.6, 24.45]], ["C", [25.6, 24.4, 26.5, 24.45]]];
__motifs[")"] = [["M", [8.95, 24.5]], ["C", [9.8, 24.5, 10.6, 24.8]], ["C", [11.7, 25.3, 12.25, 26.4]], ["C", [12.8, 27.5, 13.45, 28.5]], ["C", [14.8, 30.8, 15.9, 33.35]], ["C", [17.05, 35.9, 18.1, 38.5]], ["C", [18.9, 40.2, 19.55, 41.95]], ["C", [20.1, 43.7, 20.6, 45.4]], ["C", [21.05, 46.4, 21.25, 47.4]], ["C", [21.45, 48.4, 21.75, 49.4]], ["L", [22.9, 54.5]], ["C", [23.35, 56, 23.45, 57.55]], ["C", [23.55, 59.05, 23.85, 60.5]], ["C", [23.95, 61, 23.95, 61.45]], ["C", [23.95, 61.9, 24, 62.4]], ["C", [24.1, 63.25, 24.15, 64.2]], ["C", [24.2, 65.1, 24.2, 66]], ["L", [24.2, 67.45]], ["C", [24.4, 68, 24.35, 68.55]], ["C", [24.3, 69.1, 24.3, 69.6]], ["C", [24.3, 70.1, 24.35, 70.6]], ["C", [24.4, 71.1, 24.2, 71.55]], ["L", [24.2, 72.6]], ["C", [24.2, 73.1, 24.2, 73.65]], ["C", [24.2, 74.3, 24.1, 74.8]], ["C", [24.1, 75.3, 24.05, 75.75]], ["C", [24, 76.3, 24, 76.8]], ["L", [23.45, 82.2]], ["C", [23.25, 83.3, 23.1, 84.25]], ["C", [22.9, 85.2, 22.7, 86.3]], ["C", [22.5, 87.2, 22.3, 88.15]], ["C", [22.1, 89.2, 21.9, 90.2]], ["C", [21.25, 92.45, 20.65, 94.85]], ["C", [20.1, 97.2, 19.25, 99.3]], ["C", [18.9, 100.1, 18.7, 100.75]], ["C", [18.5, 101.5, 18.1, 102.3]], ["C", [17.35, 104.4, 16.35, 106.45]], ["C", [15.45, 108.5, 14.3, 110.4]], ["C", [13.55, 111.6, 12.8, 112.95]], ["C", [12.1, 114.3, 10.8, 115.1]], ["C", [10.4, 115.25, 9.95, 115.3]], ["C", [9.5, 115.35, 9, 115.5]], ["L", [6.8, 115.5]], ["C", [6, 115.5, 5.05, 115.55]], ["C", [4, 115.6, 3.15, 115.55]], ["C", [2.2, 115.5, 1.5, 115.2]], ["C", [0.85, 114.9, 0.7, 114.3]], ["C", [0.5, 113.7, 0.75, 113.1]], ["C", [1.05, 112.5, 1.2, 112.1]], ["C", [1.7, 111, 2.2, 109.85]], ["C", [2.7, 108.7, 3.2, 107.6]], ["C", [4.3, 104.8, 5.2, 101.9]], ["C", [6, 99, 7, 96.1]], ["C", [7.5, 94.6, 7.75, 92.95]], ["C", [8, 91.3, 8.4, 89.8]], ["C", [8.9, 88.1, 9, 86.45]], ["C", [9.1, 84.8, 9.5, 83.1]], ["C", [9.6, 82.6, 9.6, 82]], ["C", [9.6, 81.5, 9.7, 80.9]], ["C", [9.9, 79.8, 9.9, 78.5]], ["C", [9.9, 77.2, 10.1, 76.1]], ["C", [10.3, 75.5, 10.2, 74.85]], ["C", [10.1, 74.2, 10.2, 73.65]], ["L", [10.2, 71.4]], ["C", [10.4, 70.5, 10.2, 69.45]], ["C", [10.2, 68.9, 10.25, 68.3]], ["C", [10.3, 67.7, 10.2, 67.2]], ["L", [10.2, 65.9]], ["C", [10, 65.25, 10.1, 64.55]], ["C", [10.2, 63.8, 10, 63.15]], ["C", [10, 62.8, 9.95, 62.5]], ["C", [9.9, 62.2, 9.9, 61.8]], ["C", [9.7, 60.9, 9.7, 59.9]], ["C", [9.7, 58.9, 9.5, 57.9]], ["C", [9.35, 56.8, 9.3, 55.8]], ["C", [9.25, 54.8, 9.05, 53.7]], ["C", [8.8, 53, 8.75, 52.3]], ["C", [8.7, 51.6, 8.5, 50.9]], ["C", [8.2, 49.6, 7.95, 48.3]], ["C", [7.7, 47, 7.3, 45.8]], ["C", [6.85, 43.8, 6.35, 42]], ["C", [5.9, 40.2, 5.3, 38.4]], ["C", [5.15, 37.8, 5, 37.25]], ["C", [4.85, 36.7, 4.6, 36.05]], ["C", [3.8, 34.4, 3.2, 32.6]], ["C", [2.65, 30.8, 1.8, 29.1]], ["C", [1.5, 28.5, 1.05, 27.4]], ["C", [0.5, 26.3, 0.85, 25.5]], ["C", [1.1, 24.8, 2.2, 24.6]], ["C", [2.4, 24.5, 2.65, 24.55]], ["C", [2.85, 24.6, 3.05, 24.5]], ["L", [7.05, 24.5]], ["C", [8, 24.5, 8.95, 24.5]]];
__motifs["_"] = [["M", [48.8, 105.4]], ["C", [49.1, 105.6, 49.45, 106.3]], ["C", [49.8, 106.9, 49.6, 107.5]], ["C", [49.4, 108.95, 48.7, 109.3]], ["C", [48.1, 109.7, 47.1, 109.75]], ["C", [46.1, 109.8, 45.1, 109.8]], ["L", [5, 109.8]], ["C", [4.1, 109.8, 3.05, 109.8]], ["C", [2, 109.8, 1.3, 109.5]], ["C", [0.2, 109, 0, 107.55]], ["C", [-0.2, 106.1, 0.9, 105.4]], ["C", [1.1, 105.2, 1.45, 105.15]], ["C", [1.8, 105.1, 2.1, 105]], ["C", [2.5, 105, 2.6, 104.9]], ["L", [45.4, 104.9]], ["C", [46.4, 104.9, 47.3, 104.9]], ["C", [48.2, 104.9, 48.8, 105.4]]];
__motifs["+"] = [["M", [34.9, 48.1]], ["C", [35.4, 48.85, 35.4, 50.15]], ["C", [35.4, 51.4, 35.4, 52.6]], ["L", [35.4, 61.65]], ["C", [35.4, 63.1, 35.45, 64.25]], ["C", [35.5, 65.35, 36, 66.2]], ["C", [36.7, 67, 38.4, 67]], ["C", [40.1, 67, 41.5, 67]], ["L", [50.3, 67]], ["C", [51.4, 67, 52.55, 67.05]], ["C", [53.7, 67.1, 54.3, 67.55]], ["C", [55.2, 68.2, 55.2, 69.65]], ["C", [55.2, 71.2, 55.2, 72.6]], ["C", [55.2, 73.5, 55.25, 74.5]], ["C", [55.3, 75.5, 55, 76.05]], ["C", [54.5, 77.3, 53.15, 77.45]], ["C", [51.8, 77.6, 50.1, 77.6]], ["L", [40.2, 77.6]], ["C", [38.8, 77.6, 37.65, 77.7]], ["C", [36.5, 77.75, 35.9, 78.55]], ["C", [35.4, 79.3, 35.4, 80.5]], ["C", [35.4, 81.8, 35.4, 83]], ["L", [35.4, 92.3]], ["C", [35.4, 93.4, 35.4, 94.55]], ["C", [35.4, 95.8, 34.9, 96.45]], ["C", [34.6, 96.85, 34.15, 97]], ["C", [33.7, 97.15, 33.2, 97.4]], ["C", [32.4, 97.6, 31.6, 97.55]], ["C", [30.8, 97.5, 30, 97.5]], ["C", [28.6, 97.5, 27.25, 97.4]], ["C", [25.95, 97.25, 25.3, 96.45]], ["C", [24.8, 95.8, 24.8, 94.45]], ["C", [24.8, 93.15, 24.8, 92]], ["L", [24.8, 82.9]], ["C", [24.8, 81.6, 24.75, 80.35]], ["C", [24.7, 79.2, 24.2, 78.35]], ["C", [23.6, 77.6, 22.3, 77.6]], ["C", [21, 77.6, 19.65, 77.6]], ["L", [9.6, 77.6]], ["C", [8.4, 77.6, 7.25, 77.5]], ["C", [6, 77.4, 5.5, 76.7]], ["C", [5.05, 75.95, 4.95, 74.95]], ["C", [4.9, 73.85, 4.9, 72.8]], ["C", [4.9, 71.1, 4.95, 69.4]], ["C", [5.05, 67.75, 6.3, 67.3]], ["C", [7.15, 67, 8.35, 67]], ["C", [9.6, 67, 10.7, 67]], ["L", [19.3, 67]], ["C", [21, 67, 22.45, 66.9]], ["C", [23.95, 66.8, 24.5, 65.65]], ["C", [24.9, 64.9, 24.85, 63.65]], ["C", [24.8, 62.5, 24.8, 61.35]], ["L", [24.8, 52.75]], ["C", [24.8, 51.7, 24.75, 50.5]], ["C", [24.7, 49.3, 25.1, 48.5]], ["C", [25.4, 47.7, 26.5, 47.3]], ["C", [26.8, 47.2, 27.4, 47.2]], ["C", [28.3, 47.2, 29.45, 47.05]], ["C", [30.6, 46.95, 31.7, 47]], ["C", [32.8, 47.05, 33.7, 47.35]], ["C", [34.6, 47.6, 34.9, 48.1]]];
__motifs["-"] = [["M", [34.4, 64.6]], ["C", [34.9, 65, 35.1, 65.85]], ["C", [35.3, 66.7, 35.35, 67.75]], ["C", [35.4, 68.8, 35.35, 69.9]], ["C", [35.3, 71, 35.3, 71.9]], ["C", [35.3, 72.7, 35.3, 73.5]], ["C", [35.3, 74.2, 35.1, 74.8]], ["C", [34.6, 75.9, 33.5, 76.05]], ["C", [32.4, 76.2, 30.9, 76.2]], ["L", [12.2, 76.2]], ["C", [10.9, 76.2, 9.1, 76.25]], ["C", [7.3, 76.3, 6.5, 75.8]], ["C", [5.9, 75.45, 5.65, 74.55]], ["C", [5.4, 73.7, 5.35, 72.65]], ["C", [5.3, 71.6, 5.35, 70.45]], ["C", [5.4, 69.35, 5.4, 68.4]], ["C", [5.4, 67.5, 5.45, 66.6]], ["C", [5.5, 65.7, 5.8, 65.2]], ["C", [6.2, 64.7, 7.1, 64.3]], ["C", [7.3, 64.3, 7.55, 64.25]], ["C", [7.8, 64.2, 8, 64.2]], ["L", [31.5, 64.2]], ["C", [32.4, 64.2, 33.15, 64.25]], ["C", [33.9, 64.3, 34.4, 64.6]]];
__motifs["="] = [["M", [9.1, 77.7]], ["L", [48, 77.7]], ["C", [48.7, 77.7, 49.5, 77.65]], ["C", [50.3, 77.55, 50.9, 77.7]], ["L", [52, 77.7]], ["C", [53.7, 77.7, 54.3, 78.2]], ["C", [55.2, 78.95, 55.2, 80.7]], ["C", [55.2, 82.5, 55.2, 84]], ["C", [55.2, 84.6, 55.25, 85.25]], ["C", [55.3, 85.85, 55.1, 86.3]], ["C", [54.6, 87.95, 53.3, 88.1]], ["C", [52, 88.2, 50, 88.2]], ["L", [10, 88.2]], ["C", [9.1, 88.2, 8.1, 88.25]], ["C", [7.1, 88.3, 6.3, 88.05]], ["C", [4.9, 87.45, 4.9, 85.7]], ["C", [4.9, 83.95, 4.9, 82]], ["C", [4.9, 81.05, 4.9, 80.1]], ["C", [4.9, 79.25, 5.4, 78.6]], ["C", [5.7, 78.1, 6.2, 78]], ["C", [6.7, 77.9, 7.4, 77.7]], ["C", [7.8, 77.65, 8.3, 77.75]], ["C", [8.8, 77.9, 9.1, 77.7]], ["M", [5.4, 57.15]], ["C", [5.8, 56.8, 6.6, 56.4]], ["C", [6.8, 56.4, 7.1, 56.35]], ["C", [7.4, 56.3, 7.6, 56.3]], ["L", [50.2, 56.3]], ["C", [51.5, 56.3, 52.6, 56.35]], ["C", [53.7, 56.4, 54.4, 56.9]], ["C", [55.2, 57.5, 55.2, 59.35]], ["C", [55.2, 61.25, 55.2, 62.7]], ["C", [55.2, 63.15, 55.25, 63.8]], ["C", [55.3, 64.4, 55.1, 64.9]], ["C", [54.8, 66, 54.1, 66.4]], ["C", [53.5, 66.8, 52.6, 66.8]], ["C", [51.7, 66.8, 50.8, 66.8]], ["L", [9.4, 66.8]], ["C", [8.4, 66.8, 7.45, 66.8]], ["C", [6.5, 66.8, 5.9, 66.4]], ["C", [4.8, 65.65, 4.85, 63.85]], ["C", [4.9, 62, 4.9, 60.3]], ["C", [4.9, 59.35, 4.95, 58.55]], ["C", [5, 57.7, 5.4, 57.15]]];
__motifs["{"] = [["M", [-0.4, 66.6]], ["C", [0.2, 65.55, 1.75, 65.15]], ["C", [3.3, 64.7, 4.3, 64]], ["C", [5.4, 63.25, 6.3, 62.25]], ["C", [7.2, 61.15, 7.7, 60]], ["C", [8.3, 58.4, 8.3, 56.2]], ["C", [8.3, 54, 8.3, 51.8]], ["L", [8.3, 41.8]], ["C", [8.3, 38.45, 8.55, 35.8]], ["C", [8.8, 33.1, 10.1, 31.1]], ["C", [12.6, 26.9, 17, 25.2]], ["C", [17.55, 25, 18.1, 24.85]], ["C", [18.7, 24.7, 19.3, 24.5]], ["C", [19.65, 24.5, 20.15, 24.55]], ["C", [20.7, 24.6, 20.9, 24.4]], ["L", [29, 24.4]], ["C", [30.15, 24.4, 31.1, 24.5]], ["C", [32.15, 24.6, 32.6, 25.2]], ["C", [33.2, 25.95, 33.15, 27.65]], ["C", [33.1, 29.3, 33.1, 30.7]], ["C", [33.1, 31.8, 33.1, 32.75]], ["C", [33.1, 33.7, 32.7, 34.35]], ["C", [32.3, 35, 31.65, 35.15]], ["C", [31, 35.3, 30.2, 35.35]], ["C", [29.4, 35.4, 28.55, 35.4]], ["C", [27.75, 35.4, 26.9, 35.6]], ["C", [23.75, 36.35, 22.7, 39.7]], ["C", [22.3, 40.9, 22.35, 42.4]], ["C", [22.4, 44, 22.4, 45.5]], ["L", [22.4, 52.7]], ["C", [22.4, 53.5, 22.45, 54.45]], ["C", [22.5, 55.4, 22.3, 56.2]], ["L", [22.3, 58.7]], ["C", [22.1, 59.45, 22.1, 60.35]], ["C", [22.1, 61.15, 21.9, 62]], ["C", [21.45, 63.35, 20.65, 64.85]], ["C", [19.9, 66.3, 18.8, 67.1]], ["C", [18.2, 67.55, 17.55, 68]], ["C", [16.8, 68.4, 16.1, 68.9]], ["C", [15.9, 69.1, 15.85, 69.25]], ["C", [15.8, 69.4, 15.65, 69.55]], ["C", [15.65, 69.75, 15.6, 70.05]], ["C", [15.55, 70.3, 15.7, 70.5]], ["C", [16, 71, 17.05, 71.6]], ["C", [18.1, 72.3, 18.6, 72.8]], ["C", [20, 73.75, 20.8, 75.3]], ["C", [21.65, 76.8, 22.1, 78.7]], ["C", [22.3, 79.4, 22.3, 80.1]], ["C", [22.3, 80.9, 22.3, 81.7]], ["L", [22.3, 83.1]], ["C", [22.5, 83.9, 22.45, 84.95]], ["C", [22.4, 86, 22.4, 86.8]], ["L", [22.4, 94.45]], ["C", [22.4, 96.75, 22.55, 98.65]], ["C", [22.7, 100.6, 23.55, 102]], ["C", [24.3, 103.05, 25.25, 103.55]], ["C", [26.2, 104, 27.75, 104.3]], ["L", [28.3, 104.3]], ["C", [28.6, 104.4, 29, 104.35]], ["C", [29.4, 104.3, 29.85, 104.4]], ["L", [30.7, 104.4]], ["C", [32.3, 104.7, 32.7, 105.4]], ["C", [33.1, 106, 33.1, 106.9]], ["C", [33.1, 107.9, 33.1, 108.9]], ["C", [33.1, 110.9, 33.1, 112.8]], ["C", [33.1, 114.7, 31.6, 115.2]], ["C", [31.1, 115.35, 30.35, 115.35]], ["C", [29.6, 115.35, 28.8, 115.35]], ["L", [23.95, 115.35]], ["C", [22.7, 115.35, 21.45, 115.4]], ["C", [20.1, 115.45, 19, 115.2]], ["C", [15.2, 114.3, 12.85, 112.15]], ["C", [10.5, 110, 9.1, 106.7]], ["C", [8.9, 106, 8.8, 105.25]], ["C", [8.7, 104.6, 8.5, 103.8]], ["C", [8.5, 103.5, 8.45, 103.2]], ["C", [8.4, 102.95, 8.4, 102.7]], ["C", [8.2, 101.7, 8.25, 100.35]], ["C", [8.3, 98.95, 8.3, 97.9]], ["L", [8.3, 86.7]], ["C", [8.3, 85.9, 8.4, 84.95]], ["C", [8.5, 83.95, 8.3, 83.2]], ["C", [8.1, 82.7, 8.2, 82.15]], ["C", [8.3, 81.7, 8.1, 81.2]], ["C", [7.6, 79.2, 6.6, 77.85]], ["C", [5.6, 76.6, 4, 75.6]], ["C", [3.2, 75.2, 2.45, 74.95]], ["C", [1.7, 74.7, 1.1, 74.45]], ["C", [0.5, 74.2, 0, 73.65]], ["C", [-0.5, 73.2, -0.7, 72.1]], ["L", [-0.7, 70.1]], ["C", [-0.7, 69.2, -0.7, 68.25]], ["C", [-0.7, 67.3, -0.4, 66.6]]];
__motifs["}"] = [["M", [14.2, 24.7]], ["C", [18, 25.6, 20.35, 27.7]], ["C", [22.7, 29.85, 24.1, 33.2]], ["C", [24.3, 33.9, 24.4, 34.6]], ["C", [24.5, 35.3, 24.7, 36.05]], ["C", [24.7, 36.35, 24.75, 36.65]], ["C", [24.8, 36.9, 24.8, 37.2]], ["C", [25, 38.15, 24.95, 39.55]], ["C", [24.9, 40.9, 24.9, 42]], ["L", [24.9, 53.15]], ["C", [24.9, 54, 24.8, 54.9]], ["C", [24.7, 55.9, 24.9, 56.7]], ["C", [25.1, 57.15, 25, 57.7]], ["C", [24.9, 58.2, 25.1, 58.7]], ["C", [25.6, 60.7, 26.6, 62]], ["C", [27.6, 63.25, 29.2, 64.3]], ["C", [30, 64.8, 30.75, 65]], ["C", [31.5, 65.2, 32.1, 65.4]], ["C", [32.7, 65.65, 33.2, 66.25]], ["C", [33.7, 66.8, 33.9, 67.8]], ["L", [33.9, 69.75]], ["C", [33.9, 70.7, 33.9, 71.6]], ["C", [33.9, 72.6, 33.6, 73.3]], ["C", [33, 74.3, 31.45, 74.75]], ["C", [29.9, 75.2, 28.9, 75.85]], ["C", [27.8, 76.6, 26.9, 77.65]], ["C", [26.05, 78.7, 25.5, 79.85]], ["C", [24.9, 81.5, 24.9, 83.7]], ["C", [24.9, 85.9, 24.9, 88.1]], ["L", [24.9, 98.1]], ["C", [24.9, 101.4, 24.65, 104.1]], ["C", [24.4, 106.8, 23.1, 108.8]], ["C", [20.6, 113, 16.2, 114.7]], ["C", [15.65, 114.9, 15.1, 115.1]], ["C", [14.5, 115.2, 13.9, 115.4]], ["C", [13.55, 115.4, 13.05, 115.35]], ["C", [12.5, 115.3, 12.3, 115.5]], ["L", [4.2, 115.5]], ["C", [3.1, 115.5, 2.1, 115.4]], ["C", [1.05, 115.3, 0.6, 114.7]], ["C", [0, 113.9, 0.05, 112.25]], ["C", [0.1, 110.6, 0.1, 109.15]], ["C", [0.1, 108.1, 0.1, 107.1]], ["C", [0.1, 106.2, 0.5, 105.5]], ["C", [0.9, 104.85, 1.55, 104.75]], ["C", [2.2, 104.6, 3, 104.55]], ["C", [3.8, 104.5, 4.65, 104.5]], ["C", [5.45, 104.5, 6.3, 104.3]], ["C", [9.45, 103.5, 10.5, 100.2]], ["C", [10.9, 98.95, 10.85, 97.45]], ["C", [10.8, 95.9, 10.8, 94.4]], ["L", [10.8, 87.2]], ["C", [10.8, 86.35, 10.75, 85.45]], ["C", [10.7, 84.5, 10.9, 83.7]], ["L", [10.9, 81.2]], ["C", [11.1, 80.4, 11.1, 79.55]], ["C", [11.1, 78.7, 11.3, 77.85]], ["C", [11.75, 76.5, 12.55, 75.05]], ["C", [13.3, 73.55, 14.4, 72.8]], ["C", [15, 72.3, 15.65, 71.85]], ["C", [16.4, 71.45, 17.1, 71]], ["C", [17.3, 70.8, 17.35, 70.65]], ["C", [17.4, 70.5, 17.6, 70.3]], ["C", [17.6, 70.1, 17.65, 69.8]], ["C", [17.7, 69.55, 17.5, 69.4]], ["C", [17.2, 68.9, 16.15, 68.25]], ["C", [15.1, 67.55, 14.6, 67.1]], ["C", [13.2, 66.1, 12.4, 64.6]], ["C", [11.55, 63.1, 11.1, 61.15]], ["C", [10.9, 60.5, 10.9, 59.75]], ["C", [10.9, 58.95, 10.9, 58.2]], ["L", [10.9, 56.8]], ["C", [10.7, 56, 10.75, 54.9]], ["C", [10.8, 53.9, 10.8, 53.05]], ["L", [10.8, 45.4]], ["C", [10.8, 43.1, 10.65, 41.2]], ["C", [10.5, 39.3, 9.65, 37.9]], ["C", [8.9, 36.8, 7.95, 36.3]], ["C", [7, 35.9, 5.45, 35.6]], ["L", [4.9, 35.6]], ["C", [4.6, 35.5, 4.2, 35.55]], ["C", [3.8, 35.6, 3.35, 35.5]], ["L", [2.5, 35.5]], ["C", [0.9, 35.2, 0.5, 34.5]], ["C", [0.1, 33.9, 0.1, 32.95]], ["C", [0.1, 31.95, 0.1, 31]], ["C", [0.1, 29, 0.1, 27.1]], ["C", [0.1, 25.2, 1.6, 24.7]], ["C", [2.1, 24.5, 2.85, 24.5]], ["C", [3.6, 24.5, 4.4, 24.5]], ["L", [9.3, 24.5]], ["C", [10.5, 24.5, 11.8, 24.45]], ["C", [13.1, 24.4, 14.2, 24.7]]];
__motifs["|"] = [["M", [16.45, 23.1]], ["C", [16.4, 25, 16.4, 26.8]], ["L", [16.4, 112.9]], ["C", [16.4, 113.4, 16.45, 114]], ["C", [16.5, 114.6, 16.4, 115.1]], ["C", [16.3, 115.4, 16.35, 115.7]], ["C", [16.4, 116, 16.3, 116.5]], ["C", [16.1, 117.6, 15.55, 118.2]], ["C", [15.2, 118.5, 14.5, 118.6]], ["C", [13.8, 118.7, 13, 118.7]], ["C", [12.2, 118.7, 11.45, 118.65]], ["C", [10.6, 118.6, 10, 118.6]], ["C", [9.25, 118.6, 8.25, 118.65]], ["C", [7.3, 118.7, 6.8, 118.2]], ["C", [6.2, 117.4, 5.9, 116]], ["L", [5.9, 27.7]], ["C", [5.9, 25.6, 5.85, 23.4]], ["C", [5.8, 21.2, 6.4, 19.9]], ["C", [6.7, 19.4, 7.45, 19.2]], ["C", [8.2, 19, 9.15, 19]], ["C", [10, 19, 10.9, 19.05]], ["C", [11.8, 19.1, 12.4, 19.1]], ["L", [14.5, 19.1]], ["C", [15.45, 19.4, 16, 20]], ["C", [16.5, 21.2, 16.45, 23.1]]];
__motifs["["] = [["M", [27.25, 24.45]], ["C", [28.2, 24.4, 29.15, 24.4]], ["C", [30.1, 24.4, 30.9, 24.5]], ["C", [31.7, 24.6, 32.1, 24.9]], ["C", [33.2, 25.7, 33.15, 27.65]], ["C", [33.1, 29.6, 33.1, 31.3]], ["C", [33.1, 32, 33.1, 32.75]], ["C", [33.1, 33.5, 32.9, 34]], ["C", [32.4, 35.3, 30.7, 35.45]], ["C", [29, 35.6, 27.05, 35.5]], ["C", [25.1, 35.4, 23.35, 35.6]], ["C", [21.6, 35.8, 21.1, 37.1]], ["C", [20.9, 37.8, 20.9, 38.75]], ["C", [20.9, 39.7, 20.9, 40.5]], ["L", [20.9, 99.9]], ["C", [20.9, 100.9, 20.95, 101.9]], ["C", [21, 102.9, 21.4, 103.5]], ["C", [22.2, 104.6, 24.2, 104.55]], ["C", [26.2, 104.5, 28, 104.5]], ["C", [28.4, 104.5, 28.85, 104.45]], ["C", [29.3, 104.4, 29.6, 104.5]], ["L", [30.7, 104.5]], ["C", [31.4, 104.7, 31.9, 104.9]], ["C", [32.4, 105.1, 32.7, 105.6]], ["C", [33.1, 106.2, 33.1, 107.15]], ["C", [33.1, 108.1, 33.1, 109]], ["C", [33.1, 111.1, 33.05, 113]], ["C", [33, 114.9, 31.4, 115.4]], ["C", [30.9, 115.6, 30.35, 115.55]], ["C", [29.8, 115.5, 29.2, 115.5]], ["L", [13.4, 115.5]], ["C", [11.9, 115.5, 10, 115.55]], ["C", [8.1, 115.6, 7.45, 114.7]], ["C", [6.9, 113.9, 6.9, 112.6]], ["C", [6.9, 111.3, 6.9, 109.9]], ["L", [6.9, 28.7]], ["C", [6.9, 27.8, 6.9, 26.95]], ["C", [6.9, 26.1, 7.3, 25.5]], ["C", [7.65, 25, 8.6, 24.6]], ["C", [9.3, 24.6, 9.45, 24.5]], ["L", [25.6, 24.5]], ["C", [26.3, 24.5, 27.25, 24.45]]];
__motifs["]"] = [["M", [2.95, 24.45]], ["C", [3.5, 24.5, 4.1, 24.5]], ["L", [19.9, 24.5]], ["C", [21.45, 24.5, 23.3, 24.45]], ["C", [25.2, 24.4, 25.85, 25.3]], ["C", [26.4, 26.1, 26.4, 27.4]], ["C", [26.4, 28.7, 26.4, 30.1]], ["L", [26.4, 111.3]], ["C", [26.4, 112.2, 26.4, 113.05]], ["C", [26.4, 113.9, 26.05, 114.5]], ["C", [25.65, 115, 24.7, 115.4]], ["C", [24, 115.4, 23.85, 115.5]], ["L", [7.7, 115.5]], ["C", [7, 115.5, 6.05, 115.55]], ["C", [5.15, 115.6, 4.15, 115.6]], ["C", [3.2, 115.6, 2.4, 115.5]], ["C", [1.6, 115.4, 1.2, 115.1]], ["C", [0.1, 114.3, 0.15, 112.35]], ["C", [0.2, 110.4, 0.2, 108.7]], ["C", [0.2, 108, 0.2, 107.25]], ["C", [0.2, 106.5, 0.4, 106]], ["C", [0.9, 104.7, 2.6, 104.55]], ["C", [4.3, 104.4, 6.25, 104.5]], ["C", [8.2, 104.6, 9.95, 104.45]], ["C", [11.7, 104.3, 12.2, 102.9]], ["C", [12.4, 102.2, 12.4, 101.25]], ["C", [12.4, 100.3, 12.4, 99.5]], ["L", [12.4, 40.1]], ["C", [12.4, 39.1, 12.35, 38.1]], ["C", [12.3, 37.1, 11.9, 36.5]], ["C", [11.1, 35.4, 9.1, 35.45]], ["C", [7.1, 35.5, 5.3, 35.5]], ["C", [4.9, 35.5, 4.45, 35.55]], ["C", [4, 35.6, 3.7, 35.5]], ["L", [2.6, 35.5]], ["C", [1.9, 35.3, 1.4, 35.1]], ["C", [0.9, 34.9, 0.6, 34.4]], ["C", [0.2, 33.8, 0.2, 32.85]], ["C", [0.2, 31.9, 0.2, 31]], ["C", [0.2, 30, 0.15, 28.95]], ["C", [0.1, 27.9, 0.2, 27]], ["C", [0.3, 26.1, 0.7, 25.5]], ["C", [1.1, 24.9, 1.9, 24.6]], ["C", [2.4, 24.4, 2.95, 24.45]]];
__motifs["\\"] = [["M", [8.55, 24.7]], ["C", [9.5, 24.9, 10.1, 25.3]], ["C", [10.9, 25.8, 11.3, 27.25]], ["C", [11.7, 28.7, 12.2, 29.8]], ["C", [13, 31.8, 13.8, 34]], ["C", [14.6, 36.2, 15.4, 38.2]], ["C", [15.6, 38.7, 15.75, 39.2]], ["C", [15.9, 39.7, 16.1, 40.2]], ["C", [16.8, 41.9, 17.35, 43.6]], ["C", [17.9, 45.3, 18.6, 47]], ["C", [19.2, 48.4, 19.65, 49.75]], ["C", [20.1, 51.1, 20.7, 52.5]], ["C", [22.6, 57.1, 24.2, 61.75]], ["C", [25.8, 66.4, 27.7, 71]], ["C", [27.9, 71.6, 28.1, 72.25]], ["C", [28.3, 72.9, 28.5, 73.5]], ["C", [29.1, 75, 29.65, 76.5]], ["C", [30.2, 78, 30.8, 79.5]], ["C", [31.1, 80.3, 31.35, 81.05]], ["C", [31.6, 81.8, 31.9, 82.6]], ["C", [33, 85.4, 34.05, 88.25]], ["C", [35.1, 91.1, 36.2, 93.9]], ["C", [36.4, 94.4, 36.65, 95.1]], ["C", [36.9, 95.8, 37.05, 96.55]], ["C", [37.2, 97.3, 37.05, 97.9]], ["C", [36.9, 98.5, 36.2, 98.8]], ["C", [35.5, 99.1, 34.55, 99.1]], ["C", [33.6, 99.1, 32.7, 99.1]], ["C", [31.3, 99.1, 29.8, 99.1]], ["C", [28.3, 99.1, 27.4, 98.6]], ["C", [26.6, 98.1, 26.25, 97.25]], ["C", [25.9, 96.4, 25.5, 95.4]], ["C", [24.8, 93.7, 24.25, 91.9]], ["C", [23.7, 90.1, 22.9, 88.3]], ["C", [22, 86.2, 21.25, 83.95]], ["C", [20.5, 81.7, 19.6, 79.6]], ["C", [19.4, 79.1, 19.25, 78.6]], ["C", [19.1, 78.1, 18.9, 77.6]], ["C", [18.2, 76, 17.65, 74.3]], ["C", [17.1, 72.6, 16.4, 71]], ["C", [16.2, 70.5, 16.1, 70.15]], ["C", [16, 69.8, 15.8, 69.4]], ["C", [15.1, 67.7, 14.55, 65.85]], ["C", [14, 64, 13.2, 62.3]], ["C", [11.2, 57.5, 9.55, 52.55]], ["C", [7.9, 47.6, 5.9, 42.8]], ["C", [5.7, 42.3, 5.55, 41.75]], ["C", [5.4, 41.2, 5.2, 40.7]], ["C", [4.4, 38.8, 3.7, 36.8]], ["C", [3, 34.8, 2.2, 32.9]], ["C", [2, 32.3, 1.8, 31.65]], ["C", [1.6, 31, 1.3, 30.4]], ["C", [1, 29.6, 0.75, 28.85]], ["C", [0.5, 28.1, 0.2, 27.3]], ["C", [0.1, 27.1, 0, 26.6]], ["C", [-0.1, 26.1, 0.1, 25.7]], ["C", [0.4, 24.8, 1.3, 24.7]], ["C", [1.5, 24.6, 1.7, 24.65]], ["C", [1.9, 24.7, 2.1, 24.5]], ["C", [3.1, 24.5, 4.25, 24.45]], ["C", [5.4, 24.4, 6.5, 24.45]], ["C", [7.6, 24.5, 8.55, 24.7]]];
__motifs[":"] = [["M", [19.05, 82.2]], ["C", [20.05, 82.2, 20.8, 82.7]], ["C", [21.4, 83.2, 21.5, 84.1]], ["C", [21.6, 85, 21.6, 86.1]], ["L", [21.6, 93.3]], ["C", [21.6, 94.4, 21.5, 95.35]], ["C", [21.4, 96.35, 20.9, 96.7]], ["C", [20.15, 97.2, 19.2, 97.3]], ["C", [18.15, 97.4, 17.1, 97.4]], ["L", [10.4, 97.4]], ["C", [9.3, 97.4, 8.3, 97.3]], ["C", [7.3, 97.2, 6.8, 96.6]], ["C", [6.3, 96, 6.2, 95.05]], ["C", [6.1, 94.1, 6.1, 93]], ["L", [6.1, 86.7]], ["C", [6.1, 85.85, 6.1, 84.8]], ["C", [6.1, 83.85, 6.5, 83.35]], ["C", [6.9, 82.6, 8, 82.2]], ["C", [8.2, 82.2, 8.45, 82.25]], ["C", [8.7, 82.3, 8.9, 82.2]], ["L", [16.8, 82.2]], ["C", [17.95, 82.2, 19.05, 82.2]], ["M", [21.5, 48.8]], ["C", [21.6, 49.7, 21.6, 50.8]], ["L", [21.6, 58]], ["C", [21.6, 59.1, 21.5, 60.05]], ["C", [21.4, 61.05, 20.9, 61.4]], ["C", [20.15, 61.9, 19.2, 62]], ["C", [18.15, 62.1, 17.1, 62.1]], ["L", [10.4, 62.1]], ["C", [9.3, 62.1, 8.3, 62]], ["C", [7.3, 61.9, 6.8, 61.3]], ["C", [6.3, 60.7, 6.2, 59.75]], ["C", [6.1, 58.8, 6.1, 57.7]], ["L", [6.1, 51.4]], ["C", [6.1, 50.55, 6.1, 49.5]], ["C", [6.1, 48.55, 6.5, 48.05]], ["C", [6.9, 47.3, 8, 46.9]], ["C", [8.2, 46.9, 8.45, 46.95]], ["C", [8.7, 47, 8.9, 46.9]], ["L", [16.8, 46.9]], ["C", [17.95, 46.9, 19.05, 46.9]], ["C", [20.05, 46.9, 20.8, 47.4]], ["C", [21.4, 47.9, 21.5, 48.8]]];
__motifs["\""] = [["M", [37.6, 32.5]], ["L", [37.6, 53.4]], ["C", [37.6, 54.4, 37.6, 55.4]], ["C", [37.6, 56.4, 37.2, 57]], ["C", [36.8, 57.8, 35.7, 58]], ["C", [35.2, 58.2, 34.6, 58.15]], ["C", [34, 58.1, 33.4, 58.1]], ["C", [32, 58.1, 30.15, 58.15]], ["C", [28.25, 58.2, 27.7, 57.3]], ["C", [27.2, 56.8, 27.15, 55.95]], ["C", [27.1, 55.1, 27.1, 54.1]], ["L", [27.1, 33.6]], ["C", [27.1, 32.2, 27.05, 30.15]], ["C", [27, 28.1, 27.5, 27.2]], ["C", [27.9, 26.7, 28.8, 26.3]], ["C", [29, 26.3, 29.3, 26.25]], ["C", [29.6, 26.2, 29.8, 26.2]], ["C", [30.6, 26.2, 31.7, 26.15]], ["C", [32.8, 26.1, 33.85, 26.15]], ["C", [34.9, 26.2, 35.75, 26.35]], ["C", [36.6, 26.5, 37, 26.9]], ["C", [37.7, 27.7, 37.65, 29.35]], ["C", [37.6, 31, 37.6, 32.5]], ["M", [18.5, 27]], ["C", [19.1, 27.9, 19.05, 29.55]], ["C", [19, 31.2, 19, 32.6]], ["L", [19, 53.4]], ["C", [19, 54.5, 19, 55.5]], ["C", [19, 56.5, 18.6, 57.1]], ["C", [18.2, 57.8, 17.1, 58]], ["C", [16.6, 58.2, 16, 58.15]], ["C", [15.4, 58.1, 14.8, 58.1]], ["C", [13.3, 58.1, 11.45, 58.15]], ["C", [9.65, 58.2, 9.1, 57.3]], ["C", [8.6, 56.8, 8.55, 55.95]], ["C", [8.5, 55.1, 8.5, 54.1]], ["L", [8.5, 33.6]], ["C", [8.5, 32.2, 8.45, 30.15]], ["C", [8.4, 28.1, 8.9, 27.2]], ["C", [9.3, 26.7, 10.2, 26.3]], ["C", [10.4, 26.3, 10.65, 26.25]], ["C", [10.9, 26.2, 11.2, 26.2]], ["C", [12, 26.2, 13.15, 26.15]], ["C", [14.3, 26.1, 15.35, 26.15]], ["C", [16.4, 26.2, 17.3, 26.4]], ["C", [18.2, 26.6, 18.5, 27]]];
__motifs[";"] = [["M", [19.55, 82.3]], ["C", [20.6, 82.4, 21.1, 83.2]], ["C", [21.6, 83.85, 21.6, 84.7]], ["C", [21.6, 85.65, 21.6, 86.6]], ["L", [21.6, 93.3]], ["C", [21.6, 95, 21.65, 97.1]], ["C", [21.7, 99.2, 21.3, 100.65]], ["C", [20.35, 104.35, 18.7, 106.8]], ["C", [17, 109.2, 14.1, 110.95]], ["C", [12.2, 112.2, 10, 112.95]], ["C", [9.6, 113.15, 9, 113.3]], ["C", [8.4, 113.5, 7.9, 113.4]], ["C", [7.1, 113.2, 6.7, 112.85]], ["C", [6.2, 112.2, 6.15, 110.6]], ["C", [6.1, 108.95, 6.5, 108]], ["C", [6.9, 107, 7.75, 106.55]], ["C", [8.6, 106, 9.4, 105.4]], ["C", [11, 104.35, 12.2, 102.05]], ["C", [12.4, 101.6, 12.75, 100.8]], ["C", [13.1, 100.05, 12.9, 99.3]], ["C", [12.6, 97.95, 11.2, 97.6]], ["C", [10.1, 97.3, 8.95, 97.4]], ["C", [7.8, 97.5, 7, 97]], ["C", [6.4, 96.5, 6.25, 95.5]], ["C", [6.1, 94.5, 6.1, 93.4]], ["L", [6.1, 86.8]], ["C", [6.1, 85.95, 6.1, 84.95]], ["C", [6.1, 84, 6.5, 83.45]], ["C", [7, 82.6, 8.1, 82.3]], ["C", [8.3, 82.3, 8.6, 82.35]], ["C", [8.9, 82.4, 9.1, 82.2]], ["L", [17.3, 82.2]], ["C", [18.5, 82.2, 19.55, 82.3]], ["M", [21.5, 48.8]], ["C", [21.6, 49.7, 21.6, 50.8]], ["L", [21.6, 58]], ["C", [21.6, 59.1, 21.5, 60.05]], ["C", [21.4, 61.05, 20.9, 61.4]], ["C", [20.15, 61.9, 19.2, 62]], ["C", [18.15, 62.1, 17.1, 62.1]], ["L", [10.4, 62.1]], ["C", [9.3, 62.1, 8.3, 62]], ["C", [7.3, 61.9, 6.8, 61.3]], ["C", [6.3, 60.7, 6.2, 59.75]], ["C", [6.1, 58.8, 6.1, 57.7]], ["L", [6.1, 51.4]], ["C", [6.1, 50.55, 6.1, 49.5]], ["C", [6.1, 48.55, 6.5, 48.05]], ["C", [6.9, 47.3, 8, 46.9]], ["C", [8.2, 46.9, 8.45, 46.95]], ["C", [8.7, 47, 8.9, 46.9]], ["L", [16.8, 46.9]], ["C", [17.95, 46.9, 19.05, 46.9]], ["C", [20.05, 46.9, 20.8, 47.4]], ["C", [21.4, 47.9, 21.5, 48.8]]];
__motifs["'"] = [["M", [18.7, 27]], ["C", [19.3, 27.9, 19.25, 29.55]], ["C", [19.2, 31.2, 19.2, 32.6]], ["L", [19.2, 53.4]], ["C", [19.2, 54.5, 19.2, 55.5]], ["C", [19.2, 56.5, 18.8, 57.1]], ["C", [18.4, 57.8, 17.3, 58]], ["C", [16.8, 58.2, 16.2, 58.15]], ["C", [15.6, 58.1, 15, 58.1]], ["C", [13.5, 58.1, 11.65, 58.15]], ["C", [9.9, 58.2, 9.3, 57.3]], ["C", [8.8, 56.8, 8.75, 55.95]], ["C", [8.7, 55.1, 8.7, 54.1]], ["L", [8.7, 33.6]], ["C", [8.7, 32.2, 8.65, 30.15]], ["C", [8.6, 28.1, 9.1, 27.2]], ["C", [9.45, 26.7, 10.4, 26.3]], ["C", [10.6, 26.3, 10.85, 26.25]], ["C", [11.1, 26.2, 11.4, 26.2]], ["C", [12.2, 26.2, 13.35, 26.15]], ["C", [14.5, 26.1, 15.55, 26.15]], ["C", [16.6, 26.2, 17.5, 26.4]], ["C", [18.4, 26.6, 18.7, 27]]];
__motifs["<"] = [["M", [55.3, 49.15]], ["C", [55.3, 49.9, 55.3, 50.7]], ["C", [55.3, 52.4, 55.4, 54.35]], ["C", [55.5, 56.3, 54.7, 57.3]], ["C", [54.3, 57.8, 53.65, 58.15]], ["C", [53, 58.5, 52.2, 58.8]], ["C", [51.1, 59.3, 49.95, 59.7]], ["C", [48.8, 60.1, 47.7, 60.6]], ["C", [43.2, 62.5, 38.65, 64.2]], ["C", [34.1, 65.9, 29.6, 67.8]], ["C", [27.9, 68.6, 26.1, 69.2]], ["C", [24.3, 69.8, 22.7, 70.6]], ["C", [22.3, 70.8, 21.6, 71.2]], ["C", [20.9, 71.6, 21.1, 72.4]], ["C", [21.3, 73.2, 22.05, 73.5]], ["C", [22.8, 73.8, 23.5, 74.1]], ["C", [24.9, 74.8, 26.45, 75.35]], ["C", [28, 75.9, 29.5, 76.5]], ["C", [33.7, 78.3, 37.85, 79.9]], ["C", [42, 81.5, 46.2, 83.2]], ["C", [47.6, 83.8, 48.85, 84.3]], ["C", [50.1, 84.8, 51.4, 85.3]], ["C", [52.2, 85.6, 52.9, 85.85]], ["C", [53.6, 86.1, 54.1, 86.6]], ["C", [55.3, 87.4, 55.3, 89.3]], ["C", [55.3, 91.2, 55.3, 93.2]], ["C", [55.3, 94, 55.35, 94.8]], ["C", [55.4, 95.6, 55.2, 96.2]], ["C", [55, 96.7, 54.75, 96.8]], ["C", [54.5, 96.9, 54, 97.2]], ["C", [52.7, 97.3, 51.7, 96.8]], ["C", [50.7, 96.3, 49.7, 95.9]], ["C", [47.9, 95.1, 46.1, 94.45]], ["C", [44.3, 93.8, 42.5, 93]], ["C", [41.1, 92.5, 39.75, 92]], ["C", [38.4, 91.5, 37, 90.9]], ["C", [32, 88.9, 27, 86.95]], ["C", [22, 85, 17, 82.9]], ["C", [15, 82.1, 13, 81.3]], ["C", [11, 80.5, 9, 79.7]], ["C", [8.1, 79.3, 7.05, 79]], ["C", [6, 78.7, 5.4, 77.9]], ["C", [4.6, 76.8, 4.65, 74.45]], ["C", [4.7, 72.1, 4.7, 70.2]], ["C", [4.7, 69.2, 4.75, 68.3]], ["C", [4.8, 67.4, 5.2, 66.9]], ["C", [5.7, 66.1, 6.65, 65.7]], ["C", [7.6, 65.3, 8.5, 64.9]], ["C", [10.2, 64.1, 12, 63.5]], ["C", [13.8, 62.9, 15.5, 62.1]], ["C", [22.4, 59.2, 29.4, 56.55]], ["C", [36.4, 53.9, 43.3, 51]], ["C", [45.4, 50.2, 47.55, 49.4]], ["C", [49.7, 48.6, 51.7, 47.7]], ["C", [52.5, 47.4, 53.5, 47.25]], ["C", [54.5, 47.1, 55, 47.9]], ["C", [55.3, 48.4, 55.3, 49.15]]];
__motifs[">"] = [["M", [10.3, 48.5]], ["C", [12.1, 49.3, 13.9, 49.95]], ["C", [15.7, 50.6, 17.5, 51.4]], ["C", [18.9, 51.9, 20.25, 52.4]], ["C", [21.6, 52.9, 23, 53.5]], ["C", [28, 55.5, 33, 57.45]], ["C", [38, 59.4, 43, 61.5]], ["C", [45, 62.3, 47, 63.1]], ["C", [49, 63.9, 51, 64.7]], ["C", [51.9, 65.1, 52.95, 65.4]], ["C", [54, 65.7, 54.6, 66.5]], ["C", [55.4, 67.6, 55.35, 69.95]], ["C", [55.3, 72.3, 55.3, 74.2]], ["C", [55.3, 75.2, 55.25, 76.1]], ["C", [55.2, 77, 54.8, 77.5]], ["C", [54.3, 78.3, 53.35, 78.7]], ["C", [52.4, 79.1, 51.5, 79.5]], ["C", [49.8, 80.3, 48, 80.9]], ["C", [46.2, 81.5, 44.5, 82.3]], ["C", [37.6, 85.2, 30.6, 87.85]], ["C", [23.6, 90.5, 16.7, 93.4]], ["C", [14.6, 94.2, 12.45, 95]], ["C", [10.3, 95.8, 8.3, 96.7]], ["C", [7.5, 97, 6.5, 97.15]], ["C", [5.5, 97.3, 5, 96.5]], ["C", [4.7, 96, 4.7, 95.25]], ["C", [4.7, 94.5, 4.7, 93.7]], ["C", [4.7, 92, 4.6, 90.05]], ["C", [4.5, 88.1, 5.3, 87.1]], ["C", [5.7, 86.6, 6.35, 86.25]], ["C", [7, 85.9, 7.8, 85.6]], ["C", [8.9, 85.1, 10.05, 84.7]], ["C", [11.2, 84.3, 12.3, 83.8]], ["C", [16.8, 81.9, 21.35, 80.2]], ["C", [25.9, 78.5, 30.4, 76.6]], ["C", [32.1, 75.8, 33.9, 75.2]], ["C", [35.7, 74.6, 37.3, 73.8]], ["C", [37.7, 73.6, 38.4, 73.2]], ["C", [39.1, 72.8, 38.9, 72]], ["C", [38.7, 71.2, 37.95, 70.9]], ["C", [37.2, 70.6, 36.5, 70.3]], ["C", [35.1, 69.6, 33.55, 69.05]], ["C", [32, 68.5, 30.5, 67.9]], ["C", [26.3, 66.1, 22.15, 64.5]], ["C", [18, 62.9, 13.8, 61.2]], ["C", [12.4, 60.6, 11.15, 60.1]], ["C", [9.9, 59.6, 8.6, 59.1]], ["C", [7.8, 58.8, 7.1, 58.55]], ["C", [6.4, 58.3, 5.9, 57.8]], ["C", [4.7, 57, 4.7, 55.1]], ["C", [4.7, 53.2, 4.7, 51.2]], ["C", [4.7, 50.4, 4.65, 49.6]], ["C", [4.6, 48.8, 4.8, 48.2]], ["C", [5, 47.7, 5.25, 47.6]], ["C", [5.5, 47.5, 6, 47.2]], ["C", [7.3, 47.1, 8.3, 47.6]], ["C", [9.3, 48.1, 10.3, 48.5]]];
__motifs["?"] = [["M", [19.9, 83.1]], ["C", [20.4, 82.5, 21.35, 82.3]], ["C", [21.55, 82.2, 21.75, 82.25]], ["C", [21.9, 82.3, 22.1, 82.2]], ["L", [30.15, 82.2]], ["C", [31.2, 82.2, 32.3, 82.2]], ["C", [33.4, 82.2, 34.05, 82.7]], ["C", [34.5, 83, 34.6, 83.55]], ["C", [34.7, 84, 34.9, 84.6]], ["L", [34.9, 85.4]], ["C", [35, 85.95, 34.95, 86.4]], ["C", [34.9, 86.9, 34.9, 87.4]], ["L", [34.9, 91.3]], ["C", [34.9, 92.05, 35, 92.7]], ["C", [35.1, 93.4, 34.9, 94]], ["L", [34.9, 95]], ["C", [34.7, 95.6, 34.6, 96.1]], ["C", [34.5, 96.6, 34.05, 96.9]], ["C", [33.4, 97.3, 32.5, 97.35]], ["C", [31.65, 97.4, 30.5, 97.4]], ["L", [23.55, 97.4]], ["C", [22.4, 97.4, 21.45, 97.3]], ["C", [20.4, 97.2, 19.9, 96.5]], ["C", [19.55, 95.9, 19.5, 94.95]], ["C", [19.45, 94, 19.45, 93]], ["L", [19.45, 86.5]], ["C", [19.45, 85.65, 19.5, 84.65]], ["C", [19.55, 83.75, 19.9, 83.1]], ["M", [50.2, 35.7]], ["C", [50.9, 36.8, 51.25, 38.1]], ["C", [51.6, 39.4, 52, 40.8]], ["C", [52.2, 41.3, 52.15, 41.75]], ["C", [52.1, 42.2, 52.2, 42.7]], ["C", [52.4, 43.2, 52.4, 44.1]], ["C", [52.4, 45, 52.2, 45.6]], ["C", [52.1, 46.1, 52.15, 46.55]], ["C", [52.2, 47, 52.1, 47.5]], ["C", [51.8, 48.8, 51.55, 49.95]], ["C", [51.3, 51.1, 50.8, 52.2]], ["C", [50, 53.9, 48.9, 55.6]], ["C", [47.8, 57.3, 46.4, 58.4]], ["L", [45.9, 58.9]], ["C", [45.1, 59.5, 44.35, 60.15]], ["C", [43.6, 60.8, 42.8, 61.4]], ["C", [41.4, 62.4, 40.05, 63.4]], ["C", [38.7, 64.4, 37.5, 65.6]], ["C", [35.5, 67.6, 34.6, 70.4]], ["C", [34.2, 71.5, 34.2, 72.95]], ["C", [34.2, 74.4, 33.6, 75.2]], ["C", [33.2, 75.6, 32.7, 75.7]], ["C", [32.2, 75.8, 31.6, 76]], ["L", [29.1, 76]], ["C", [28.2, 76, 27, 76.05]], ["C", [25.8, 76.1, 24.65, 76.05]], ["C", [23.5, 76, 22.6, 75.8]], ["C", [21.7, 75.6, 21.3, 75.1]], ["C", [20.9, 74.6, 20.85, 73.85]], ["C", [20.8, 73.1, 20.8, 72.3]], ["L", [20.8, 71.5]], ["C", [20.9, 71, 20.95, 70.5]], ["C", [21, 70, 21, 69.5]], ["C", [21.4, 68.2, 21.65, 66.95]], ["C", [21.9, 65.7, 22.4, 64.6]], ["C", [23.2, 62.7, 24.5, 60.8]], ["C", [25.8, 58.9, 27.2, 57.8]], ["L", [28.1, 56.9]], ["C", [28.8, 56.4, 29.35, 55.95]], ["C", [29.9, 55.5, 30.5, 55]], ["C", [32.1, 53.9, 33.4, 52.6]], ["C", [34.7, 51.3, 35.7, 49.6]], ["C", [36.1, 48.9, 36.4, 47.8]], ["C", [36.7, 46.7, 36.75, 45.5]], ["C", [36.8, 44.3, 36.65, 43.1]], ["C", [36.5, 41.9, 36.1, 41]], ["C", [35.9, 40.4, 35.55, 39.8]], ["C", [35.2, 39.2, 34.8, 38.7]], ["C", [34.2, 37.9, 33.2, 37.35]], ["C", [32.2, 36.8, 31.1, 36.4]], ["C", [30.7, 36.3, 30.4, 36.3]], ["C", [30.1, 36.3, 29.6, 36.2]], ["C", [29.1, 36.1, 28.45, 36.05]], ["C", [27.8, 36, 27.3, 36.1]], ["C", [26.8, 36.3, 26.3, 36.25]], ["C", [25.8, 36.2, 25.3, 36.4]], ["C", [21, 37.9, 19.2, 41.9]], ["C", [18.9, 42.7, 18.65, 43.55]], ["C", [18.4, 44.4, 18.2, 45.3]], ["C", [17.9, 46.4, 17.75, 47.25]], ["C", [17.6, 48.1, 16.8, 48.6]], ["C", [16.2, 49, 15.3, 49]], ["C", [14.4, 49, 13.5, 49]], ["L", [7.6, 49]], ["C", [6.6, 49, 5.7, 48.95]], ["C", [4.8, 48.9, 4.3, 48.5]], ["C", [3.8, 48.1, 3.6, 47.2]], ["C", [3.4, 46.3, 3.6, 45.4]], ["C", [3.7, 44.8, 3.8, 44.25]], ["C", [3.9, 43.7, 4, 43.1]], ["C", [4.3, 42, 4.6, 40.95]], ["C", [4.9, 39.9, 5.3, 38.9]], ["C", [5.5, 38.4, 5.7, 37.9]], ["C", [5.9, 37.4, 6.2, 36.9]], ["C", [7.2, 35.2, 8.1, 33.8]], ["C", [9.5, 31.8, 11.4, 30.25]], ["C", [13.3, 28.7, 15.5, 27.3]], ["C", [16.2, 26.8, 17, 26.5]], ["C", [17.8, 26.2, 18.6, 25.9]], ["C", [19.9, 25.4, 21.25, 25.2]], ["C", [22.6, 25, 24.1, 24.7]], ["C", [24.7, 24.6, 25.35, 24.55]], ["C", [26, 24.5, 26.7, 24.5]], ["C", [32.3, 24.3, 36.65, 25.5]], ["C", [41, 26.7, 44.2, 29]], ["C", [45.1, 29.7, 46.1, 30.5]], ["C", [47.1, 31.3, 47.8, 32.2]], ["C", [48.2, 32.7, 48.65, 33.25]], ["C", [49.1, 33.8, 49.4, 34.3]], ["C", [49.6, 34.7, 49.8, 35]], ["C", [50, 35.3, 50.2, 35.7]]];
__motifs[","] = [["M", [19.55, 82.3]], ["C", [20.6, 82.4, 21.1, 83.2]], ["C", [21.6, 83.85, 21.6, 84.7]], ["C", [21.6, 85.65, 21.6, 86.6]], ["L", [21.6, 93.3]], ["C", [21.6, 95, 21.65, 97.1]], ["C", [21.7, 99.2, 21.3, 100.65]], ["C", [20.35, 104.35, 18.7, 106.8]], ["C", [17, 109.2, 14.1, 110.95]], ["C", [12.2, 112.2, 10, 112.95]], ["C", [9.6, 113.15, 9, 113.3]], ["C", [8.4, 113.5, 7.9, 113.4]], ["C", [7.1, 113.2, 6.7, 112.85]], ["C", [6.2, 112.2, 6.15, 110.6]], ["C", [6.1, 108.95, 6.5, 108]], ["C", [6.9, 107, 7.75, 106.55]], ["C", [8.6, 106, 9.4, 105.4]], ["C", [11, 104.35, 12.2, 102]], ["C", [12.4, 101.6, 12.75, 100.8]], ["C", [13.1, 100.05, 12.9, 99.3]], ["C", [12.6, 97.9, 11.2, 97.6]], ["C", [10.1, 97.3, 8.95, 97.4]], ["C", [7.8, 97.5, 7, 97]], ["C", [6.4, 96.5, 6.25, 95.5]], ["C", [6.1, 94.5, 6.1, 93.4]], ["L", [6.1, 86.8]], ["C", [6.1, 85.95, 6.1, 84.95]], ["C", [6.1, 84, 6.5, 83.45]], ["C", [7, 82.6, 8.1, 82.3]], ["C", [8.3, 82.3, 8.6, 82.35]], ["C", [8.9, 82.4, 9.1, 82.2]], ["L", [17.3, 82.2]], ["C", [18.5, 82.2, 19.55, 82.3]]];
__motifs["."] = [["M", [19.05, 82.2]], ["C", [20.05, 82.2, 20.8, 82.7]], ["C", [21.4, 83.2, 21.5, 84.1]], ["C", [21.6, 85, 21.6, 86.1]], ["L", [21.6, 93.3]], ["C", [21.6, 94.4, 21.5, 95.35]], ["C", [21.4, 96.35, 20.9, 96.7]], ["C", [20.15, 97.2, 19.2, 97.3]], ["C", [18.15, 97.4, 17.1, 97.4]], ["L", [10.4, 97.4]], ["C", [9.3, 97.4, 8.3, 97.3]], ["C", [7.3, 97.2, 6.8, 96.6]], ["C", [6.3, 96, 6.2, 95.05]], ["C", [6.1, 94.1, 6.1, 93]], ["L", [6.1, 86.7]], ["C", [6.1, 85.85, 6.1, 84.8]], ["C", [6.1, 83.85, 6.5, 83.35]], ["C", [6.9, 82.6, 8, 82.2]], ["C", [8.2, 82.2, 8.45, 82.25]], ["C", [8.7, 82.3, 8.9, 82.2]], ["L", [16.8, 82.2]], ["C", [17.95, 82.2, 19.05, 82.2]]];
__motifs["/"] = [["M", [29.3, 24.6]], ["L", [32.9, 24.6]], ["C", [33.4, 24.6, 33.95, 24.55]], ["C", [34.5, 24.5, 35, 24.6]], ["L", [35.4, 24.6]], ["C", [36, 24.8, 36.45, 25]], ["C", [36.9, 25.2, 37.1, 25.65]], ["C", [37.3, 26.05, 37.2, 26.55]], ["C", [37.1, 27, 37, 27.4]], ["C", [36.8, 28.05, 36.55, 28.75]], ["C", [36.3, 29.4, 36, 30.05]], ["C", [35.8, 30.7, 35.6, 31.25]], ["C", [35.4, 31.8, 35.2, 32.35]], ["C", [34.3, 34.7, 33.5, 36.95]], ["C", [32.7, 39.2, 31.7, 41.5]], ["C", [30.9, 43.6, 30.2, 45.7]], ["C", [29.5, 47.8, 28.6, 49.9]], ["C", [28.4, 50.3, 28.35, 50.65]], ["C", [28.3, 50.95, 28.1, 51.4]], ["C", [27.3, 53.25, 26.7, 55.1]], ["C", [26.1, 56.95, 25.3, 58.9]], ["C", [24.5, 60.7, 23.9, 62.65]], ["C", [23.3, 64.6, 22.5, 66.5]], ["C", [20.5, 71.3, 18.8, 76.15]], ["C", [17.1, 81.1, 15.1, 85.9]], ["C", [14.2, 88.1, 13.45, 90.25]], ["C", [12.7, 92.45, 11.9, 94.65]], ["C", [11.4, 95.8, 11.05, 96.85]], ["C", [10.7, 98, 9.7, 98.55]], ["C", [8.9, 99.05, 7.4, 99.05]], ["C", [5.9, 99.05, 4.5, 99.05]], ["C", [3.6, 99.05, 2.65, 99.05]], ["C", [1.7, 99.05, 1, 98.75]], ["C", [0.4, 98.5, 0.2, 97.95]], ["C", [0, 97.4, 0.1, 96.7]], ["C", [0.2, 96.1, 0.45, 95.45]], ["C", [0.7, 94.75, 0.9, 94.3]], ["C", [2, 91.7, 2.9, 88.95]], ["C", [3.8, 86.15, 4.9, 83.6]], ["C", [5.2, 83, 5.35, 82.3]], ["C", [5.5, 81.7, 5.8, 81.1]], ["C", [6.5, 79.4, 7.05, 77.65]], ["C", [7.6, 75.85, 8.4, 74.05]], ["C", [8.9, 72.8, 9.35, 71.45]], ["C", [9.8, 70.2, 10.3, 68.9]], ["C", [12.3, 64, 14, 58.95]], ["C", [15.7, 54, 17.7, 49.2]], ["C", [18, 48.5, 18.15, 47.9]], ["C", [18.3, 47.3, 18.6, 46.65]], ["C", [19.2, 45.2, 19.75, 43.6]], ["C", [20.3, 42, 20.9, 40.45]], ["C", [21.2, 39.8, 21.45, 39.1]], ["C", [21.7, 38.35, 22, 37.7]], ["C", [22.8, 35.7, 23.45, 33.75]], ["C", [24.1, 31.8, 24.9, 29.8]], ["C", [25.4, 28.7, 25.85, 27.3]], ["C", [26.3, 25.85, 27.2, 25.2]], ["C", [27.5, 24.9, 28.5, 24.7]], ["C", [28.7, 24.6, 28.9, 24.65]], ["C", [29.1, 24.7, 29.3, 24.6]]];
}
private static function initializeWidths():void{
__widths[" "] = 28;
__widths["A"] = 65;
__widths["B"] = 69;
__widths["C"] = 72;
__widths["D"] = 70;
__widths["E"] = 61;
__widths["F"] = 57;
__widths["G"] = 76;
__widths["H"] = 72;
__widths["I"] = 26;
__widths["J"] = 52;
__widths["K"] = 67;
__widths["L"] = 56;
__widths["M"] = 87;
__widths["N"] = 73;
__widths["O"] = 76;
__widths["P"] = 65;
__widths["Q"] = 76;
__widths["R"] = 69;
__widths["S"] = 65;
__widths["T"] = 57;
__widths["U"] = 72;
__widths["V"] = 61;
__widths["W"] = 93;
__widths["X"] = 61;
__widths["Y"] = 65;
__widths["Z"] = 61;
__widths["a"] = 54;
__widths["b"] = 59;
__widths["c"] = 54;
__widths["d"] = 59;
__widths["e"] = 54;
__widths["f"] = 30;
__widths["g"] = 57;
__widths["h"] = 56;
__widths["i"] = 22;
__widths["j"] = 22;
__widths["k"] = 52;
__widths["l"] = 22;
__widths["m"] = 86;
__widths["n"] = 55;
__widths["o"] = 57;
__widths["p"] = 59;
__widths["q"] = 59;
__widths["r"] = 33;
__widths["s"] = 50;
__widths["t"] = 32;
__widths["u"] = 56;
__widths["v"] = 50;
__widths["w"] = 76;
__widths["x"] = 52;
__widths["y"] = 50;
__widths["z"] = 48;
__widths["1"] = 56;
__widths["2"] = 56;
__widths["3"] = 56;
__widths["4"] = 56;
__widths["5"] = 56;
__widths["6"] = 56;
__widths["7"] = 56;
__widths["8"] = 56;
__widths["9"] = 56;
__widths["0"] = 56;
__widths["!"] = 26;
__widths["@"] = 80;
__widths["#"] = 56;
__widths["$"] = 56;
__widths["%"] = 100;
__widths["&"] = 63;
__widths["*"] = 35;
__widths["("] = 26;
__widths[")"] = 26;
__widths["_"] = 50;
__widths["+"] = 60;
__widths["-"] = 39;
__widths["="] = 60;
__widths["{"] = 33;
__widths["}"] = 33;
__widths["|"] = 22;
__widths["["] = 26;
__widths["]"] = 26;
__widths["\\"] = 33;
__widths[":"] = 28;
__widths["\""] = 43;
__widths[";"] = 28;
__widths["'"] = 28;
__widths["<"] = 60;
__widths[">"] = 60;
__widths["?"] = 56;
__widths[","] = 28;
__widths["."] = 28;
__widths["/"] = 33;
}
}
}//package org.papervision3d.typography.fonts
Section 143
//GeosansLight (org.papervision3d.typography.fonts.GeosansLight)
package org.papervision3d.typography.fonts {
import org.papervision3d.typography.*;
public class GeosansLight extends Font3D {
public static var __motifs:Object = {};
public static var __heights:Number = 111;
public static var __widths:Object = {};
public static var __initialized:Boolean = false;
override public function get motifs():Object{
if (!__initialized){
initialize();
};
return (__motifs);
}
override public function get widths():Object{
if (!__initialized){
initialize();
};
return (__widths);
}
override public function get height():Number{
if (!__initialized){
initialize();
};
return (__heights);
}
private static function initializeMotifsPunctuation():void{
__motifs[" "] = [];
__motifs["!"] = [["M", [12.8, 84.6]], ["C", [11.7, 83.5, 10.3, 83.5]], ["C", [6.7, 84.1, 6.7, 87.1]], ["C", [6.7, 90.7, 10.3, 90.7]], ["C", [13.9, 90.1, 13.9, 87.1]], ["C", [13.6, 85.4, 12.8, 84.6]], ["M", [8.2, 18.9]], ["L", [8.2, 75.5]], ["L", [12.2, 75.5]], ["L", [12.2, 18.9]], ["L", [8.2, 18.9]]];
__motifs["\""] = [["M", [6.1, 17.6]], ["L", [7.1, 33.6]], ["L", [9.2, 33.6]], ["L", [10.2, 17.6]], ["L", [6.1, 17.6]], ["M", [17.3, 17.6]], ["L", [18.4, 33.6]], ["L", [20.4, 33.6]], ["L", [21.4, 17.6]], ["L", [17.3, 17.6]]];
__motifs["#"] = [["M", [36.1, 41.1]], ["L", [33.3, 52.6]], ["L", [19.3, 52.6]], ["L", [22, 41.1]], ["L", [36.1, 41.1]], ["M", [52.2, 38.7]], ["L", [39.1, 38.7]], ["L", [42.1, 26]], ["L", [39.7, 26]], ["L", [36.6, 38.7]], ["L", [22.7, 38.7]], ["L", [25.7, 26]], ["L", [23.3, 26]], ["L", [20.2, 38.7]], ["L", [6.3, 38.7]], ["L", [5.5, 41.1]], ["L", [19.6, 41.1]], ["L", [16.8, 52.6]], ["L", [4, 52.6]], ["L", [3.2, 55.1]], ["L", [16.2, 55.1]], ["L", [13.2, 67.7]], ["L", [15.6, 67.7]], ["L", [18.7, 55.1]], ["L", [32.7, 55.1]], ["L", [29.4, 68.2]], ["L", [31.9, 68.2]], ["L", [35.1, 55.1]], ["L", [48.5, 55.1]], ["L", [49.3, 52.6]], ["L", [35.7, 52.6]], ["L", [38.5, 41.1]], ["L", [51.4, 41.1]], ["L", [52.2, 38.7]]];
__motifs["$"] = [["M", [27.3, 86.9]], ["L", [27.3, 54.5]], ["C", [40.6, 59.9, 40.6, 70.8]], ["C", [40.6, 77.7, 37.5, 82]], ["C", [34.1, 86.9, 27.3, 86.9]], ["M", [14.8, 26.7]], ["C", [17.8, 23.4, 23.3, 22.6]], ["L", [23.3, 48.5]], ["C", [17.8, 46.3, 15.2, 43.8]], ["C", [11.6, 40.5, 11.6, 35.4]], ["C", [11.6, 30.2, 14.8, 26.7]], ["M", [27.3, 13.3]], ["L", [23.3, 13.3]], ["L", [23.3, 18.6]], ["C", [16.4, 18.6, 11.9, 23.4]], ["C", [7.4, 28.1, 7.4, 35]], ["C", [7.4, 42.4, 11.9, 46.7]], ["C", [15.3, 50.1, 23.3, 52.9]], ["L", [23.3, 86.9]], ["C", [11.1, 86.9, 7.7, 74.2]], ["L", [3.6, 75.6]], ["C", [5.4, 82.9, 10.6, 87]], ["C", [15.9, 91.1, 23.3, 91.1]], ["L", [23.3, 96.4]], ["L", [27.3, 96.4]], ["L", [27.3, 91]], ["C", [35.8, 91, 40.5, 85]], ["C", [44.7, 79.6, 44.7, 70.8]], ["C", [44.7, 56.9, 27.3, 50.1]], ["L", [27.3, 22.6]], ["C", [34.6, 23.6, 37.9, 29.6]], ["L", [41.7, 27.9]], ["C", [37, 18.6, 27.3, 18.6]], ["L", [27.3, 13.3]]];
__motifs["%"] = [["M", [36.7, 70.4]], ["C", [40.1, 70.4, 42.6, 72.9]], ["C", [45.1, 75.4, 45.1, 78.8]], ["C", [45.1, 82, 42.5, 84.6]], ["C", [39.9, 87, 36.7, 87]], ["C", [33.4, 87, 30.9, 84.5]], ["C", [28.4, 82.1, 28.4, 78.8]], ["C", [28.4, 75.4, 30.9, 72.9]], ["C", [33.3, 70.4, 36.7, 70.4]], ["M", [27.9, 70]], ["C", [24.3, 73.8, 24.3, 78.8]], ["C", [24.3, 83.6, 28.1, 87.4]], ["C", [31.8, 91.1, 36.7, 91.1]], ["C", [41.8, 91.1, 45.6, 87.5]], ["C", [49.2, 84.1, 49.2, 78.8]], ["C", [49.2, 73.7, 45.5, 70]], ["C", [41.8, 66.3, 36.7, 66.3]], ["C", [31.6, 66.3, 27.9, 70]], ["M", [10.9, 27.2]], ["C", [13.3, 24.7, 16.7, 24.7]], ["C", [20.1, 24.7, 22.6, 27.2]], ["C", [25.1, 29.7, 25.1, 33.1]], ["C", [25.1, 36.4, 22.6, 38.9]], ["C", [19.7, 41.3, 16.7, 41.3]], ["C", [13.4, 41.3, 10.9, 38.8]], ["C", [8.4, 36.4, 8.4, 33.1]], ["C", [8.4, 29.7, 10.9, 27.2]], ["M", [7.9, 24.3]], ["C", [4.3, 28.1, 4.3, 33.1]], ["C", [4.3, 37.9, 8.1, 41.7]], ["C", [11.8, 45.4, 16.7, 45.4]], ["C", [21.8, 45.4, 25.6, 41.8]], ["C", [29.2, 38.4, 29.2, 33.1]], ["C", [29.2, 28, 25.5, 24.3]], ["C", [21.8, 20.6, 16.7, 20.6]], ["C", [11.6, 20.6, 7.9, 24.3]], ["M", [45, 18.9]], ["L", [6.2, 90.3]], ["L", [10.2, 90.3]], ["L", [49, 18.9]], ["L", [45, 18.9]]];
__motifs["&"] = [["M", [18.1, 58.75]], ["C", [20.7, 56.8, 24.8, 54]], ["L", [40.6, 77.9]], ["C", [38.9, 79.3, 37.5, 80.25]], ["C", [36.1, 81.2, 35, 81.9]], ["C", [27.3, 86.8, 20.1, 86.8]], ["C", [14.7, 86.8, 11.3, 83.5]], ["C", [7.8, 80.3, 7.8, 75]], ["C", [7.8, 68.3, 14.2, 62]], ["C", [15.5, 60.7, 18.1, 58.75]], ["M", [18.3, 33.6]], ["C", [18.3, 29.3, 21.5, 26.3]], ["C", [24.7, 23.4, 29, 23.4]], ["C", [34.2, 23.4, 37.4, 26]], ["C", [40.5, 28.5, 40.5, 33.7]], ["C", [40.4, 35.5, 40, 36.4]], ["L", [38.6, 39]], ["C", [37.6, 40.4, 36.35, 41.55]], ["C", [35.1, 42.7, 33.7, 43.7]], ["L", [26.1, 48.8]], ["L", [19.4, 38.4]], ["C", [18.3, 36.5, 18.3, 33.6]], ["M", [28.9, 19.7]], ["C", [22.9, 19.7, 18.6, 23.7]], ["C", [14.4, 27.6, 14.4, 33.6]], ["C", [14.4, 36.8, 15.9, 39.9]], ["L", [22.9, 51]], ["L", [11.6, 59.3]], ["C", [3.7, 66.6, 3.7, 75]], ["C", [3.7, 82, 8.2, 86.3]], ["C", [12.8, 90.7, 20, 90.7]], ["C", [30.4, 90.7, 42.6, 80.9]], ["L", [48.9, 90.3]], ["L", [53.6, 90.3]], ["L", [45.7, 78.4]], ["L", [56.3, 69.8]], ["L", [54.1, 66.9]], ["L", [43.7, 75.4]], ["L", [28.1, 51.7]], ["L", [35.4, 46.7]], ["C", [44.2, 40.7, 44.2, 33.7]], ["C", [44.2, 26.9, 40, 23.3]], ["C", [35.8, 19.7, 28.9, 19.7]]];
__motifs["'"] = [["M", [6.1, 18.9]], ["L", [7.1, 34.8]], ["L", [9.3, 34.8]], ["L", [10.3, 18.9]], ["L", [6.1, 18.9]]];
__motifs["("] = [["M", [8.9, 38.2]], ["C", [9.9, 31.6, 11.35, 25.85]], ["C", [12.8, 20.1, 14.8, 14.9]], ["L", [11.3, 14.9]], ["C", [3.8, 34.9, 3.8, 55.7]], ["C", [3.8, 59.6, 4.2, 64.1]], ["C", [4.6, 68.6, 5.4, 73.7]], ["C", [5.9, 76.3, 6.25, 78]], ["C", [6.6, 79.7, 6.8, 80.7]], ["C", [7.2, 82.6, 7.45, 83.9]], ["C", [7.7, 85.2, 7.9, 86]], ["C", [8.6, 88.7, 9.45, 91.3]], ["C", [10.3, 93.9, 11.3, 96.5]], ["L", [14.8, 96.5]], ["C", [7.3, 76.7, 7.3, 55.7]], ["C", [7.3, 52.2, 7.7, 47.8]], ["C", [8.1, 43.4, 8.9, 38.2]]];
__motifs[")"] = [["M", [15, 38.1]], ["C", [13, 25.8, 8.9, 14.9]], ["L", [5.4, 14.9]], ["C", [12.9, 35.5, 12.9, 55.7]], ["C", [12.9, 59.5, 12.5, 63.9]], ["C", [12.1, 68.3, 11.3, 73.3]], ["C", [10.3, 79.6, 8.85, 85.35]], ["C", [7.4, 91.1, 5.4, 96.5]], ["L", [8.9, 96.5]], ["C", [16.4, 77.2, 16.4, 55.7]], ["C", [16.4, 51.3, 16.05, 46.95]], ["C", [15.7, 42.6, 15, 38.1]]];
__motifs["*"] = [["M", [25, 19.7]], ["C", [20, 20.8, 14.8, 27.3]], ["C", [15.7, 25.8, 15.7, 24.6]], ["L", [16.9, 17.4]], ["C", [16.9, 13.6, 14.3, 13.6]], ["C", [11.6, 14.1, 11.6, 17.4]], ["L", [12.2, 22.3]], ["L", [13.7, 27.3]], ["L", [9, 22.5]], ["C", [6.2, 19.7, 3.5, 19.7]], ["C", [1.3, 20.3, 1.3, 22.2]], ["C", [1.3, 24.6, 6, 26.4]], ["L", [9.3, 27.6]], ["L", [13.2, 28.3]], ["C", [1.3, 31.3, 1.3, 34.5]], ["C", [1.3, 36.9, 3.4, 36.9]], ["C", [6.6, 36.3, 9, 33.9]], ["L", [13.7, 29.4]], ["L", [11.8, 36]], ["C", [11.5, 36.8, 11.5, 39.2]], ["C", [11.5, 43, 14.3, 42.9]], ["C", [16.7, 42.8, 16.7, 39]], ["L", [16.2, 34.6]], ["L", [14.8, 29.4]], ["L", [19.7, 34.1]], ["C", [22.4, 36.7, 25, 36.7]], ["C", [27.3, 36.7, 27.3, 34.6]], ["C", [26.7, 31.7, 22.3, 30.1]], ["C", [21.3, 29.6, 19.55, 29.2]], ["C", [17.8, 28.8, 15.3, 28.3]], ["L", [22.7, 26]], ["C", [27.3, 23.7, 27.3, 22]], ["C", [27.1, 19.7, 25, 19.7]]];
__motifs["+"] = [["M", [31.6, 65.9]], ["L", [31.6, 61.8]], ["L", [21.4, 61.8]], ["L", [21.4, 51.6]], ["L", [16.8, 51.6]], ["L", [16.8, 61.8]], ["L", [6.6, 61.8]], ["L", [6.6, 65.9]], ["L", [16.8, 65.9]], ["L", [16.8, 76.1]], ["L", [21.4, 76.1]], ["L", [21.4, 65.9]], ["L", [31.6, 65.9]]];
__motifs[","] = [["M", [12, 83.4]], ["L", [4.6, 99.7]], ["L", [5.9, 100.6]], ["L", [15.5, 84.9]], ["L", [12, 83.4]]];
__motifs["-"] = [["M", [22.9, 61.8]], ["L", [1.8, 61.8]], ["L", [1.8, 65.9]], ["L", [22.9, 65.9]], ["L", [22.9, 61.8]]];
__motifs["."] = [["M", [5.1, 84.3]], ["C", [1.8, 84.9, 1.8, 87.6]], ["C", [1.9, 89.1, 2.8, 90]], ["C", [4, 90.9, 5.1, 90.9]], ["C", [8.4, 90.9, 8.4, 87.6]], ["C", [7.6, 84.3, 5.1, 84.3]]];
__motifs["/"] = [["M", [23.3, 17.4]], ["L", [2.3, 90.3]], ["L", [6.4, 90.3]], ["L", [27.2, 17.4]], ["L", [23.3, 17.4]]];
__motifs[":"] = [["M", [5.1, 87.6]], ["C", [5.2, 89.1, 6.1, 90]], ["C", [7.3, 90.9, 8.4, 90.9]], ["C", [11.7, 90.9, 11.7, 87.6]], ["C", [10.9, 84.3, 8.4, 84.3]], ["C", [5.1, 84.9, 5.1, 87.6]], ["M", [8.4, 54.8]], ["C", [5.1, 55.4, 5.1, 58.1]], ["C", [5.2, 59.6, 6.1, 60.5]], ["C", [7.3, 61.4, 8.4, 61.4]], ["C", [11.7, 61.4, 11.7, 58.1]], ["C", [10.9, 54.8, 8.4, 54.8]]];
__motifs[";"] = [["M", [11.5, 83.4]], ["L", [4.1, 99.7]], ["L", [5.4, 100.6]], ["L", [15, 84.9]], ["L", [11.5, 83.4]], ["M", [10.3, 54.8]], ["C", [7, 55.4, 7, 58.1]], ["C", [7.1, 59.6, 8, 60.5]], ["C", [9.2, 61.4, 10.3, 61.4]], ["C", [13.6, 61.4, 13.6, 58.1]], ["C", [12.8, 54.8, 10.3, 54.8]]];
__motifs["<"] = [["M", [28.3, 74.8]], ["L", [10.5, 64]], ["L", [28.3, 53.2]], ["L", [28.3, 48.7]], ["L", [3.2, 64]], ["L", [28.3, 79.3]], ["L", [28.3, 74.8]]];
__motifs["="] = [["M", [26.3, 68]], ["L", [3.7, 68]], ["L", [3.7, 72]], ["L", [26.3, 72]], ["L", [26.3, 68]], ["M", [26.3, 55.7]], ["L", [3.7, 55.7]], ["L", [3.7, 59.8]], ["L", [26.3, 59.8]], ["L", [26.3, 55.7]]];
__motifs[">"] = [["M", [22.3, 64]], ["L", [4.6, 74.8]], ["L", [4.6, 79.3]], ["L", [29.7, 64]], ["L", [4.6, 48.7]], ["L", [4.6, 53.2]], ["L", [22.3, 64]]];
__motifs["?"] = [["M", [22.4, 83.6]], ["C", [18.9, 84.2, 18.9, 87.1]], ["C", [19.5, 90.6, 22.4, 90.6]], ["C", [25.9, 90.6, 25.9, 87.1]], ["C", [25.3, 83.6, 22.4, 83.6]], ["M", [24.6, 17.9]], ["C", [10.1, 17.9, 4.6, 31.2]], ["L", [8.4, 32.9]], ["C", [11.3, 27.9, 14, 25.7]], ["C", [18.6, 21.9, 24.6, 21.9]], ["C", [30.4, 21.9, 34.5, 24.5]], ["C", [39.1, 27.5, 39.1, 33.1]], ["C", [39.1, 37.4, 35.6, 41.5]], ["C", [34.8, 42.5, 32.9, 44]], ["C", [31, 45.5, 28.1, 47.7]], ["L", [19.6, 54]], ["C", [12.6, 59.2, 12.6, 65.7]], ["C", [12.6, 70.2, 15.8, 72.8]], ["C", [19, 75.4, 22.9, 75.1]], ["L", [25.8, 74.9]], ["L", [28.1, 74.3]], ["C", [30.5, 73.2, 31.6, 72.1]], ["L", [29.2, 68.8]], ["C", [26.6, 70.9, 22.9, 70.9]], ["C", [20.4, 70.9, 18.7, 69.5]], ["C", [17, 68.1, 17, 65.7]], ["C", [17, 60.5, 22, 56.9]], ["L", [30.4, 50.8]], ["C", [34, 48.2, 36.1, 46.6]], ["C", [38.2, 45, 38.7, 44.3]], ["C", [43.2, 39.2, 43.2, 33.1]], ["C", [43.2, 25.6, 37.5, 21.5]], ["C", [32.4, 17.9, 24.6, 17.9]]];
__motifs["@"] = [["M", [35.9, 63.8]], ["C", [38.3, 66.5, 38.3, 70.7]], ["C", [38.3, 75.8, 35.3, 79.1]], ["C", [32.5, 82.3, 27.3, 82.3]], ["C", [18.2, 82.3, 18.2, 72.2]], ["C", [18.2, 67.6, 21.4, 64.4]], ["C", [24.7, 61.1, 29.3, 61.1]], ["C", [33.5, 61.1, 35.9, 63.8]], ["M", [39.6, 64.5]], ["C", [36.9, 58.5, 29.3, 58.5]], ["C", [23.4, 58.5, 19.4, 62.4]], ["C", [15.5, 66.3, 15.5, 72.2]], ["C", [15.5, 78.1, 18.5, 81.5]], ["C", [21.6, 85, 27.3, 85]], ["C", [35.4, 85, 38.6, 79.3]], ["C", [38.9, 81.2, 40.3, 82.9]], ["C", [42.1, 85, 45.2, 85]], ["C", [51, 85, 54, 79.8]], ["C", [56.4, 75.6, 56.4, 69.4]], ["C", [56.4, 58.8, 48.4, 51.7]], ["C", [40.7, 44.9, 29.9, 44.9]], ["C", [18.8, 44.9, 11.1, 52.3]], ["C", [3.4, 59.7, 3.4, 70.6]], ["C", [3.4, 81.3, 10, 88.5]], ["C", [17.1, 96.5, 29.8, 96.5]], ["C", [36, 96.5, 40.8, 94.6]], ["C", [45.7, 92.8, 48, 90.2]], ["L", [46.1, 88.3]], ["C", [43.7, 91.1, 38.5, 92.7]], ["C", [34, 93.9, 30, 93.9]], ["C", [19.4, 93.9, 12.7, 87.5]], ["C", [6, 81.2, 6, 70.6]], ["C", [6, 60.8, 13, 54.2]], ["C", [19.8, 47.5, 29.9, 47.5]], ["C", [39.8, 47.5, 46.6, 53.6]], ["C", [53.8, 59.9, 53.8, 69.4]], ["C", [53.8, 74.6, 51.8, 77.9]], ["C", [49.3, 82.3, 45.6, 82.3]], ["C", [43.6, 82.3, 42.4, 80.8]], ["C", [40.9, 78.7, 41.2, 75.4]], ["L", [42.5, 59.1]], ["L", [40, 59.1]], ["L", [39.6, 64.5]]];
__motifs["["] = [["M", [16.7, 18.3]], ["L", [16.7, 14.8]], ["L", [5.9, 14.8]], ["L", [5.9, 94.9]], ["L", [17, 94.9]], ["L", [17, 91.5]], ["L", [10, 91.5]], ["L", [10, 18.3]], ["L", [16.7, 18.3]]];
__motifs["\\"] = [["M", [2.3, 18.9]], ["L", [22.8, 90.3]], ["L", [26.7, 90.3]], ["L", [6.3, 18.9]], ["L", [2.3, 18.9]]];
__motifs["]"] = [["M", [6.4, 14.8]], ["L", [6.4, 18.3]], ["L", [13.2, 18.3]], ["L", [13.2, 91.5]], ["L", [6.1, 91.5]], ["L", [6.1, 94.9]], ["L", [17.2, 94.9]], ["L", [17.2, 14.8]], ["L", [6.4, 14.8]]];
__motifs["^"] = [["M", [16.2, 24.5]], ["L", [4.1, 52.6]], ["L", [6.7, 52.6]], ["L", [17.9, 32]], ["L", [28.9, 52.6]], ["L", [31.6, 52.6]], ["L", [19.5, 24.5]], ["L", [16.2, 24.5]]];
__motifs["_"] = [["M", [36.8, 107.9]], ["L", [0, 107.9]], ["L", [0, 111.5]], ["L", [36.8, 111.5]], ["L", [36.8, 107.9]]];
__motifs["`"] = [["M", [11.3, 27.7]], ["L", [9.1, 30.1]], ["L", [22.2, 43.4]], ["L", [24.7, 41.1]], ["L", [11.3, 27.7]]];
}
public static function initialize():void{
initializeMotifsUppercase();
initializeMotifsLowercase();
initializeMotifsNumbers();
initializeMotifsPunctuation();
initializeWidthsUppercase();
initializeWidthsLowercase();
initializeWidthsNumbers();
initializeWidthsPunctuation();
__initialized = true;
}
private static function initializeWidthsUppercase():void{
__widths["A"] = 63;
__widths["B"] = 56;
__widths["C"] = 70;
__widths["D"] = 69;
__widths["E"] = 47;
__widths["F"] = 43;
__widths["G"] = 82;
__widths["H"] = 62;
__widths["I"] = 19;
__widths["J"] = 32;
__widths["K"] = 52;
__widths["L"] = 36;
__widths["M"] = 90;
__widths["N"] = 72;
__widths["O"] = 82;
__widths["P"] = 49;
__widths["Q"] = 82;
__widths["R"] = 48;
__widths["S"] = 50;
__widths["T"] = 44;
__widths["U"] = 56;
__widths["V"] = 53;
__widths["W"] = 88;
__widths["X"] = 53;
__widths["Y"] = 51;
__widths["Z"] = 55;
}
private static function initializeMotifsNumbers():void{
__motifs["0"] = [["M", [28, 20.7]], ["C", [39.3, 20.7, 45.2, 32.3]], ["C", [49.9, 41.5, 49.9, 54]], ["C", [49.9, 67.7, 44.4, 76.8]], ["C", [38.3, 87.1, 28, 87.1]], ["C", [16.9, 87.1, 10.9, 75.5]], ["C", [6.2, 66.3, 6.2, 54]], ["C", [6.2, 40.5, 11.7, 31.1]], ["C", [17.9, 20.7, 28, 20.7]], ["M", [7.7, 29.3]], ["C", [1.8, 39.7, 1.8, 54]], ["C", [1.8, 68.2, 7.7, 78.6]], ["C", [14.9, 91.3, 28, 91.3]], ["C", [41.2, 91.3, 48.4, 78.7]], ["C", [54.2, 68.4, 54.2, 54]], ["C", [54.2, 39.9, 48.3, 29.3]], ["C", [41.1, 16.6, 28, 16.6]], ["C", [14.9, 16.6, 7.7, 29.3]]];
__motifs["1"] = [["M", [20.1, 18.9]], ["L", [17.4, 23]], ["L", [29.5, 23]], ["L", [29.5, 90.3]], ["L", [33.6, 90.3]], ["L", [33.6, 18.9]], ["L", [20.1, 18.9]]];
__motifs["2"] = [["M", [43.3, 23.6]], ["C", [37.2, 18.3, 28.7, 18.3]], ["C", [18.8, 18.3, 12.8, 24.9]], ["C", [8.3, 30, 7.6, 35.2]], ["L", [12.1, 35.2]], ["C", [13.2, 30.6, 16, 27.5]], ["C", [20.6, 22.3, 28.7, 22.3]], ["C", [35.3, 22.3, 40.3, 26.6]], ["C", [45.3, 31, 45.3, 37.3]], ["C", [45.3, 43.8, 41.1, 49.8]], ["L", [6.1, 90.3]], ["L", [49.3, 90.3]], ["L", [49.3, 86.2]], ["L", [15.1, 86.2]], ["L", [35.6, 63]], ["C", [38.4, 59.8, 40.2, 57.65]], ["C", [42, 55.5, 42.9, 54.4]], ["C", [49.4, 46, 49.4, 37.3]], ["C", [49.4, 28.8, 43.3, 23.6]]];
__motifs["3"] = [["M", [41.3, 22.3]], ["C", [35.8, 17.3, 27.6, 17.3]], ["C", [19.7, 17.3, 14.5, 21.8]], ["C", [9.3, 26.2, 8.4, 34]], ["L", [13.1, 34]], ["C", [15.6, 21.4, 27.6, 21.4]], ["C", [33.9, 21.4, 37.9, 25.4]], ["C", [41.9, 29.3, 41.9, 35.5]], ["C", [41.9, 42, 38.2, 45.4]], ["C", [34.4, 48.9, 28.1, 48.9]], ["L", [23.9, 48.9]], ["L", [23.9, 54.8]], ["L", [28.1, 54.8]], ["C", [32.7, 54.8, 37.1, 58.3]], ["C", [42.9, 62.9, 42.9, 71]], ["C", [42.9, 77.5, 38.2, 82.2]], ["C", [33.5, 86.7, 26.9, 86.7]], ["C", [21.8, 86.7, 17.5, 83.4]], ["C", [13.1, 80.1, 11.8, 75.2]], ["L", [7.4, 75.2]], ["C", [9.1, 82.6, 14.2, 86.7]], ["C", [19.5, 90.8, 26.9, 90.8]], ["C", [35.8, 90.8, 41.6, 85.3]], ["C", [47.4, 79.9, 47.4, 71]], ["C", [47.4, 56, 33.4, 51.8]], ["C", [46.8, 48.8, 46.8, 35.5]], ["C", [46.8, 27.2, 41.3, 22.3]]];
__motifs["4"] = [["M", [11.9, 72.7]], ["L", [41.3, 30.6]], ["L", [41.3, 72.7]], ["L", [11.9, 72.7]], ["M", [53.8, 72.7]], ["L", [45.5, 72.7]], ["L", [45.5, 17.9]], ["L", [4.6, 76.7]], ["L", [41.3, 76.7]], ["L", [41.3, 90.3]], ["L", [45.5, 90.3]], ["L", [45.5, 76.7]], ["L", [53.8, 76.7]], ["L", [53.8, 72.7]]];
__motifs["5"] = [["M", [46.3, 18.9]], ["L", [18.9, 18.9]], ["L", [11.8, 46.6]], ["C", [15.5, 45.2, 18.9, 45.2]], ["C", [20.4, 44.8, 21.3, 44.8]], ["L", [26, 44.7]], ["C", [34.3, 44.4, 40.6, 49.8]], ["C", [47.3, 55.5, 47.3, 64.8]], ["C", [47.3, 74.3, 41.3, 80.7]], ["C", [35.3, 87.2, 26, 87.2]], ["C", [18.2, 87.2, 13.3, 83.6]], ["C", [9.4, 80.7, 6.5, 74.8]], ["L", [2.7, 76.3]], ["C", [9, 91.3, 26, 91.3]], ["C", [37.3, 91.3, 44.4, 83.8]], ["C", [51.4, 76.4, 51.4, 64.8]], ["C", [51.4, 53.4, 43.4, 46.6]], ["C", [35.6, 40, 26, 40.6]], ["L", [17.8, 41.4]], ["L", [22.1, 23]], ["L", [46.3, 23]], ["L", [46.3, 18.9]]];
__motifs["6"] = [["M", [12.9, 52.9]], ["C", [18.9, 46.9, 27.4, 46.9]], ["C", [36, 46.9, 42, 53]], ["C", [48, 59.2, 48, 67.4]], ["C", [48, 76.2, 42.1, 82.1]], ["C", [36.2, 88, 27.4, 88]], ["C", [18.6, 88, 12.7, 82.1]], ["C", [6.9, 76.3, 6.9, 67.4]], ["C", [6.9, 58.9, 12.9, 52.9]], ["M", [22.9, 43.3]], ["L", [18.6, 44.5]], ["L", [14.4, 46.6]], ["L", [29.6, 18.9]], ["L", [24.9, 18.9]], ["L", [7, 51]], ["C", [6.1, 52.7, 5.3, 54.55]], ["C", [4.5, 56.4, 4, 58.5]], ["C", [3.5, 60.2, 3.3, 61.3]], ["C", [3.1, 62.4, 3, 63]], ["C", [2.9, 63.6, 2.9, 64.2]], ["C", [2.9, 64.7, 2.9, 65.2]], ["L", [2.9, 67.4]], ["C", [2.9, 78.2, 9.7, 85.2]], ["C", [16.5, 92, 27.4, 92]], ["C", [38, 92, 45, 85]], ["C", [52, 78, 52, 67.4]], ["C", [52, 57, 44.9, 49.9]], ["C", [37.9, 42.9, 27.4, 42.9]], ["L", [22.9, 43.3]]];
__motifs["7"] = [["M", [3.1, 23]], ["L", [45.7, 23]], ["L", [2.4, 88.7]], ["L", [5.8, 91.3]], ["L", [53.3, 18.9]], ["L", [3.1, 18.9]], ["L", [3.1, 23]]];
__motifs["8"] = [["M", [39.2, 59.7]], ["C", [44.2, 64.5, 44.2, 71.3]], ["C", [44.2, 78.4, 39.3, 83]], ["C", [34.6, 87.6, 27.3, 87.6]], ["C", [20.1, 87.6, 15.3, 82.8]], ["C", [10.6, 78.1, 10.6, 71.3]], ["C", [10.6, 64.6, 15.6, 59.6]], ["C", [18.1, 57.2, 21, 55.75]], ["C", [23.9, 54.3, 27.3, 54.3]], ["C", [30.8, 54.3, 33.75, 55.75]], ["C", [36.7, 57.2, 39.2, 59.7]], ["M", [13, 36.1]], ["C", [13, 29.9, 17.1, 25.8]], ["C", [21.2, 21.7, 27.3, 21.7]], ["C", [33.5, 21.7, 37.6, 25.8]], ["C", [41.7, 29.9, 41.7, 36.1]], ["C", [41.7, 42.3, 37.6, 46.4]], ["C", [35.6, 48.4, 33.05, 49.6]], ["C", [30.5, 50.8, 27.3, 50.8]], ["C", [24.2, 50.8, 21.65, 49.5]], ["C", [19.1, 48.2, 17.1, 46.2]], ["C", [13, 42.1, 13, 36.1]], ["M", [45.7, 36.1]], ["C", [45.7, 27.9, 40.6, 22.8]], ["C", [35.5, 17.7, 27.3, 17.7]], ["C", [19.2, 17.7, 14.1, 22.9]], ["C", [9, 28, 9, 36.1]], ["C", [9, 41.4, 11.9, 46.1]], ["C", [14.9, 51, 19.9, 52.5]], ["C", [13.6, 54.9, 10.1, 59.8]], ["C", [6.6, 64.8, 6.6, 71.3]], ["C", [6.6, 80.3, 12.5, 86]], ["C", [18.4, 91.6, 27.5, 91.6]], ["C", [36.5, 91.6, 42.4, 85.9]], ["C", [48.2, 80.2, 48.2, 71.3]], ["C", [48.2, 63.4, 43.3, 58.2]], ["C", [39.9, 54.5, 34.5, 52.5]], ["C", [39.8, 50.8, 42.7, 46.3]], ["C", [45.7, 41.7, 45.7, 36.1]]];
__motifs["9"] = [["M", [48.1, 43]], ["C", [48.1, 51.7, 42.2, 57.6]], ["C", [36.3, 63.5, 27.6, 63.5]], ["C", [18.7, 63.5, 12.9, 57.5]], ["C", [7, 51.4, 7, 43]], ["C", [7, 34.2, 12.9, 28.3]], ["C", [18.8, 22.4, 27.6, 22.4]], ["C", [36.4, 22.4, 42.3, 28.3]], ["C", [48.1, 34.1, 48.1, 43]], ["M", [45.1, 25.4]], ["C", [38.2, 18.4, 27.6, 18.4]], ["C", [17, 18.4, 10, 25.4]], ["C", [3, 32.4, 3, 43]], ["C", [3, 53.6, 10, 60.6]], ["C", [17, 67.5, 27.6, 67.5]], ["L", [32.1, 67.1]], ["L", [36.4, 65.9]], ["L", [40.6, 63.8]], ["L", [26.4, 89.5]], ["L", [30.2, 91.3]], ["L", [48, 59.4]], ["C", [49, 57.6, 49.75, 55.75]], ["C", [50.5, 53.9, 51, 51.9]], ["C", [51.6, 49.6, 51.85, 47.35]], ["C", [52.1, 45.1, 52.1, 43]], ["C", [52.1, 32.4, 45.1, 25.4]]];
}
private static function initializeWidthsLowercase():void{
__widths["a"] = 51;
__widths["b"] = 52;
__widths["c"] = 44;
__widths["d"] = 52;
__widths["e"] = 49;
__widths["f"] = 27;
__widths["g"] = 51;
__widths["h"] = 46;
__widths["i"] = 18;
__widths["j"] = 19;
__widths["k"] = 42;
__widths["l"] = 19;
__widths["m"] = 64;
__widths["n"] = 45;
__widths["o"] = 50;
__widths["p"] = 51;
__widths["q"] = 50;
__widths["r"] = 31;
__widths["s"] = 33;
__widths["t"] = 25;
__widths["u"] = 43;
__widths["v"] = 44;
__widths["w"] = 68;
__widths["x"] = 36;
__widths["y"] = 45;
__widths["z"] = 46;
}
private static function initializeWidthsNumbers():void{
__widths["0"] = 56;
__widths["1"] = 55;
__widths["2"] = 55;
__widths["3"] = 55;
__widths["4"] = 55;
__widths["5"] = 55;
__widths["6"] = 55;
__widths["7"] = 55;
__widths["8"] = 55;
__widths["9"] = 55;
}
private static function initializeMotifsLowercase():void{
__motifs["a"] = [["M", [37, 57.5]], ["C", [42.1, 62.6, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.5, 12.6, 57.4]], ["C", [17.6, 52.4, 24.8, 52.4]], ["C", [31.9, 52.4, 37, 57.5]], ["M", [41.3, 49]], ["L", [41.3, 56.2]], ["C", [34.7, 48.4, 24.8, 48.4]], ["C", [15.8, 48.4, 9.6, 54.6]], ["C", [3.5, 60.7, 3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [34.8, 91, 41.3, 83.2]], ["L", [41.3, 90.3]], ["L", [45.4, 90.3]], ["L", [45.4, 49]], ["L", [41.3, 49]]];
__motifs["b"] = [["M", [38.7, 57.5]], ["C", [43.8, 62.6, 43.8, 69.7]], ["C", [43.8, 76.9, 38.7, 82]], ["C", [33.7, 87, 26.5, 87]], ["C", [19.4, 87, 14.3, 81.9]], ["C", [9.2, 76.8, 9.2, 69.7]], ["C", [9.2, 62.5, 14.3, 57.4]], ["C", [19.3, 52.4, 26.5, 52.4]], ["C", [33.6, 52.4, 38.7, 57.5]], ["M", [5.5, 16.3]], ["L", [5.5, 90.3]], ["L", [9.6, 90.3]], ["L", [9.6, 82.7]], ["C", [16.2, 91, 26.5, 91]], ["C", [35.5, 91, 41.7, 84.8]], ["C", [47.8, 78.7, 47.8, 69.7]], ["C", [47.8, 60.7, 41.6, 54.5]], ["C", [35.5, 48.4, 26.5, 48.4]], ["C", [16.1, 48.4, 9.6, 56.7]], ["L", [9.6, 16.3]], ["L", [5.5, 16.3]]];
__motifs["c"] = [["M", [38.7, 56.8]], ["L", [38.7, 51.9]], ["C", [34, 48.3, 26.1, 48.3]], ["C", [16.9, 48.3, 10.8, 54.4]], ["C", [4.7, 60.5, 4.7, 69.7]], ["C", [4.7, 78.9, 10.8, 85]], ["C", [16.9, 91.1, 26.1, 91.1]], ["C", [33.1, 91.1, 38.7, 87.4]], ["L", [38.7, 82.3]], ["C", [33.3, 87.1, 26.1, 87.1]], ["C", [18.5, 87.1, 13.6, 82.2]], ["C", [8.7, 77.3, 8.7, 69.7]], ["C", [8.7, 62, 13.6, 57.1]], ["C", [18.4, 52.3, 26.1, 52.3]], ["C", [29.5, 52.3, 33.3, 53.6]], ["L", [38.7, 56.8]]];
__motifs["d"] = [["M", [37.8, 57.5]], ["C", [42.9, 62.6, 42.9, 69.7]], ["C", [42.9, 76.9, 37.8, 82]], ["C", [32.8, 87, 25.6, 87]], ["C", [18.5, 87, 13.4, 81.9]], ["C", [8.3, 76.8, 8.3, 69.7]], ["C", [8.3, 62.5, 13.4, 57.4]], ["C", [18.4, 52.4, 25.6, 52.4]], ["C", [32.7, 52.4, 37.8, 57.5]], ["M", [42.4, 16.3]], ["L", [42.4, 56.5]], ["C", [35.5, 48.4, 25.6, 48.4]], ["C", [16.6, 48.4, 10.4, 54.6]], ["C", [4.3, 60.7, 4.3, 69.7]], ["C", [4.3, 78.7, 10.5, 84.9]], ["C", [16.6, 91, 25.6, 91]], ["C", [35.8, 91, 42.4, 82.9]], ["L", [42.4, 90.3]], ["L", [46.5, 90.3]], ["L", [46.5, 16.3]], ["L", [42.4, 16.3]]];
__motifs["e"] = [["M", [35.6, 55.7]], ["C", [40.5, 59.2, 41.5, 64.9]], ["L", [8, 64.9]], ["C", [12, 52.3, 24.8, 52.3]], ["C", [30.9, 52.3, 35.6, 55.7]], ["M", [3.4, 69.7]], ["C", [3.4, 78.9, 9.5, 85]], ["C", [15.5, 91.1, 24.8, 91.1]], ["C", [28.7, 91.1, 31.8, 90.1]], ["C", [39.9, 87.5, 43.8, 80.1]], ["L", [40.1, 78.4]], ["C", [36.7, 83.9, 32.4, 85.7]], ["C", [29, 87.1, 24.8, 87.1]], ["C", [16.6, 87.1, 11.9, 82.1]], ["C", [7.4, 77.2, 7.4, 68.8]], ["L", [46.1, 68.8]], ["C", [46.1, 59.7, 40, 54]], ["C", [34, 48.3, 24.8, 48.3]], ["C", [15.5, 48.3, 9.4, 54.4]], ["C", [3.4, 60.4, 3.4, 69.7]]];
__motifs["f"] = [["M", [25, 16.9]], ["C", [23.5, 16.2, 22.3, 16.2]], ["C", [21.7, 16, 19.5, 16]], ["C", [9.9, 16, 9.9, 25.5]], ["L", [9.9, 49]], ["L", [4.3, 49]], ["L", [4.3, 53.1]], ["L", [9.9, 53.1]], ["L", [9.9, 90.3]], ["L", [14, 90.3]], ["L", [14, 53.1]], ["L", [23.8, 53.1]], ["L", [23.8, 49]], ["L", [14, 49]], ["L", [14, 26.7]], ["C", [14, 20.1, 19.6, 20.1]], ["L", [25, 21]], ["L", [25, 16.9]]];
__motifs["g"] = [["M", [37, 57.5]], ["C", [42.1, 62.6, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.5, 12.6, 57.4]], ["C", [17.6, 52.4, 24.8, 52.4]], ["C", [31.9, 52.4, 37, 57.5]], ["M", [41.3, 49]], ["L", [41.3, 56.2]], ["C", [34.7, 48.4, 24.8, 48.4]], ["C", [15.8, 48.4, 9.6, 54.6]], ["C", [3.5, 60.7, 3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [34.8, 91, 41.3, 83.2]], ["L", [41.3, 89.3]], ["C", [41.3, 97, 37, 101.3]], ["C", [32.8, 105.6, 25.1, 105.6]], ["C", [19.4, 105.6, 15.3, 103.7]], ["C", [10.1, 101.3, 9, 96.4]], ["L", [4.9, 96.4]], ["C", [8.2, 109.7, 25.1, 109.7]], ["C", [34.2, 109.7, 39.8, 104.1]], ["C", [45.4, 98.5, 45.4, 89.4]], ["L", [45.4, 49]], ["L", [41.3, 49]]];
__motifs["h"] = [["M", [7.4, 16.3]], ["L", [7.4, 90.3]], ["L", [11.5, 90.3]], ["L", [11.5, 63.4]], ["C", [11.5, 58.4, 15.2, 55.4]], ["C", [18.8, 52.4, 23.8, 52.4]], ["C", [36, 52.4, 36, 65.5]], ["L", [36, 90.4]], ["L", [40.1, 90.4]], ["L", [40.1, 65.1]], ["C", [40.1, 48.4, 23.8, 48.4]], ["C", [15.2, 48.4, 11.5, 54.5]], ["L", [11.5, 16.3]], ["L", [7.4, 16.3]]];
__motifs["i"] = [["M", [7.3, 49]], ["L", [7.3, 90.3]], ["L", [11.4, 90.3]], ["L", [11.4, 49]], ["L", [7.3, 49]], ["M", [9.4, 35]], ["C", [6.1, 35.6, 6.1, 38.3]], ["C", [6.2, 39.8, 7.1, 40.7]], ["C", [8.3, 41.6, 9.4, 41.6]], ["C", [12.7, 41.6, 12.7, 38.3]], ["C", [11.9, 35, 9.4, 35]]];
__motifs["j"] = [["M", [7.4, 49]], ["L", [7.4, 108.3]], ["L", [11.5, 108.3]], ["L", [11.5, 49]], ["L", [7.4, 49]], ["M", [9.4, 35]], ["C", [6.1, 35.6, 6.1, 38.3]], ["C", [6.2, 39.8, 7.1, 40.7]], ["C", [8.3, 41.6, 9.4, 41.6]], ["C", [12.7, 41.6, 12.7, 38.3]], ["C", [11.9, 35, 9.4, 35]]];
__motifs["k"] = [["M", [28.7, 47.4]], ["L", [10.8, 65.2]], ["L", [10.8, 16.3]], ["L", [6.7, 16.3]], ["L", [6.7, 90.3]], ["L", [10.8, 90.3]], ["L", [10.8, 71.1]], ["L", [13.1, 68.8]], ["L", [34.7, 90.3]], ["L", [40.1, 90.3]], ["L", [15.8, 66]], ["L", [34.5, 47.4]], ["L", [28.7, 47.4]]];
__motifs["l"] = [["M", [7.7, 16.3]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 16.3]], ["L", [7.7, 16.3]]];
__motifs["m"] = [["M", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 61.8]], ["C", [10.7, 57.5, 13.5, 55]], ["C", [16.3, 52.4, 20.4, 52.4]], ["C", [24.4, 52.4, 27.3, 55.1]], ["C", [30.1, 57.6, 30.1, 61.8]], ["L", [30.1, 90.3]], ["L", [34.2, 90.3]], ["L", [34.2, 61.8]], ["C", [34.2, 52.4, 43.9, 52.4]], ["C", [48.6, 52.4, 51.1, 55.2]], ["C", [53.6, 58, 53.6, 61.8]], ["L", [53.6, 90.3]], ["L", [57.7, 90.3]], ["L", [57.7, 61.8]], ["C", [57.7, 55.5, 53.9, 51.9]], ["C", [50.1, 48.4, 43.9, 48.4]], ["C", [35.8, 48.4, 32.2, 54.9]], ["C", [28.4, 48.4, 20.4, 48.4]], ["C", [13.7, 48.4, 10.7, 53.1]], ["L", [10.7, 49]], ["L", [6.6, 49]]];
__motifs["n"] = [["M", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 65.2]], ["C", [10.7, 59.3, 13.8, 55.9]], ["C", [16.8, 52.5, 22.6, 52.5]], ["C", [34.4, 52.5, 34.4, 65.6]], ["L", [34.4, 90.3]], ["L", [38.5, 90.3]], ["L", [38.5, 65.2]], ["C", [38.5, 57.3, 34.4, 52.9]], ["C", [30.3, 48.5, 22.6, 48.5]], ["C", [13.5, 48.5, 10.7, 54]], ["L", [10.7, 49]], ["L", [6.6, 49]]];
__motifs["o"] = [["M", [37.1, 57.4]], ["C", [42.1, 62.4, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.7, 12.7, 57.5]], ["C", [17.8, 52.3, 24.8, 52.3]], ["C", [32.1, 52.3, 37.1, 57.4]], ["M", [3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [33.8, 91, 40, 84.8]], ["C", [46.1, 78.7, 46.1, 69.7]], ["C", [46.1, 60.7, 39.9, 54.5]], ["C", [33.7, 48.3, 24.8, 48.3]], ["C", [15.8, 48.3, 9.7, 54.6]], ["C", [3.5, 60.8, 3.5, 69.7]]];
__motifs["p"] = [["M", [27.5, 87]], ["C", [20.4, 87, 15.3, 81.9]], ["C", [10.2, 76.8, 10.2, 69.7]], ["C", [10.2, 62.5, 15.3, 57.4]], ["C", [20.3, 52.4, 27.5, 52.4]], ["C", [34.6, 52.4, 39.7, 57.5]], ["C", [44.8, 62.6, 44.8, 69.7]], ["C", [44.8, 76.9, 39.7, 82]], ["C", [34.7, 87, 27.5, 87]], ["M", [6.4, 49]], ["L", [6.4, 109.7]], ["L", [10.5, 109.7]], ["L", [10.5, 82.6]], ["C", [17.2, 91, 27.5, 91]], ["C", [36.5, 91, 42.7, 84.8]], ["C", [48.8, 78.7, 48.8, 69.7]], ["C", [48.8, 60.7, 42.6, 54.5]], ["C", [36.5, 48.4, 27.5, 48.4]], ["C", [16.9, 48.4, 10.5, 56.8]], ["L", [10.5, 49]], ["L", [6.4, 49]]];
__motifs["q"] = [["M", [36.5, 57.5]], ["C", [41.6, 62.6, 41.6, 69.7]], ["C", [41.6, 76.9, 36.5, 82]], ["C", [31.5, 87, 24.3, 87]], ["C", [17.2, 87, 12.1, 81.9]], ["C", [7, 76.8, 7, 69.7]], ["C", [7, 62.5, 12.1, 57.4]], ["C", [17.1, 52.4, 24.3, 52.4]], ["C", [31.4, 52.4, 36.5, 57.5]], ["M", [41.1, 49]], ["L", [41.1, 56.5]], ["C", [34.3, 48.4, 24.3, 48.4]], ["C", [15.3, 48.4, 9.1, 54.6]], ["C", [3, 60.7, 3, 69.7]], ["C", [3, 78.7, 9.2, 84.9]], ["C", [15.3, 91, 24.3, 91]], ["C", [34.5, 91, 41.1, 82.9]], ["L", [41.1, 109.7]], ["L", [45.2, 109.7]], ["L", [45.2, 49]], ["L", [41.1, 49]]];
__motifs["r"] = [["M", [18.7, 48.5]], ["C", [16.2, 48.5, 14.1, 50.4]], ["C", [12, 52.3, 10.7, 54.6]], ["L", [10.7, 49]], ["L", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 63.1]], ["C", [10.7, 61.5, 11.35, 59.6]], ["C", [12, 57.7, 13.1, 56.15]], ["C", [14.2, 54.6, 15.7, 53.55]], ["C", [17.2, 52.5, 18.9, 52.5]], ["C", [20.9, 52.5, 22.7, 53.2]], ["C", [24.5, 53.9, 26.1, 55.1]], ["L", [28.3, 51.7]], ["C", [25.8, 49.9, 23.8, 49.2]], ["C", [21.8, 48.5, 18.7, 48.5]]];
__motifs["s"] = [["M", [23.4, 72.9]], ["C", [26.7, 75.5, 26.7, 79]], ["C", [26.7, 87, 17.3, 87]], ["C", [13, 87, 10.5, 85.1]], ["C", [8.1, 83.4, 6.4, 80.3]], ["L", [2.9, 82.4]], ["C", [7.7, 91.1, 17.3, 91.1]], ["C", [22.9, 91.1, 26.9, 87.7]], ["C", [30.8, 84.4, 30.8, 79]], ["C", [30.8, 73.4, 26.5, 70.1]], ["C", [25.4, 69.3, 23.2, 68.25]], ["C", [21, 67.2, 17.6, 66]], ["C", [13.7, 64.7, 11.9, 63.3]], ["C", [9.7, 61.5, 9.7, 58.7]], ["C", [9.7, 52.4, 16.9, 52.4]], ["C", [22.2, 52.4, 25.6, 55.8]], ["L", [28.6, 53.2]], ["C", [23.8, 48.4, 16.9, 48.4]], ["C", [11.9, 48.4, 8.8, 51.5]], ["C", [5.6, 54.5, 5.6, 58.7]], ["C", [5.6, 63.6, 8.8, 66.2]], ["C", [11, 68, 16, 69.8]], ["C", [18.7, 70.8, 20.55, 71.55]], ["C", [22.4, 72.3, 23.4, 72.9]]];
__motifs["t"] = [["M", [12.8, 49]], ["L", [12.8, 30.9]], ["L", [8.7, 30.9]], ["L", [8.7, 49]], ["L", [3.1, 49]], ["L", [3.1, 53.1]], ["L", [8.7, 53.1]], ["L", [8.7, 90.3]], ["L", [12.8, 90.3]], ["L", [12.8, 53.1]], ["L", [22.4, 53.1]], ["L", [22.4, 49]], ["L", [12.8, 49]]];
__motifs["u"] = [["M", [32.9, 49]], ["L", [32.9, 74.8]], ["C", [32.9, 87.1, 21.4, 87.1]], ["C", [15.5, 87.1, 12.8, 83.9]], ["C", [10.2, 80.7, 10.2, 74.8]], ["L", [10.2, 49]], ["L", [6.1, 49]], ["L", [6.1, 74.8]], ["C", [6.1, 82.5, 10.1, 86.8]], ["C", [14.1, 91.1, 21.4, 91.1]], ["C", [28.8, 91.1, 32.9, 86.7]], ["C", [36.9, 82.4, 36.9, 74.8]], ["L", [36.9, 49]], ["L", [32.9, 49]]];
__motifs["v"] = [["M", [2.7, 49]], ["L", [22.2, 92.1]], ["L", [41.8, 49]], ["L", [37.2, 49]], ["L", [22.1, 81.9]], ["L", [7.1, 49]], ["L", [2.7, 49]]];
__motifs["w"] = [["M", [61.5, 49]], ["L", [47.7, 80.9]], ["L", [34.5, 47.7]], ["L", [21.2, 81]], ["L", [7.3, 49]], ["L", [2.9, 49]], ["L", [21.4, 92.1]], ["L", [34.5, 59.1]], ["L", [47.4, 92.1]], ["L", [66.1, 49]], ["L", [61.5, 49]]];
__motifs["x"] = [["M", [29.6, 49]], ["L", [18.2, 66.1]], ["L", [6.7, 49]], ["L", [1.9, 49]], ["L", [15.7, 69.5]], ["L", [1.6, 90.3]], ["L", [6.5, 90.3]], ["L", [18.2, 73]], ["L", [29.9, 90.3]], ["L", [34.7, 90.3]], ["L", [20.7, 69.4]], ["L", [34.4, 49]], ["L", [29.6, 49]]];
__motifs["y"] = [["M", [2.8, 49]], ["L", [20.2, 86.5]], ["L", [9.5, 109.7]], ["L", [14.1, 109.7]], ["L", [42.3, 49]], ["L", [37.8, 49]], ["L", [22.6, 81.6]], ["L", [7.2, 49]], ["L", [2.8, 49]]];
__motifs["z"] = [["M", [34.1, 52.9]], ["L", [4.6, 90.3]], ["L", [41.9, 90.3]], ["L", [41.9, 86.2]], ["L", [13.1, 86.2]], ["L", [42.4, 49]], ["L", [6.3, 49]], ["L", [6.3, 52.9]], ["L", [34.1, 52.9]]];
}
private static function initializeMotifsUppercase():void{
__motifs["A"] = [["M", [17, 64.8]], ["L", [31.6, 27]], ["L", [46.2, 64.8]], ["L", [17, 64.8]], ["M", [7.1, 90.3]], ["L", [15.4, 68.9]], ["L", [47.9, 68.9]], ["L", [56.1, 90.3]], ["L", [60.2, 90.3]], ["L", [31.6, 16.6]], ["L", [3.1, 90.3]], ["L", [7.1, 90.3]]];
__motifs["B"] = [["M", [11.6, 86.2]], ["L", [11.6, 53.1]], ["L", [30, 53.1]], ["C", [37.7, 53.1, 42.8, 57.5]], ["C", [48.3, 62.1, 48.3, 69.6]], ["C", [48.3, 77, 42.9, 81.6]], ["C", [37.6, 86.2, 30, 86.2]], ["L", [11.6, 86.2]], ["M", [35.5, 45.4]], ["C", [31.7, 49, 25.9, 49]], ["L", [11.6, 49]], ["L", [11.6, 23]], ["L", [25.3, 23]], ["C", [31.2, 23, 35.3, 26.6]], ["C", [39.3, 30, 39.3, 36]], ["C", [39.3, 41.8, 35.5, 45.4]], ["M", [25, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [29.9, 90.3]], ["C", [39.3, 90.3, 45.8, 84.5]], ["C", [52.3, 78.8, 52.3, 69.6]], ["C", [52.3, 61.9, 47.8, 56.6]], ["C", [43.2, 51.3, 35.7, 49.8]], ["C", [43.4, 45.4, 43.4, 36]], ["C", [43.4, 27.8, 38.2, 23.2]], ["C", [33.3, 18.9, 25, 18.9]]];
__motifs["C"] = [["M", [57.6, 25]], ["C", [62.6, 27.1, 66.8, 30.6]], ["L", [66.8, 25.5]], ["C", [62.7, 22.3, 58.3, 20.6]], ["C", [50.9, 17.9, 41.7, 17.9]], ["C", [25.5, 17.9, 15.2, 28.2]], ["C", [5, 38.4, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [43.1, 91.3, 44.4, 91.25]], ["C", [45.7, 91.2, 46.8, 91.1]], ["C", [56.4, 90.2, 62, 86.1]], ["L", [66.8, 82.6]], ["L", [66.8, 77.9]], ["C", [61, 82.1, 57.2, 84]], ["C", [50.6, 87.2, 41.7, 87.2]], ["C", [27.4, 87.2, 18.2, 78]], ["C", [9.1, 68.9, 9.1, 54.6]], ["C", [9.1, 40.3, 18.3, 31.1]], ["C", [27.5, 21.9, 41.7, 21.9]], ["C", [50, 21.9, 57.6, 25]]];
__motifs["D"] = [["M", [31.4, 22.9]], ["C", [44.1, 22.9, 51.9, 32.5]], ["C", [59.2, 41.4, 59.2, 54.5]], ["C", [59.2, 69.2, 50.5, 78]], ["C", [42.4, 86.2, 31.4, 86.2]], ["L", [11.6, 86.2]], ["L", [11.6, 22.9]], ["L", [31.4, 22.9]], ["M", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [31.4, 90.3]], ["C", [45.9, 90.3, 54.9, 79.5]], ["C", [63.3, 69.3, 63.3, 54.5]], ["C", [63.3, 39.8, 54.8, 29.7]], ["C", [45.8, 18.9, 31.4, 18.9]], ["L", [7.6, 18.9]]];
__motifs["E"] = [["M", [41.4, 18.9]], ["L", [7.1, 18.9]], ["L", [7.1, 90.3]], ["L", [41.4, 90.3]], ["L", [41.4, 86.2]], ["L", [11.2, 86.2]], ["L", [11.2, 53.4]], ["L", [41.4, 53.4]], ["L", [41.4, 49]], ["L", [11.2, 49]], ["L", [11.2, 23]], ["L", [41.4, 23]], ["L", [41.4, 18.9]]];
__motifs["F"] = [["M", [11.6, 49]], ["L", [11.6, 23]], ["L", [38.6, 23]], ["L", [38.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 53.1]], ["L", [38.6, 53.1]], ["L", [38.6, 49]], ["L", [11.6, 49]]];
__motifs["G"] = [["M", [68.6, 35.1]], ["L", [71.9, 32.6]], ["C", [60.9, 17.9, 41.7, 17.9]], ["C", [25.7, 17.9, 15.3, 28.3]], ["C", [5, 38.6, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [58.7, 91.3, 69, 80.4]], ["C", [78.5, 70.4, 78.5, 55.8]], ["L", [50.4, 55.8]], ["L", [50.4, 59.9]], ["L", [74, 59.9]], ["C", [73, 69.5, 66, 77.1]], ["C", [56.8, 87.2, 41.7, 87.2]], ["C", [27.6, 87.2, 18.2, 78]], ["C", [9, 68.8, 9, 54.6]], ["C", [9, 40.5, 18.3, 31.2]], ["C", [27.6, 21.9, 41.7, 21.9]], ["C", [59, 21.9, 68.6, 35.1]]];
__motifs["H"] = [["M", [50.9, 18.9]], ["L", [50.9, 49]], ["L", [11.6, 49]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 53.1]], ["L", [50.9, 53.1]], ["L", [50.9, 90.3]], ["L", [55, 90.3]], ["L", [55, 18.9]], ["L", [50.9, 18.9]]];
__motifs["I"] = [["M", [7.7, 18.9]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 18.9]], ["L", [7.7, 18.9]]];
__motifs["J"] = [["M", [21.4, 18.9]], ["L", [21.4, 75.9]], ["C", [21.4, 87, 13.9, 87]], ["C", [9, 87, 6.5, 82.4]], ["L", [3, 84.6]], ["C", [6.5, 91.1, 14, 91.1]], ["C", [25.5, 91.1, 25.5, 76.1]], ["L", [25.5, 18.9]], ["L", [21.4, 18.9]]];
__motifs["K"] = [["M", [42.6, 18.9]], ["L", [10.7, 50.6]], ["L", [10.7, 18.9]], ["L", [6.6, 18.9]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 56.4]], ["L", [11.3, 55.8]], ["L", [45.7, 90.3]], ["L", [51.4, 90.3]], ["L", [14.2, 53]], ["L", [48.4, 18.9]], ["L", [42.6, 18.9]]];
__motifs["L"] = [["M", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [31.7, 90.3]], ["L", [31.7, 86.2]], ["L", [11.6, 86.2]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]]];
__motifs["M"] = [["M", [88.1, 90.3]], ["L", [69.5, 16.7]], ["L", [45.2, 80.5]], ["L", [20.9, 16.8]], ["L", [2.3, 90.3]], ["L", [6.4, 90.3]], ["L", [21.7, 30.2]], ["L", [45.2, 92.1]], ["L", [68.7, 30.3]], ["L", [83.9, 90.3]], ["L", [88.1, 90.3]]];
__motifs["N"] = [["M", [61, 18.9]], ["L", [61, 80.9]], ["L", [7.7, 18.4]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 29.7]], ["L", [65.1, 91.5]], ["L", [65.1, 18.9]], ["L", [61, 18.9]]];
__motifs["O"] = [["M", [65.3, 31.1]], ["C", [74.4, 40.2, 74.4, 54.6]], ["C", [74.4, 69.1, 65.3, 78.2]], ["C", [56.1, 87.2, 41.7, 87.2]], ["C", [27.4, 87.2, 18.2, 78]], ["C", [9.1, 68.9, 9.1, 54.6]], ["C", [9.1, 40.3, 18.3, 31.1]], ["C", [27.5, 21.9, 41.7, 21.9]], ["C", [56.1, 21.9, 65.3, 31.1]], ["M", [41.7, 17.9]], ["C", [25.5, 17.9, 15.2, 28.2]], ["C", [5, 38.4, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [57.9, 91.3, 68.2, 81]], ["C", [78.5, 70.8, 78.5, 54.6]], ["C", [78.5, 38.4, 68.2, 28.1]], ["C", [57.8, 17.9, 41.7, 17.9]]];
__motifs["P"] = [["M", [35.9, 46.9]], ["C", [31.5, 50.5, 24.9, 50.5]], ["L", [11.6, 50.5]], ["L", [11.6, 23]], ["L", [24.9, 23]], ["C", [31.6, 23, 35.7, 26.4]], ["C", [40.3, 30.1, 40.3, 36.6]], ["C", [40.3, 43.1, 35.9, 46.9]], ["M", [25, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 54.6]], ["L", [25, 54.6]], ["C", [33.2, 54.6, 38.8, 49.6]], ["C", [44.4, 44.8, 44.4, 36.6]], ["C", [44.4, 28.5, 38.8, 23.7]], ["C", [33.2, 18.9, 25, 18.9]]];
__motifs["Q"] = [["M", [42.6, 95.8]], ["L", [42.6, 99.9]], ["L", [63.7, 99.9]], ["L", [63.7, 95.8]], ["L", [42.6, 95.8]], ["M", [66.1, 31.1]], ["C", [75.2, 40.2, 75.2, 54.6]], ["C", [75.2, 69.1, 66.1, 78.2]], ["C", [56.9, 87.2, 42.5, 87.2]], ["C", [28.2, 87.2, 19, 78]], ["C", [9.9, 68.9, 9.9, 54.6]], ["C", [9.9, 40.3, 19.1, 31.1]], ["C", [28.1, 21.9, 42.5, 21.9]], ["C", [56.9, 21.9, 66.1, 31.1]], ["M", [42.5, 17.9]], ["C", [26.3, 17.9, 16, 28.2]], ["C", [5.8, 38.4, 5.8, 54.6]], ["C", [5.8, 70.8, 16.1, 81.1]], ["C", [26.3, 91.3, 42.5, 91.3]], ["C", [58.7, 91.3, 69, 81]], ["C", [79.3, 70.8, 79.3, 54.6]], ["C", [79.3, 38.4, 69, 28.1]], ["C", [58.6, 17.9, 42.5, 17.9]]];
__motifs["R"] = [["M", [30, 23.85]], ["C", [32.8, 24.7, 34.9, 26.35]], ["C", [37, 28, 38.2, 30.55]], ["C", [39.4, 33.1, 39.4, 36.5]], ["C", [39.4, 43.3, 35.45, 46.9]], ["C", [31.5, 50.5, 25.1, 50.5]], ["L", [11.6, 50.5]], ["L", [11.6, 23]], ["L", [24, 23]], ["C", [27.2, 23, 30, 23.85]], ["M", [43.6, 36.6]], ["C", [43.6, 32.3, 42.05, 29]], ["C", [40.5, 25.7, 37.9, 23.45]], ["C", [35.3, 21.2, 31.7, 20.05]], ["C", [28.1, 18.9, 24.1, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 54.6]], ["L", [19.3, 54.6]], ["L", [42, 90.3]], ["L", [46.8, 90.3]], ["L", [23.9, 54.6]], ["C", [28.2, 54.6, 31.8, 53.55]], ["C", [35.4, 52.5, 38.05, 50.3]], ["C", [40.7, 48.1, 42.15, 44.7]], ["C", [43.6, 41.3, 43.6, 36.6]]];
__motifs["S"] = [["M", [35.1, 24.7]], ["C", [37.9, 26.3, 39.9, 29.6]], ["L", [43.8, 27.9]], ["C", [38.6, 18.5, 26, 18.5]], ["C", [18.4, 18.5, 13.2, 23.1]], ["C", [7.9, 27.6, 7.9, 35]], ["C", [7.9, 42.4, 13.1, 46.9]], ["C", [16.2, 49.7, 24.7, 53.5]], ["C", [29.2, 55.5, 32.1, 57.1]], ["C", [35, 58.7, 36.4, 60]], ["C", [41.7, 64.7, 41.7, 71.8]], ["C", [41.7, 79.3, 37.2, 83.2]], ["C", [32.8, 87, 25.1, 87]], ["C", [11.6, 87, 8.1, 74.2]], ["L", [4, 75.6]], ["C", [8.7, 91.1, 25.1, 91.1]], ["C", [30.4, 91.1, 34.3, 89.7]], ["C", [45.8, 85.4, 45.8, 71.8]], ["C", [45.8, 63.3, 40, 57.6]], ["C", [37.9, 55.5, 34.5, 53.45]], ["C", [31.1, 51.4, 26.4, 49.3]], ["C", [18.9, 45.9, 16.4, 43.9]], ["C", [12, 40.1, 12, 35]], ["C", [12, 29.3, 16.2, 25.8]], ["C", [20.1, 22.5, 26, 22.5]], ["C", [31.6, 22.5, 35.1, 24.7]]];
__motifs["T"] = [["M", [40.2, 18.9]], ["L", [4.5, 18.9]], ["L", [4.5, 23]], ["L", [20.3, 23]], ["L", [20.3, 90.3]], ["L", [24.4, 90.3]], ["L", [24.4, 23]], ["L", [40.2, 23]], ["L", [40.2, 18.9]]];
__motifs["U"] = [["M", [44.9, 18.9]], ["L", [44.9, 72.5]], ["C", [44.9, 79.2, 39.8, 83.2]], ["C", [35.1, 86.9, 28.2, 86.9]], ["C", [21.2, 86.9, 16.6, 83.3]], ["C", [11.6, 79.4, 11.6, 72.5]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 72.5]], ["C", [7.6, 81.2, 13.7, 86.3]], ["C", [19.5, 91, 28.2, 91]], ["C", [37.2, 91, 42.7, 86.4]], ["C", [49, 81.2, 49, 72.5]], ["L", [49, 18.9]], ["L", [44.9, 18.9]]];
__motifs["V"] = [["M", [45.4, 18.9]], ["L", [26.6, 77.9]], ["L", [7.9, 18.9]], ["L", [3.7, 18.9]], ["L", [26.6, 91.5]], ["L", [49.7, 18.9]], ["L", [45.4, 18.9]]];
__motifs["W"] = [["M", [3.4, 18.9]], ["L", [26.3, 91.3]], ["L", [44.2, 31.4]], ["L", [62, 91.3]], ["L", [85.1, 18.9]], ["L", [80.9, 18.9]], ["L", [62.2, 77.3]], ["L", [44.2, 17.6]], ["L", [26.1, 77.3]], ["L", [7.4, 18.9]], ["L", [3.4, 18.9]]];
__motifs["X"] = [["M", [44.5, 18.9]], ["L", [26.8, 49.8]], ["L", [9.2, 18.9]], ["L", [4.5, 18.9]], ["L", [24.3, 53.4]], ["L", [3.3, 90.3]], ["L", [7.9, 90.3]], ["L", [26.7, 57.2]], ["L", [45.7, 90.3]], ["L", [50.4, 90.3]], ["L", [29.4, 53.7]], ["L", [49.2, 18.9]], ["L", [44.5, 18.9]]];
__motifs["Y"] = [["M", [43.4, 18.9]], ["L", [25.6, 49.8]], ["L", [8, 18.9]], ["L", [3.3, 18.9]], ["L", [23.6, 54.6]], ["L", [23.6, 90.3]], ["L", [27.7, 90.3]], ["L", [27.7, 54.6]], ["L", [48.1, 18.9]], ["L", [43.4, 18.9]]];
__motifs["Z"] = [["M", [6.3, 23.1]], ["L", [44.8, 23.1]], ["L", [3.9, 90.3]], ["L", [52, 90.3]], ["L", [52, 86.2]], ["L", [11.2, 86.2]], ["L", [52.2, 18.9]], ["L", [6.3, 18.9]], ["L", [6.3, 23.1]]];
}
private static function initializeWidthsPunctuation():void{
__widths[" "] = 26;
__widths["!"] = 20;
__widths["\""] = 27;
__widths["#"] = 54;
__widths["$"] = 47;
__widths["%"] = 53;
__widths["&"] = 60;
__widths["'"] = 16;
__widths["("] = 18;
__widths[")"] = 19;
__widths["*"] = 29;
__widths["+"] = 38;
__widths[","] = 18;
__widths["-"] = 27;
__widths["."] = 11;
__widths["/"] = 29;
__widths[":"] = 16;
__widths[";"] = 20;
__widths["<"] = 32;
__widths["="] = 30;
__widths[">"] = 32;
__widths["?"] = 47;
__widths["@"] = 60;
__widths["["] = 21;
__widths["\\"] = 28;
__widths["]"] = 21;
__widths["^"] = 35;
__widths["_"] = 36;
__widths["`"] = 33;
}
}
}//package org.papervision3d.typography.fonts
Section 144
//Font3D (org.papervision3d.typography.Font3D)
package org.papervision3d.typography {
public class Font3D {
public function get motifs():Object{
return (new Object());
}
public function get widths():Object{
return (new Object());
}
public function get height():Number{
return (-1);
}
}
}//package org.papervision3d.typography
Section 145
//Letter3D (org.papervision3d.typography.Letter3D)
package org.papervision3d.typography {
public interface Letter3D {
function get width():Number;
function get height():Number;
function set width(_arg1:Number):void;
function set height(_arg1:Number):void;
function get font():Font3D;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function set char(_arg1:String):void;
function set z(_arg1:Number):void;
function get char():String;
function get x():Number;
function get y():Number;
function get z():Number;
function set font(_arg1:Font3D):void;
}
}//package org.papervision3d.typography
Section 146
//Text3D (org.papervision3d.typography.Text3D)
package org.papervision3d.typography {
import org.papervision3d.core.proto.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.materials.special.*;
public class Text3D extends VectorShape3D {
private var _align:String;// = "center"
protected var _text:String;
public var letters:Array;
public var font:Font3D;
private var _letterSpacing:Number;// = 0
private var _lineHeight:Number;// = 0
private var _lineSpacing:Number;// = 0
public var lines:Array;
public function Text3D(_arg1:String, _arg2:Font3D, _arg3:MaterialObject3D, _arg4:String=null){
super(_arg3, null, _arg4);
this.material = _arg3;
this.font = _arg2;
_text = _arg1.replace(/\r/gi, "\n");
_lineHeight = (_arg2.height + _lineSpacing);
createLetters(_arg3);
alignLetters();
}
public function get align():String{
return (_align);
}
private function alignLetters():void{
var _local1:Letter3D;
var _local2:Letter3D;
var _local3:Array;
var _local5:Letter3D;
var _local6:Letter3D;
var _local7:Number;
var _local9:int;
var _local4:Number = 0;
var _local8:int;
while (_local8 < lines.length) {
_local3 = lines[_local8];
_local4 = (_local8 * -(_lineHeight));
_local5 = _local3[0];
_local6 = _local3[(_local3.length - 1)];
_local9 = 0;
while (_local9 < _local3.length) {
_local1 = _local3[_local9];
_local1.x = ((_local9 > 0)) ? ((_local2.x + ((_local2.width / 2) + (_local1.width / 2))) + _letterSpacing) : (_local1.width / 2);
_local1.y = _local4;
_local2 = _local1;
_local9++;
};
if ((((align == "center")) && (_local6))){
_local7 = ((_local6.x + (_local6.width / 2)) / 2);
_local9 = 0;
while (_local9 < _local3.length) {
DisplayObject3D(_local3[_local9]).x = (DisplayObject3D(_local3[_local9]).x - _local7);
_local9++;
};
};
if ((((align == "right")) && (_local6))){
_local7 = (_local6.x + (_local6.width / 2));
_local9 = 0;
while (_local9 < _local3.length) {
DisplayObject3D(_local3[_local9]).x = (DisplayObject3D(_local3[_local9]).x - _local7);
_local9++;
};
};
_local8++;
};
}
public function set align(_arg1:String):void{
_align = _arg1;
alignLetters();
}
public function set lineSpacing(_arg1:Number):void{
_lineSpacing = _arg1;
_lineHeight = (font.height + _arg1);
alignLetters();
}
private function removeLetters():void{
var _local1:DisplayObject3D;
for each (_local1 in letters) {
removeChild(_local1);
};
letters.length = 0;
lines.length = 0;
}
public function get text():String{
return (_text);
}
public function get lineSpacing():Number{
return (_lineSpacing);
}
protected function createLetters(_arg1:MaterialObject3D):void{
var _local2:String;
var _local4:VectorLetter3D;
var _local5:Array;
var _local7:int;
var _local8:String;
lines = [];
letters = [];
var _local3:Array = _text.split("\n");
var _local6:int;
while (_local6 < _local3.length) {
_local5 = new Array();
lines[_local6] = _local5;
_local2 = _local3[_local6];
_local7 = 0;
while (_local7 < _local2.length) {
_local8 = _local2.charAt(_local7);
_local4 = new VectorLetter3D(_local8, (_arg1 as Letter3DMaterial), font);
_local5.push(_local4);
if (_local8 != " "){
addChild(_local4);
};
letters.push(_local4);
_local7++;
};
_local6++;
};
}
public function set text(_arg1:String):void{
_text = _arg1.replace(/\r/gi, "\n");
removeLetters();
createLetters(Letter3DMaterial(material));
alignLetters();
}
public function set letterSpacing(_arg1:Number):void{
_letterSpacing = _arg1;
alignLetters();
}
public function get letterSpacing():Number{
return (_letterSpacing);
}
}
}//package org.papervision3d.typography
Section 147
//VectorLetter3D (org.papervision3d.typography.VectorLetter3D)
package org.papervision3d.typography {
import org.papervision3d.core.geom.renderables.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.materials.special.*;
public class VectorLetter3D extends VectorShape3D implements Letter3D {
private var _height:Number;
private var _width:Number;
private var _font:Font3D;
private var _char:String;
public function VectorLetter3D(_arg1:String, _arg2:Letter3DMaterial, _arg3:Font3D){
var _local4:Vertex3D;
this._char = _arg1;
this._font = _arg3;
super(_arg2, null);
getLetterFromFont();
for each (_local4 in geometry.vertices) {
_local4.x = (_local4.x - (_width / 2));
_local4.y = (_local4.y - (_height / 2));
_local4.y = (_local4.y * -1);
};
}
public function set height(_arg1:Number):void{
_height = _arg1;
}
public function get font():Font3D{
return (_font);
}
protected function getLetterFromFont():void{
_width = _font.widths[_char];
_height = _font.height;
createVertices(_font.motifs[_char]);
}
public function get char():String{
return (_char);
}
public function set width(_arg1:Number):void{
_width = _arg1;
}
protected function createVertices(_arg1:Array):void{
var _local2:int;
while (_local2 < _arg1.length) {
switch (_arg1[_local2][0]){
case "M":
graphics.moveTo(_arg1[_local2][1][0], _arg1[_local2][1][1]);
break;
case "L":
graphics.lineTo(_arg1[_local2][1][0], _arg1[_local2][1][1]);
break;
case "C":
graphics.curveTo(_arg1[_local2][1][0], _arg1[_local2][1][1], _arg1[_local2][1][2], _arg1[_local2][1][3]);
break;
};
_local2++;
};
}
public function get width():Number{
return (_width);
}
public function get height():Number{
return (_height);
}
public function set char(_arg1:String):void{
_char = _arg1;
}
public function set font(_arg1:Font3D):void{
_font = _arg1;
}
}
}//package org.papervision3d.typography
Section 148
//ViewportLayerSortMode (org.papervision3d.view.layer.util.ViewportLayerSortMode)
package org.papervision3d.view.layer.util {
public class ViewportLayerSortMode {
public static var Z_SORT:String = "z";
public static var ORIGIN_SORT:String = "origin";
public static var NONE:String = "none";
public static var INDEX_SORT:String = "index";
}
}//package org.papervision3d.view.layer.util
Section 149
//ViewportBaseLayer (org.papervision3d.view.layer.ViewportBaseLayer)
package org.papervision3d.view.layer {
import org.papervision3d.view.*;
import org.papervision3d.objects.*;
public class ViewportBaseLayer extends ViewportLayer {
public function ViewportBaseLayer(_arg1:Viewport3D){
super(_arg1, null);
}
override public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=false):ViewportLayer{
if (layers[_arg1]){
return (layers[_arg1]);
};
if (((_arg2) || (_arg1.useOwnContainer))){
return (getChildLayerFor(_arg1, _arg3));
};
return (this);
}
override public function updateBeforeRender():void{
clear();
var _local1:int = (childLayers.length - 1);
while (_local1 >= 0) {
if (childLayers[_local1].dynamicLayer){
removeLayerAt(_local1);
};
_local1--;
};
super.updateBeforeRender();
}
}
}//package org.papervision3d.view.layer
Section 150
//ViewportLayer (org.papervision3d.view.layer.ViewportLayer)
package org.papervision3d.view.layer {
import org.papervision3d.view.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
import org.papervision3d.view.layer.util.*;
public class ViewportLayer extends Sprite {
public var layerIndex:Number;
public var layers:Dictionary;
public var childLayers:Array;
public var weight:Number;// = 0
public var dynamicLayer:Boolean;// = false
public var forceDepth:Boolean;// = false
public var displayObject3D:DisplayObject3D;
public var sortMode:String;
protected var viewport:Viewport3D;
public var displayObjects:Dictionary;
public var graphicsChannel:Graphics;
public var originDepth:Number;// = 0
public var screenDepth:Number;// = 0
public function ViewportLayer(_arg1:Viewport3D, _arg2:DisplayObject3D, _arg3:Boolean=false){
layers = new Dictionary(true);
displayObjects = new Dictionary(true);
sortMode = ViewportLayerSortMode.Z_SORT;
super();
this.viewport = _arg1;
this.displayObject3D = _arg2;
this.dynamicLayer = _arg3;
this.graphicsChannel = this.graphics;
if (_arg3){
this.filters = _arg2.filters;
this.blendMode = _arg2.blendMode;
this.alpha = _arg2.alpha;
};
if (_arg2){
addDisplayObject3D(_arg2);
_arg2.container = this;
};
init();
}
public function removeLayerAt(_arg1:Number):void{
var _local2:DisplayObject3D;
for each (_local2 in childLayers[_arg1].displayObjects) {
unlinkChild(_local2);
};
removeChild(childLayers[_arg1]);
childLayers.splice(_arg1, 1);
}
private function onChildAdded(_arg1:ViewportLayerEvent):void{
if (_arg1.do3d){
linkChild(_arg1.do3d, _arg1.layer, _arg1);
};
}
public function addLayer(_arg1:ViewportLayer):void{
var _local2:DisplayObject3D;
var _local3:ViewportLayer;
if (childLayers.indexOf(_arg1) != -1){
PaperLogger.warning("Child layer already exists in ViewportLayer");
return;
};
childLayers.push(_arg1);
addChild(_arg1);
_arg1.addEventListener(ViewportLayerEvent.CHILD_ADDED, onChildAdded);
_arg1.addEventListener(ViewportLayerEvent.CHILD_REMOVED, onChildRemoved);
for each (_local2 in _arg1.displayObjects) {
linkChild(_local2, _arg1);
};
for each (_local3 in _arg1.layers) {
for each (_local2 in _local3.displayObjects) {
linkChild(_local2, _local3);
};
};
}
protected function getChildLayerFor(_arg1:DisplayObject3D, _arg2:Boolean=false):ViewportLayer{
var _local3:ViewportLayer;
if (_arg1){
_local3 = new ViewportLayer(viewport, _arg1, _arg1.useOwnContainer);
addLayer(_local3);
if (_arg2){
_arg1.addChildrenToLayer(_arg1, _local3);
};
return (_local3);
} else {
PaperLogger.warning("Needs to be a do3d");
};
return (null);
}
public function updateAfterRender():void{
var _local1:ViewportLayer;
for each (_local1 in childLayers) {
_local1.updateAfterRender();
};
}
protected function init():void{
childLayers = new Array();
}
public function clear():void{
graphicsChannel.clear();
reset();
}
public function childLayerIndex(_arg1:DisplayObject3D):Number{
_arg1 = (_arg1.parentContainer) ? _arg1.parentContainer : _arg1;
var _local2:int;
while (_local2 < childLayers.length) {
if (childLayers[_local2].hasDisplayObject3D(_arg1)){
return (_local2);
};
_local2++;
};
return (-1);
}
protected function reset():void{
if (!forceDepth){
screenDepth = 0;
originDepth = 0;
};
this.weight = 0;
}
public function updateInfo():void{
var _local1:ViewportLayer;
for each (_local1 in childLayers) {
_local1.updateInfo();
if (!forceDepth){
if (!isNaN(_local1.screenDepth)){
this.weight = (this.weight + _local1.weight);
this.screenDepth = (this.screenDepth + (_local1.screenDepth * _local1.weight));
this.originDepth = (this.originDepth + (_local1.originDepth * _local1.weight));
};
};
};
if (!forceDepth){
this.screenDepth = (this.screenDepth / this.weight);
this.originDepth = (this.originDepth / this.weight);
};
}
public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=false):ViewportLayer{
_arg1 = (_arg1.parentContainer) ? _arg1.parentContainer : _arg1;
if (layers[_arg1]){
return (layers[_arg1]);
};
if (_arg2){
return (getChildLayerFor(_arg1, _arg3));
};
return (null);
}
protected function orderLayers():void{
var _local2:ViewportLayer;
if (sortMode == ViewportLayerSortMode.NONE){
return;
};
var _local1:int;
while (_local1 < childLayers.length) {
_local2 = childLayers[_local1];
if (this.getChildIndex(_local2) != _local1){
this.setChildIndex(_local2, _local1);
};
_local2.sortChildLayers();
_local1++;
};
}
public function updateBeforeRender():void{
var _local1:ViewportLayer;
clear();
for each (_local1 in childLayers) {
_local1.updateBeforeRender();
};
}
public function hasDisplayObject3D(_arg1:DisplayObject3D):Boolean{
return (!((displayObjects[_arg1] == null)));
}
public function sortChildLayers():void{
switch (sortMode){
case ViewportLayerSortMode.Z_SORT:
childLayers.sortOn("screenDepth", (Array.DESCENDING | Array.NUMERIC));
break;
case ViewportLayerSortMode.INDEX_SORT:
childLayers.sortOn("layerIndex", Array.NUMERIC);
break;
case ViewportLayerSortMode.ORIGIN_SORT:
childLayers.sortOn(["originDepth", "screenDepth"], [(Array.DESCENDING | Array.NUMERIC), (Array.DESCENDING | Array.NUMERIC)]);
break;
};
orderLayers();
}
private function onChildRemoved(_arg1:ViewportLayerEvent):void{
if (_arg1.do3d){
unlinkChild(_arg1.do3d, _arg1);
};
}
public function removeAllLayers():void{
var _local1:int = (childLayers.length - 1);
while (_local1 >= 0) {
removeLayerAt(_local1);
_local1--;
};
}
public function processRenderItem(_arg1:RenderableListItem):void{
if (!forceDepth){
if (!isNaN(_arg1.screenZ)){
this.screenDepth = (this.screenDepth + _arg1.screenZ);
if (_arg1.instance){
this.originDepth = (this.originDepth + _arg1.instance.world.n34);
this.originDepth = (this.originDepth + _arg1.instance.screen.z);
};
this.weight++;
};
};
}
public function removeLayer(_arg1:ViewportLayer):void{
var _local2:int = getChildIndex(_arg1);
if (_local2 > -1){
removeLayerAt(_local2);
} else {
PaperLogger.error("Layer not found for removal.");
};
}
private function linkChild(_arg1:DisplayObject3D, _arg2:ViewportLayer, _arg3:ViewportLayerEvent=null):void{
layers[_arg1] = _arg2;
dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_ADDED, _arg1, _arg2));
}
public function addDisplayObject3D(_arg1:DisplayObject3D, _arg2:Boolean=false):void{
if (!_arg1){
return;
};
displayObjects[_arg1] = _arg1;
dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_ADDED, _arg1, this));
if (_arg2){
_arg1.addChildrenToLayer(_arg1, this);
};
}
public function removeDisplayObject3D(_arg1:DisplayObject3D):void{
var _local2:DisplayObject3D;
displayObjects[_arg1] = null;
for each (_local2 in _arg1) {
removeDisplayObject3D(_local2);
};
dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_REMOVED, _arg1, this));
}
private function unlinkChild(_arg1:DisplayObject3D, _arg2:ViewportLayerEvent=null):void{
layers[_arg1] = null;
dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_REMOVED, _arg1));
}
public function getLayerObjects(_arg1:Array=null):Array{
var _local2:DisplayObject3D;
var _local3:ViewportLayer;
if (!_arg1){
_arg1 = new Array();
};
for each (_local2 in this.displayObjects) {
if (_local2){
_arg1.push(_local2);
};
};
for each (_local3 in childLayers) {
_local3.getLayerObjects(_arg1);
};
return (_arg1);
}
}
}//package org.papervision3d.view.layer
Section 151
//ViewportLayerEvent (org.papervision3d.view.layer.ViewportLayerEvent)
package org.papervision3d.view.layer {
import org.papervision3d.objects.*;
import flash.events.*;
public class ViewportLayerEvent extends Event {
public var layer:ViewportLayer;
public var do3d:DisplayObject3D;
public static const CHILD_REMOVED:String = "childRemoved";
public static const CHILD_ADDED:String = "childAdded";
public function ViewportLayerEvent(_arg1:String, _arg2:DisplayObject3D=null, _arg3:ViewportLayer=null){
super(_arg1, false, false);
this.do3d = _arg2;
this.layer = _arg3;
}
}
}//package org.papervision3d.view.layer
Section 152
//AbstractView (org.papervision3d.view.AbstractView)
package org.papervision3d.view {
import org.papervision3d.core.proto.*;
import flash.display.*;
import flash.events.*;
import org.papervision3d.core.view.*;
import org.papervision3d.render.*;
import org.papervision3d.scenes.*;
public class AbstractView extends Sprite implements IView {
public var renderer:BasicRenderEngine;
protected var _camera:CameraObject3D;
protected var _width:Number;
public var scene:Scene3D;
protected var _height:Number;
public var viewport:Viewport3D;
public function set viewportWidth(_arg1:Number):void{
_width = _arg1;
viewport.width = _arg1;
}
public function singleRender():void{
onRenderTick();
}
public function startRendering():void{
addEventListener(Event.ENTER_FRAME, onRenderTick);
viewport.containerSprite.cacheAsBitmap = false;
}
public function get viewportWidth():Number{
return (_width);
}
protected function onRenderTick(_arg1:Event=null):void{
renderer.renderScene(scene, _camera, viewport);
}
public function set viewportHeight(_arg1:Number):void{
_height = _arg1;
viewport.height = _arg1;
}
public function get camera():CameraObject3D{
return (_camera);
}
public function get viewportHeight():Number{
return (_height);
}
public function stopRendering(_arg1:Boolean=false, _arg2:Boolean=false):void{
removeEventListener(Event.ENTER_FRAME, onRenderTick);
if (_arg1){
onRenderTick();
};
if (_arg2){
viewport.containerSprite.cacheAsBitmap = true;
} else {
viewport.containerSprite.cacheAsBitmap = false;
};
}
}
}//package org.papervision3d.view
Section 153
//BasicView (org.papervision3d.view.BasicView)
package org.papervision3d.view {
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.core.view.*;
import org.papervision3d.render.*;
import org.papervision3d.scenes.*;
public class BasicView extends AbstractView implements IView {
public function BasicView(_arg1:Number=640, _arg2:Number=480, _arg3:Boolean=true, _arg4:Boolean=false, _arg5:String="Target"){
scene = new Scene3D();
viewport = new Viewport3D(_arg1, _arg2, _arg3, _arg4);
addChild(viewport);
renderer = new BasicRenderEngine();
switch (_arg5){
case CameraType.DEBUG:
_camera = new DebugCamera3D(viewport);
break;
case CameraType.TARGET:
_camera = new Camera3D(60);
_camera.target = DisplayObject3D.ZERO;
break;
case CameraType.SPRING:
_camera = new SpringCamera3D();
_camera.target = DisplayObject3D.ZERO;
break;
case CameraType.FREE:
default:
_camera = new Camera3D(60);
break;
};
cameraAsCamera3D.update(viewport.sizeRectangle);
}
public function get cameraAsDebugCamera3D():DebugCamera3D{
return ((_camera as DebugCamera3D));
}
public function get cameraAsCamera3D():Camera3D{
return ((_camera as Camera3D));
}
}
}//package org.papervision3d.view
Section 154
//Viewport3D (org.papervision3d.view.Viewport3D)
package org.papervision3d.view {
import org.papervision3d.core.render.data.*;
import org.papervision3d.core.render.command.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.core.geom.renderables.*;
import flash.events.*;
import org.papervision3d.view.layer.*;
import org.papervision3d.core.log.*;
import flash.utils.*;
import org.papervision3d.core.culling.*;
import org.papervision3d.core.view.*;
import org.papervision3d.core.render.*;
import org.papervision3d.core.utils.*;
public class Viewport3D extends Sprite implements IViewport3D {
public var interactiveSceneManager:InteractiveSceneManager;
public var lastRenderList:Array;
public var cullingRectangle:Rectangle;
protected var _interactive:Boolean;
private var stageScaleModeSet:Boolean;// = false
protected var _autoCulling:Boolean;
protected var _viewportObjectFilter:ViewportObjectFilter;
public var particleCuller:IParticleCuller;
protected var _height:Number;
protected var _width:Number;
public var lineCuller:ILineCuller;
protected var _layerInstances:Dictionary;
protected var _autoScaleToStage:Boolean;
public var triangleCuller:ITriangleCuller;
protected var _lastRenderer:IRenderEngine;
protected var _hWidth:Number;
protected var _containerSprite:ViewportBaseLayer;
protected var _hHeight:Number;
public var sizeRectangle:Rectangle;
protected var renderHitData:RenderHitData;
protected var _autoClipping:Boolean;
public function Viewport3D(_arg1:Number=640, _arg2:Number=480, _arg3:Boolean=false, _arg4:Boolean=false, _arg5:Boolean=true, _arg6:Boolean=true){
init();
this.interactive = _arg4;
this.viewportWidth = _arg1;
this.viewportHeight = _arg2;
this.autoClipping = _arg5;
this.autoCulling = _arg6;
this.autoScaleToStage = _arg3;
this._layerInstances = new Dictionary(true);
}
public function set viewportWidth(_arg1:Number):void{
_width = _arg1;
_hWidth = (_arg1 / 2);
containerSprite.x = _hWidth;
cullingRectangle.x = -(_hWidth);
cullingRectangle.width = _arg1;
sizeRectangle.width = _arg1;
if (_autoClipping){
scrollRect = sizeRectangle;
};
}
public function get autoCulling():Boolean{
return (_autoCulling);
}
protected function onStageResize(_arg1:Event=null):void{
if (_autoScaleToStage){
viewportWidth = stage.stageWidth;
viewportHeight = stage.stageHeight;
};
}
public function set autoCulling(_arg1:Boolean):void{
if (_arg1){
triangleCuller = new RectangleTriangleCuller(cullingRectangle);
particleCuller = new RectangleParticleCuller(cullingRectangle);
lineCuller = new RectangleLineCuller(cullingRectangle);
} else {
if (!_arg1){
triangleCuller = new DefaultTriangleCuller();
particleCuller = new DefaultParticleCuller();
lineCuller = new DefaultLineCuller();
};
};
_autoCulling = _arg1;
}
public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=true):ViewportLayer{
return (containerSprite.getChildLayer(_arg1, _arg2, _arg3));
}
protected function init():void{
this.renderHitData = new RenderHitData();
lastRenderList = new Array();
sizeRectangle = new Rectangle();
cullingRectangle = new Rectangle();
_containerSprite = new ViewportBaseLayer(this);
_containerSprite.doubleClickEnabled = true;
addChild(_containerSprite);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
}
public function get autoClipping():Boolean{
return (_autoClipping);
}
public function updateAfterRender(_arg1:RenderSessionData):void{
var _local2:ViewportLayer;
if (interactive){
interactiveSceneManager.updateAfterRender();
};
if (_arg1.renderLayers){
for each (_local2 in _arg1.renderLayers) {
_local2.updateInfo();
_local2.sortChildLayers();
_local2.updateAfterRender();
};
} else {
containerSprite.updateInfo();
containerSprite.updateAfterRender();
};
containerSprite.sortChildLayers();
}
protected function onAddedToStage(_arg1:Event):void{
if (_autoScaleToStage){
setStageScaleMode();
};
stage.addEventListener(Event.RESIZE, onStageResize);
onStageResize();
}
public function get containerSprite():ViewportLayer{
return (_containerSprite);
}
public function set autoClipping(_arg1:Boolean):void{
if (_arg1){
scrollRect = sizeRectangle;
} else {
scrollRect = null;
};
_autoClipping = _arg1;
}
protected function setStageScaleMode():void{
if (!stageScaleModeSet){
PaperLogger.info("Viewport autoScaleToStage : Papervision has changed the Stage scale mode.");
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stageScaleModeSet = true;
};
}
public function accessLayerFor(_arg1:RenderableListItem, _arg2:Boolean=false):ViewportLayer{
var _local3:DisplayObject3D;
if (_arg1.renderableInstance){
_local3 = _arg1.renderableInstance.instance;
_local3 = (_local3.parentContainer) ? _local3.parentContainer : _local3;
if (containerSprite.layers[_local3]){
if (_arg2){
_local3.container = containerSprite.layers[_local3];
};
return (containerSprite.layers[_local3]);
} else {
if (_local3.useOwnContainer){
return (containerSprite.getChildLayer(_local3, true, true));
};
};
};
return (containerSprite);
}
public function get viewportWidth():Number{
return (_width);
}
public function set interactive(_arg1:Boolean):void{
if (_arg1 != _interactive){
if (((_interactive) && (interactiveSceneManager))){
interactiveSceneManager.destroy();
interactiveSceneManager = null;
};
_interactive = _arg1;
if (_arg1){
interactiveSceneManager = new InteractiveSceneManager(this);
};
};
}
public function set viewportObjectFilter(_arg1:ViewportObjectFilter):void{
_viewportObjectFilter = _arg1;
}
public function set autoScaleToStage(_arg1:Boolean):void{
_autoScaleToStage = _arg1;
if (((_arg1) && (!((stage == null))))){
setStageScaleMode();
onStageResize();
};
}
public function set viewportHeight(_arg1:Number):void{
_height = _arg1;
_hHeight = (_arg1 / 2);
containerSprite.y = _hHeight;
cullingRectangle.y = -(_hHeight);
cullingRectangle.height = _arg1;
sizeRectangle.height = _arg1;
if (_autoClipping){
scrollRect = sizeRectangle;
};
}
public function updateBeforeRender(_arg1:RenderSessionData):void{
var _local2:ViewportLayer;
lastRenderList.length = 0;
if (_arg1.renderLayers){
for each (_local2 in _arg1.renderLayers) {
_local2.updateBeforeRender();
};
} else {
_containerSprite.updateBeforeRender();
};
_layerInstances = new Dictionary(true);
}
public function hitTestMouse():RenderHitData{
var _local1:Point = new Point(containerSprite.mouseX, containerSprite.mouseY);
return (hitTestPoint2D(_local1));
}
public function get interactive():Boolean{
return (_interactive);
}
public function get autoScaleToStage():Boolean{
return (_autoScaleToStage);
}
public function hitTestPointObject(_arg1:Point, _arg2:DisplayObject3D):RenderHitData{
var _local3:RenderableListItem;
var _local4:RenderHitData;
var _local5:IRenderListItem;
var _local6:uint;
if (interactive){
_local4 = new RenderHitData();
_local6 = lastRenderList.length;
while ((_local5 = lastRenderList[--_local6])) {
if ((_local5 is RenderableListItem)){
_local3 = (_local5 as RenderableListItem);
if ((_local3.renderableInstance is Triangle3D)){
if (Triangle3D(_local3.renderableInstance).instance != _arg2){
continue;
};
} else {
continue;
};
_local4 = _local3.hitTestPoint2D(_arg1, _local4);
if (_local4.hasHit){
return (_local4);
};
};
};
};
return (new RenderHitData());
}
public function hitTestPoint2D(_arg1:Point):RenderHitData{
var _local2:RenderableListItem;
var _local3:RenderHitData;
var _local4:IRenderListItem;
var _local5:uint;
renderHitData.clear();
if (interactive){
_local3 = renderHitData;
_local5 = lastRenderList.length;
while ((_local4 = lastRenderList[--_local5])) {
if ((_local4 is RenderableListItem)){
_local2 = (_local4 as RenderableListItem);
_local3 = _local2.hitTestPoint2D(_arg1, _local3);
if (_local3.hasHit){
return (_local3);
};
};
};
};
return (renderHitData);
}
protected function onRemovedFromStage(_arg1:Event):void{
stage.removeEventListener(Event.RESIZE, onStageResize);
}
public function get viewportHeight():Number{
return (_height);
}
public function destroy():void{
if (interactiveSceneManager){
interactiveSceneManager.destroy();
interactiveSceneManager = null;
};
lastRenderList = null;
}
public function get viewportObjectFilter():ViewportObjectFilter{
return (_viewportObjectFilter);
}
}
}//package org.papervision3d.view
Section 155
//Papervision3D (org.papervision3d.Papervision3D)
package org.papervision3d {
import org.papervision3d.core.log.*;
public class Papervision3D {
public static var useDEGREES:Boolean = true;
public static var useRIGHTHANDED:Boolean = false;
public static var PAPERLOGGER:PaperLogger = PaperLogger.getInstance();
public static var NAME:String = "Papervision3D";
public static var DATE:String = "March 12th, 2009";
public static var AUTHOR:String = "(c) 2006-2008 Copyright by Carlos Ulloa | John Grden | Ralph Hauwert | Tim Knip | Andy Zupko";
public static var VERSION:String = "2.0.0";
public static var usePERCENT:Boolean = false;
}
}//package org.papervision3d
Section 156
//sound2 (sound2)
package {
import flash.media.*;
public dynamic class sound2 extends Sound {
}
}//package
Section 157
//sound3 (sound3)
package {
import flash.media.*;
public dynamic class sound3 extends Sound {
}
}//package
Section 158
//testClass (testClass)
package {
import org.papervision3d.materials.utils.*;
import org.papervision3d.view.*;
import flash.display.*;
import flash.geom.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.typography.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shaders.*;
import flash.events.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.cameras.*;
import org.papervision3d.core.clipping.*;
import org.papervision3d.events.*;
import org.papervision3d.typography.fonts.*;
import org.papervision3d.core.utils.*;
import flash.media.*;
import org.papervision3d.render.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.scenes.*;
import org.papervision3d.lights.*;
import flash.text.*;
import org.ascollada.*;
import flash.net.*;
public class testClass extends BasicView {
var map_20:Array;
public var txts:MovieClip;
var map_24:Array;
var cmap_12:Array;
var map_21:Array;
var map_22:Array;
var map_23:Array;
var map_0:Array;
var map_1:Array;
var map_2:Array;
var map_3:Array;
var map_4:Array;
var map_5:Array;
var map_6:Array;
var map_7:Array;
var map_8:Array;
var map_9:Array;
var cmap_13:Array;
var cmap_14:Array;
var cmap_16:Array;
var cmap_18:Array;
var cmap_10:Array;
var cmap_22:Array;
var cmap_17:Array;
var cmap_24:Array;
var map_25:Array;
var cmap_21:Array;
var cmap_25:Array;
var acti:uint;// = 0
var cmap_19:Array;
var cmap_20:Array;
var s1:sound3;
var s2:sound2;
var cmap_15:Array;
var cmap_23:Array;
var cmap_11:Array;
var map2:Array;
var sc:SoundChannel;
var rs:Number;// = 1.5
var C:Number;// = 0.0174532925199433
var st:SoundTransform;
var d:Number;// = 0
var clrs:Array;
var rtn:Number;// = 0
var n:uint;// = 0
var cs:Array;
var tm:testModel;
var ts:Array;
var invt:uint;// = 0
var fgrscl;// = 8.5
var onStair:Boolean;// = false
public var bobby:MovieClip;
var tm2:Letter3DMaterial;
var tm3:Letter3DMaterial;
var xd:Number;// = 0
var curMap:uint;// = 0
var yd:Number;// = 0
var onceOff:Boolean;// = false
var txColor:ColorTransform;
var k_keys:Array;
public var btn1:SimpleButton;
public var btn2:SimpleButton;
public var btn3:SimpleButton;
var textMaterial:Letter3DMaterial;
var cmap_0:Array;
var cmap_1:Array;
var cmap_2:Array;
var cmap_3:Array;
var cmap_4:Array;
var cmap_5:Array;
var cmap_6:Array;
var cmap_7:Array;
var cmap_8:Array;
var cmap_9:Array;
var planeMaterial:ColorMaterial;
var dist:uint;// = 15
var spd:uint;// = 7
var cs2:Array;
var cs3:Array;
var pm2:ColorMaterial;
var pm3:ColorMaterial;
var temp;
var map_10:Array;
public var vgt:MovieClip;
var map_12:Array;
var map_13:Array;
var map_14:Array;
var map_15:Array;
var map_16:Array;
var map_17:Array;
var map_11:Array;
var map_19:Array;
var map_18:Array;
public function testClass(){
var _local4:uint;
var _local14:Cube;
var _local15:Cube;
var _local16:testModel;
var _local17:Plane;
var _local18:Plane;
cs = new Array();
cs2 = new Array();
cs3 = new Array();
ts = new Array();
map2 = new Array();
map_0 = new Array();
map_1 = new Array();
map_2 = new Array();
map_3 = new Array();
map_4 = new Array();
map_5 = new Array();
map_6 = new Array();
map_7 = new Array();
map_8 = new Array();
map_9 = new Array();
map_10 = new Array();
map_11 = new Array();
map_12 = new Array();
map_13 = new Array();
map_14 = new Array();
map_15 = new Array();
map_16 = new Array();
map_17 = new Array();
map_18 = new Array();
map_19 = new Array();
map_20 = new Array();
map_21 = new Array();
map_22 = new Array();
map_23 = new Array();
map_24 = new Array();
map_25 = new Array();
cmap_0 = new Array();
cmap_1 = new Array();
cmap_2 = new Array();
cmap_3 = new Array();
cmap_4 = new Array();
cmap_5 = new Array();
cmap_6 = new Array();
cmap_7 = new Array();
cmap_8 = new Array();
cmap_9 = new Array();
cmap_10 = new Array();
cmap_11 = new Array();
cmap_12 = new Array();
cmap_13 = new Array();
cmap_14 = new Array();
cmap_15 = new Array();
cmap_16 = new Array();
cmap_17 = new Array();
cmap_18 = new Array();
cmap_19 = new Array();
cmap_20 = new Array();
cmap_21 = new Array();
cmap_22 = new Array();
cmap_23 = new Array();
cmap_24 = new Array();
cmap_25 = new Array();
s1 = new sound3();
s2 = new sound2();
clrs = [16446238, 16691745, 16748831, 16672023];
k_keys = new Array();
txColor = new ColorTransform();
super();
sc = s1.play(0, 1000);
st = sc.soundTransform;
map_0 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 4, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 0, 2, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 0, 0, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_2 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 7, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_3 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 6, 0, 5, 0, 5, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 5, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 5, 0, 5, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 5, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 5, 0, 5, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 5, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 2, 2, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 2, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 7, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_4 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 7, 0, 5, 5, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 5, 2, 2, 2, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 5, 5, 5, 2, 2, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 2, 0], [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 5, 5, 5, 2, 2, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 6, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_5 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 6, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 7, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 0, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 4, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_6 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 0, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 2, 0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 0, 0, 2, 6, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_7 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 2, 2, 5, 9, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_8 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 8, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 5, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 4, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_9 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 7, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 0, 7, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 0], [7, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_10 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 7, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 7, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 6, 0], [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_11 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 2, 0], [0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 5, 1, 2, 0], [0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 7, 5, 2, 2, 2, 2, 2, 1, 1, 5, 5, 1, 2, 0], [0, 0, 2, 5, 4, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 2, 0], [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 5, 7, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_12 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 13, 11, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0], [0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 8, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0], [0, 0, 2, 5, 0, 0, 0, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 2, 0], [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 5, 8, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_13 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 6, 2, 6, 2, 11, 2, 6, 2, 6, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 5, 2, 6, 2, 6, 2, 6, 2, 6, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_14 = [[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 2, 5, 9, 5, 9, 5, 2, 0], [0, 2, 5, 2, 0, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 2, 5, 2, 2, 2, 5, 2, 0], [0, 2, 10, 5, 5, 5, 10, 2, 0], [0, 2, 2, 2, 5, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]];
map_15 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 2, 2, 2, 2, 0], [0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 2, 5, 2, 0, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 2, 5, 2, 7, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_16 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_17 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_18 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_19 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_20 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_21 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_22 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_23 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_24 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 9, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 2, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
map_25 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
_local4 = 0;
while (_local4 < 26) {
root[("cmap_" + _local4)] = compressMap(root[("map_" + _local4)]);
_local4++;
};
planeMaterial = new ColorMaterial(10348771);
planeMaterial.doubleSided = true;
pm2 = new ColorMaterial(3221286);
pm2.doubleSided = true;
pm3 = new ColorMaterial(16709095);
pm3.doubleSided = true;
var _local1:MaterialsList = new MaterialsList();
_local1.addMaterial(planeMaterial, "front");
_local1.addMaterial(planeMaterial, "back");
_local1.addMaterial(planeMaterial, "left");
_local1.addMaterial(planeMaterial, "right");
_local1.addMaterial(planeMaterial, "top");
_local1.addMaterial(planeMaterial, "bottom");
var _local2:MaterialsList = new MaterialsList();
_local2.addMaterial(pm2, "front");
_local2.addMaterial(pm2, "back");
_local2.addMaterial(pm2, "left");
_local2.addMaterial(pm2, "right");
_local2.addMaterial(pm2, "top");
_local2.addMaterial(pm2, "bottom");
var _local3:MaterialsList = new MaterialsList();
_local3.addMaterial(pm3, "front");
_local3.addMaterial(pm3, "back");
_local3.addMaterial(pm3, "left");
_local3.addMaterial(pm3, "right");
_local3.addMaterial(pm3, "top");
_local3.addMaterial(pm3, "bottom");
camera.target = null;
camera.useCulling = false;
renderer.clipping = new FrustumClipping(FrustumClipping.NEAR);
startRendering();
addEventListener(Event.ENTER_FRAME, ef);
_local4 = 0;
var _local5:uint;
_local4 = 0;
while (_local4 < map_0.length) {
map2.push(map_0[_local4]);
_local5 = 0;
while (_local5 < map_0[_local4].length) {
if (map_0[_local4][_local5] == 1){
_local14 = new Cube(_local1, 100, 100, 100);
_local14.x = ((_local5 * 100) + 50);
_local14.z = ((_local4 * 100) + 50);
cs.push(_local14);
scene.addChild(_local14);
} else {
if (map_0[_local4][_local5] == 2){
_local15 = new Cube(_local2, 100, 100, 100);
_local15.x = ((_local5 * 100) + 50);
_local15.z = ((_local4 * 100) + 50);
cs.push(_local15);
scene.addChild(_local15);
} else {
if (map_0[_local4][_local5] == 3){
map_0[_local4][_local5] = 0;
camera.x = ((_local5 * 100) + 50);
camera.z = ((_local4 * 100) + 50);
} else {
if (map_0[_local4][_local5] == 4){
_local16 = new testModel(pm3, curMap);
_local16.x = ((_local5 * 100) + 50);
_local16.z = ((_local4 * 100) + 50);
_local16.scale = fgrscl;
cs2.push(_local16);
scene.addChild(_local16);
} else {
if (map_0[_local4][_local5] == 5){
_local17 = new Plane(planeMaterial, 100, 100);
_local17.x = ((_local5 * 100) + 50);
_local17.z = ((_local4 * 100) + 50);
_local17.y = -50;
_local17.rotationX = 90;
cs.push(_local17);
scene.addChild(_local17);
_local18 = new Plane(planeMaterial, 100, 100);
_local18.x = ((_local5 * 100) + 50);
_local18.z = ((_local4 * 100) + 50);
_local18.y = 50;
_local18.rotationX = 90;
cs.push(_local18);
scene.addChild(_local18);
};
};
};
};
};
_local5++;
};
_local4++;
};
camera.x = -257;
camera.z = 1425;
camera.rotationY = 64;
addChild(txts);
addChild(vgt);
addChild(btn1);
addChild(btn2);
addChild(bobby);
root.scaleX = -1;
root.x = 550;
textMaterial = new Letter3DMaterial(10348771);
textMaterial.doubleSided = true;
tm2 = new Letter3DMaterial(10348771);
tm2.doubleSided = true;
tm3 = new Letter3DMaterial(3221286);
tm3.doubleSided = true;
var _local6:Font3D = new AlteHaasGrotesk();
var _local7:Text3D = new Text3D("FEIGN:", _local6, textMaterial);
_local7.rotationY = (180 + 64);
_local7.x = -50;
_local7.z = 1508;
_local7.y = 113;
scene.addChild(_local7);
ts.push(_local7);
var _local8:Font3D = new GeosansLight();
var _local9:Text3D = new Text3D("GAME BY IAN SNYDER // MUSIC BY BROTHER ANDROID", _local8, textMaterial);
_local9.rotationY = (180 + 64);
_local9.x = 1531;
_local9.z = 2017;
_local9.y = 387;
scene.addChild(_local9);
ts.push(_local9);
var _local10:Font3D = new AlteHaasGrotesk();
var _local11:Text3D = new Text3D("COLLECT NINE BODIES", _local10, tm3);
_local11.scale = 0.265;
_local11.rotationY = (180 + 64);
_local11.x = -85;
_local11.z = 1513;
_local11.y = -73;
scene.addChild(_local11);
ts.push(_local11);
var _local12:Font3D = new GeosansLight();
var _local13:Text3D = new Text3D("USE ARROW KEYS AND A / D TO MOVE", _local12, tm3);
_local13.rotationY = (180 + 64);
_local13.scale = 0.5;
_local13.x = 427;
_local13.z = 2061;
_local13.y = -350;
scene.addChild(_local13);
ts.push(_local13);
camera.y = 23;
btn1.alpha = (btn2.alpha = (btn3.alpha = 0));
addChild(btn1);
addChild(btn2);
addChild(btn3);
btn3.addEventListener(MouseEvent.CLICK, testF);
btn1.addEventListener(MouseEvent.CLICK, mySite);
btn2.addEventListener(MouseEvent.CLICK, BRO);
btn3.addEventListener(MouseEvent.ROLL_OVER, dark);
btn3.addEventListener(MouseEvent.ROLL_OUT, light);
}
public function keyUpListener(_arg1:KeyboardEvent):void{
var _local2:uint;
while (_local2 < k_keys.length) {
if (k_keys[_local2] == _arg1.keyCode){
k_keys.splice(_local2, 1);
break;
};
_local2++;
};
}
public function room14():void{
makeTile(5, 5, -93);
makeTile(5, 6, -93);
makeTile(5, 7, -93);
makeTile(5, 8, -93);
makeTile(5, 9, -93);
makeTile(5, 5, -94);
makeTile(5, 9, -94);
makeTile(5, 5, -95);
makeTile(5, 9, -95);
makeTile(5, 5, -96);
makeTile(5, 9, -96);
makeTile(5, 5, -97);
makeTile(5, 6, -97);
makeTile(5, 7, -97);
makeTile(5, 8, -97);
makeTile(5, 9, -97);
makeTile(2, 6, -94);
makeTile(2, 7, -94);
makeTile(2, 8, -94);
makeTile(2, 6, -95);
makeTile(4, 7, -95);
makeTile(2, 8, -95);
makeTile(2, 6, -96);
makeTile(2, 8, -96);
makeTile(2, 4, -92);
makeTile(2, 5, -92);
makeTile(2, 6, -92);
makeTile(2, 8, -92);
makeTile(2, 9, -92);
makeTile(2, 10, -92);
makeTile(2, 4, -93);
makeTile(2, 10, -93);
makeTile(2, 4, -94);
makeTile(2, 10, -94);
makeTile(2, 4, -95);
makeTile(2, 10, -95);
makeTile(2, 4, -96);
makeTile(2, 10, -96);
makeTile(2, 4, -97);
makeTile(2, 10, -97);
makeTile(2, 4, -98);
makeTile(2, 5, -98);
makeTile(2, 6, -98);
makeTile(2, 7, -98);
makeTile(2, 8, -98);
makeTile(2, 9, -98);
makeTile(2, 10, -98);
}
public function isWall(_arg1:uint):Boolean{
return ((((_arg1 == 1)) || ((_arg1 == 2))));
}
public function isOther(_arg1:uint):Boolean{
return ((((((((_arg1 == 4)) || ((_arg1 == 11)))) || ((_arg1 == 12)))) || ((_arg1 == 13))));
}
public function zapMap(_arg1:Number, _arg2:Number, _arg3:uint):void{
if (_arg1 < 0){
_arg1 = 0;
} else {
if (_arg1 > (100 * (map2[0].length - 1))){
_arg1 = (100 * (map2[0].length - 1));
};
};
if (_arg2 < 0){
_arg2 = 0;
} else {
if (_arg2 > (100 * (map2.length - 1))){
_arg2 = (100 * (map2.length - 1));
};
};
map2[int((_arg2 / 100))][int((_arg1 / 100))] = 0;
txts.cntr.nextFrame();
txts.cntr2.nextFrame();
if ((((curMap == 15)) && (!(s2.playing)))){
s2.play();
s2.playing = true;
};
if (txts.cntr.currentFrame == 10){
curMap++;
newMap(curMap);
};
txts.alpha = 1;
var _local4:uint;
while (_local4 < root[("cmap_" + _arg3)].length) {
if (root[("cmap_" + _arg3)][_local4][2] == 4){
root[("cmap_" + _arg3)].splice(_local4, 1);
break;
};
_local4++;
};
}
public function compressMap(_arg1:Array):Array{
var _local3:int;
var _local5:uint;
var _local2:Array = new Array();
var _local4:uint;
while (_local4 < _arg1.length) {
_local5 = 0;
while (_local5 < _arg1[_local4].length) {
if (isTile(_arg1[_local4][_local5])){
_local2.push([_local5, _local4, 5]);
} else {
if (isWall(_arg1[_local4][_local5])){
if (!isWall(_arg1[(_local4 - 1)][_local5])){
_local2.push([_local5, _local4, _arg1[_local4][_local5], 1]);
};
if (!isWall(_arg1[_local4][(_local5 + 1)])){
_local2.push([_local5, _local4, _arg1[_local4][_local5], 2]);
};
if (!isWall(_arg1[(_local4 + 1)][_local5])){
_local2.push([_local5, _local4, _arg1[_local4][_local5], 3]);
};
if (!isWall(_arg1[_local4][(_local5 - 1)])){
_local2.push([_local5, _local4, _arg1[_local4][_local5], 4]);
};
} else {
if (isOther(_arg1[_local4][_local5])){
_local2.push([_local5, _local4, _arg1[_local4][_local5]]);
};
};
};
_local5++;
};
_local4++;
};
return (_local2);
}
public function ef(_arg1:Event):void{
if (((!((curMap == 0))) && (ts))){
textMaterial.fillColor = (textMaterial.fillColor - uint(460551));
if (textMaterial.fillColor <= uint(460551)){
n = 0;
while (n < ts.length) {
scene.removeChild(ts[n]);
ts[n] = null;
n++;
};
ts = null;
};
};
if (k_keys.length == 0){
txts.alpha = (txts.alpha + 0.01);
} else {
txts.alpha = (txts.alpha - 0.025);
};
if (txts.alpha > 1){
txts.alpha = 1;
} else {
if (txts.alpha < 0){
txts.alpha = 0;
};
};
if (((!(onceOff)) && ((txts.currentFrame == 2)))){
txts.alpha = 0;
};
if (keyDown(39)){
camera.rotationY = (camera.rotationY - 3);
bobby.x = (bobby.x + 19);
} else {
if (keyDown(37)){
camera.rotationY = (camera.rotationY + 3);
bobby.x = (bobby.x - 19);
};
};
if (((keyDown(40)) || (keyDown((65 + 18))))){
camera.z = (camera.z - (spd * Math.cos((camera.rotationY * C))));
camera.x = (camera.x - (spd * Math.sin((camera.rotationY * C))));
} else {
if (((keyDown(38)) || (keyDown((65 + 22))))){
camera.z = (camera.z + (spd * Math.cos((camera.rotationY * C))));
camera.x = (camera.x + (spd * Math.sin((camera.rotationY * C))));
};
};
if (keyDown(65)){
camera.x = (camera.x + (spd * Math.cos((camera.rotationY * C))));
camera.z = (camera.z - (spd * Math.sin((camera.rotationY * C))));
} else {
if (keyDown(68)){
camera.x = (camera.x - (spd * Math.cos((camera.rotationY * C))));
camera.z = (camera.z + (spd * Math.sin((camera.rotationY * C))));
};
};
if (bobby.x < (-(bobby.width) / 2)){
bobby.x = 0;
} else {
if (bobby.x > 0){
bobby.x = (-(bobby.width) / 2);
};
};
if (acti < ((txts.cntr.currentFrame - 1) * 1000)){
acti = (acti + 4);
};
txColor.color = (planeMaterial.fillColor = avgC(10348771, 0xC2C2C2, (acti / 9000)));
pm3.fillColor = clrs[uint((Math.random() * clrs.length))];
if (txts.currentFrame != 1){
txts.cntr.transform.colorTransform = txColor;
};
if ((((((curMap == 12)) || ((curMap == 13)))) && (!(s2.playing)))){
st.volume = Math.min((1 - (camera.z / -5000)), 1);
if (st.volume < 0){
st.volume = 0;
};
sc.soundTransform = st;
};
if ((((((camera.z < -3000)) && ((txts.cntr.currentFrame == 1)))) && ((((curMap == 12)) || ((curMap == 13)))))){
if (cs3.length == 0){
room14();
};
if ((((((mapAt2((camera.x - dist), (camera.z - dist)) == 1)) || ((mapAt2((camera.x - dist), (camera.z - dist)) == 2)))) || ((mapAt2((camera.x - dist), (camera.z - dist)) == 2)))){
if ((((camera.x - 300) - dist) % 100) > (((camera.z + 9900) - dist) % 100)){
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist);
} else {
camera.z = ((100 * int(((camera.z - dist) / 100))) + dist);
};
};
if ((((mapAt2((camera.x + dist), (camera.z + dist)) == 1)) || ((mapAt2((camera.x + dist), (camera.z + dist)) == 2)))){
if ((((camera.x - 300) + dist) % 100) > (((camera.z + 9900) + dist) % 100)){
camera.z = ((100 * int(((camera.z - dist) / 100))) - dist);
} else {
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist);
};
};
if ((((mapAt2((camera.x + dist), (camera.z - dist)) == 1)) || ((mapAt2((camera.x + dist), (camera.z - dist)) == 2)))){
if (((((camera.x - 300) + dist) % 100) + (((camera.z + 9900) - dist) % 100)) < 100){
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist);
} else {
camera.z = ((100 * int(((camera.z - dist) / 100))) + dist);
};
};
if ((((mapAt2((camera.x - dist), (camera.z + dist)) == 1)) || ((mapAt2((camera.x - dist), (camera.z + dist)) == 2)))){
if (((((camera.x - 300) - dist) % 100) + (((camera.z + 9900) + dist) % 100)) < 100){
camera.z = ((100 * int(((camera.z - dist) / 100))) - dist);
} else {
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist);
};
};
if ((((mapAt2(camera.x, camera.z) == 10)) && (!(onStair)))){
curMap = 14;
newMap(curMap);
camera.x = (camera.x - 300);
camera.z = (camera.z + 9900);
n = 0;
while (n < cs3.length) {
scene.removeChild(cs3[n]);
n++;
};
};
onStair = (mapAt(camera.x, camera.z) == 10);
} else {
if ((((((mapAt((camera.x - dist), (camera.z - dist)) == 1)) || ((mapAt((camera.x - dist), (camera.z - dist)) == 2)))) || ((mapAt((camera.x - dist), (camera.z - dist)) == 13)))){
if (((camera.x - dist) % 100) > ((camera.z - dist) % 100)){
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist);
} else {
camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) + dist);
};
};
if ((((((mapAt((camera.x + dist), (camera.z + dist)) == 1)) || ((mapAt((camera.x + dist), (camera.z + dist)) == 2)))) || ((mapAt((camera.x + dist), (camera.z + dist)) == 13)))){
if (((camera.x + dist) % 100) > ((camera.z + dist) % 100)){
camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) - dist);
} else {
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist);
};
};
if ((((((mapAt((camera.x + dist), (camera.z - dist)) == 1)) || ((mapAt((camera.x + dist), (camera.z - dist)) == 2)))) || ((mapAt((camera.x + dist), (camera.z - dist)) == 13)))){
if ((((camera.x + dist) % 100) + ((camera.z - dist) % 100)) < 100){
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist);
} else {
camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) + dist);
};
};
if ((((((mapAt((camera.x - dist), (camera.z + dist)) == 1)) || ((mapAt((camera.x - dist), (camera.z + dist)) == 2)))) || ((mapAt((camera.x - dist), (camera.z + dist)) == 13)))){
if ((((camera.x - dist) % 100) + ((camera.z + dist) % 100)) < 100){
camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) - dist);
} else {
camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist);
};
};
if ((((((mapAt(camera.x, camera.z) == 6)) || ((mapAt(camera.x, camera.z) == 8)))) && (!(onStair)))){
curMap--;
newMap(curMap);
} else {
if ((((((mapAt(camera.x, camera.z) == 7)) || ((mapAt(camera.x, camera.z) == 9)))) && (!(onStair)))){
curMap++;
newMap(curMap);
} else {
if (mapAt(camera.x, camera.z) == 4){
zapMap(camera.x, camera.z, curMap);
newMap(curMap);
};
};
};
onStair = (((((((mapAt(camera.x, camera.z) == 6)) || ((mapAt(camera.x, camera.z) == 7)))) || ((mapAt(camera.x, camera.z) == 9)))) || ((mapAt(camera.x, camera.z) == 8)));
};
n = 0;
while (n < cs2.length) {
xd = (camera.x - cs2[n].x);
yd = (camera.z - cs2[n].z);
d = Math.sqrt(((xd * xd) + (yd * yd)));
n++;
};
}
public function mapAt(_arg1:Number, _arg2:Number):uint{
if (_arg2 < 0){
_arg2 = 0;
} else {
if (_arg2 > (100 * (map2.length - 1))){
_arg2 = (100 * (map2.length - 1));
};
};
_arg2 = int((_arg2 / 100));
if (_arg1 < 0){
_arg1 = 0;
} else {
if (_arg1 > (100 * (map2[_arg2].length - 1))){
_arg1 = (100 * (map2[_arg2].length - 1));
};
};
return (map2[_arg2][int((_arg1 / 100))]);
}
public function newText2(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:Number, _arg7:Letter3DMaterial):void{
var _local8:Font3D = new AlteHaasGrotesk();
var _local9:Text3D = new Text3D(_arg1, _local8, _arg7);
_local9.rotationY = _arg5;
_local9.x = _arg2;
_local9.y = _arg3;
_local9.z = _arg4;
_local9.scale = _arg6;
scene.addChild(_local9);
cs.push(_local9);
}
public function newText(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:Number, _arg7:Letter3DMaterial):void{
var _local8:Font3D = new GeosansLight();
var _local9:Text3D = new Text3D(_arg1, _local8, _arg7);
_local9.rotationY = _arg5;
_local9.x = _arg2;
_local9.y = _arg3;
_local9.z = _arg4;
_local9.scale = _arg6;
scene.addChild(_local9);
cs.push(_local9);
}
public function isTile(_arg1:uint):Boolean{
return ((((((((_arg1 == 5)) || ((_arg1 == 8)))) || ((_arg1 == 9)))) || ((_arg1 == 10))));
}
public function mySite(_arg1:MouseEvent):void{
var _local2:URLRequest = new URLRequest("http://ian.janasnyder.com/");
navigateToURL(_local2, "_blank");
}
public function light(_arg1:MouseEvent):void{
txts.ttl.gotoAndStop(1);
}
public function sameWall(_arg1:uint, _arg2:uint):Boolean{
return ((_arg1 == _arg2));
}
public function delMap():void{
var _local1:uint;
_local1 = 0;
while ((((_local1 < cs.length)) || ((_local1 < cs2.length)))) {
scene.removeChild(cs[_local1]);
cs[_local1] = null;
scene.removeChild(cs2[_local1]);
cs2[_local1] = null;
_local1++;
};
cs = [];
cs2 = [];
map2 = [];
}
public function mapAt2(_arg1:Number, _arg2:Number):uint{
_arg2 = (_arg2 + 9900);
_arg1 = (_arg1 - 300);
if (_arg2 < 0){
_arg2 = 0;
} else {
if (_arg2 > (100 * (map_14.length - 1))){
_arg2 = (100 * (map_14.length - 1));
};
};
_arg2 = int((_arg2 / 100));
if (_arg1 < 0){
_arg1 = 0;
} else {
if (_arg1 > (100 * (map_14[_arg2].length - 1))){
_arg1 = (100 * (map_14[_arg2].length - 1));
};
};
return (map_14[_arg2][int((_arg1 / 100))]);
}
public function keyDownListener(_arg1:KeyboardEvent):void{
if (!onceOff){
onceOff = true;
};
var _local2:uint;
while (_local2 < k_keys.length) {
if (k_keys[_local2] == _arg1.keyCode){
break;
};
_local2++;
};
if (_local2 == k_keys.length){
k_keys.push(_arg1.keyCode);
};
}
public function dark(_arg1:MouseEvent):void{
txts.ttl.gotoAndStop(2);
}
public function gameStart():void{
txts.nextFrame();
txts.alpha = 0;
}
public function newMap(_arg1:uint):void{
var _local9:Plane;
var _local10:Plane;
var _local11:Plane;
var _local12:Plane;
var _local13:Plane;
var _local14:Plane;
var _local15:Plane;
var _local16:Plane;
var _local17:Plane;
var _local18:Plane;
var _local19:testModel;
var _local20:Plane;
var _local21:Plane;
delMap();
var _local2:uint;
var _local3:uint;
var _local4:uint;
var _local5:Array = root[("map_" + _arg1)];
var _local6:Array = root[("cmap_" + _arg1)];
temp = null;
var _local7:Letter3DMaterial = new Letter3DMaterial(10348771);
_local7.doubleSided = true;
var _local8:Letter3DMaterial = new Letter3DMaterial(3221286);
_local8.doubleSided = true;
_local2 = 0;
while (_local2 < _local6.length) {
if (_local6[_local2][2] == 1){
if (_local6[_local2][3] == 1){
_local9 = new Plane(planeMaterial, 101, 101);
_local9.x = ((_local6[_local2][0] * 100) + 50);
_local9.z = (_local6[_local2][1] * 100);
cs.push(_local9);
scene.addChild(_local9);
} else {
if (_local6[_local2][3] == 2){
_local10 = new Plane(planeMaterial, 101, 101);
_local10.x = ((_local6[_local2][0] * 100) + 100);
_local10.z = ((_local6[_local2][1] * 100) + 50);
_local10.rotationY = 90;
cs.push(_local10);
scene.addChild(_local10);
} else {
if (_local6[_local2][3] == 3){
_local11 = new Plane(planeMaterial, 101, 101);
_local11.x = ((_local6[_local2][0] * 100) + 50);
_local11.z = ((_local6[_local2][1] * 100) + 100);
cs.push(_local11);
scene.addChild(_local11);
} else {
if (_local6[_local2][3] == 4){
_local12 = new Plane(planeMaterial, 101, 101);
_local12.x = (_local6[_local2][0] * 100);
_local12.z = ((_local6[_local2][1] * 100) + 50);
_local12.rotationY = 90;
cs.push(_local12);
scene.addChild(_local12);
};
};
};
};
} else {
if (_local6[_local2][2] == 2){
if (_local6[_local2][3] == 1){
_local13 = new Plane(pm2, 101, 101);
_local13.x = ((_local6[_local2][0] * 100) + 50);
_local13.z = (_local6[_local2][1] * 100);
cs.push(_local13);
scene.addChild(_local13);
} else {
if (_local6[_local2][3] == 2){
_local14 = new Plane(pm2, 101, 101);
_local14.x = ((_local6[_local2][0] * 100) + 100);
_local14.z = ((_local6[_local2][1] * 100) + 50);
_local14.rotationY = 90;
cs.push(_local14);
scene.addChild(_local14);
} else {
if (_local6[_local2][3] == 3){
_local15 = new Plane(pm2, 101, 101);
_local15.x = ((_local6[_local2][0] * 100) + 50);
_local15.z = ((_local6[_local2][1] * 100) + 100);
cs.push(_local15);
scene.addChild(_local15);
} else {
if (_local6[_local2][3] == 4){
_local16 = new Plane(pm2, 101, 101);
_local16.x = (_local6[_local2][0] * 100);
_local16.z = ((_local6[_local2][1] * 100) + 50);
_local16.rotationY = 90;
cs.push(_local16);
scene.addChild(_local16);
};
};
};
};
} else {
if (_local6[_local2][2] == 5){
_local17 = new Plane(planeMaterial, 101, 101);
_local17.x = ((_local6[_local2][0] * 100) + 50);
_local17.z = ((_local6[_local2][1] * 100) + 50);
_local17.y = -50;
_local17.rotationX = 90;
cs.push(_local17);
scene.addChild(_local17);
_local18 = new Plane(planeMaterial, 101, 101);
_local18.x = ((_local6[_local2][0] * 100) + 50);
_local18.z = ((_local6[_local2][1] * 100) + 50);
_local18.y = 50;
_local18.rotationX = 90;
cs.push(_local18);
scene.addChild(_local18);
} else {
if (_local6[_local2][2] == 4){
_local19 = new testModel(pm3, curMap);
_local19.x = ((_local6[_local2][0] * 100) + 50);
_local19.z = ((_local6[_local2][1] * 100) + 50);
_local19.scale = fgrscl;
cs2.push(_local19);
scene.addChild(_local19);
} else {
if ((((_local6[_local2][2] == 11)) && ((txts.cntr.currentFrame == 1)))){
_local4 = 0;
while (_local4 < 100) {
_local20 = new Plane(planeMaterial, 100, 100);
_local20.x = ((_local6[_local2][0] * 100) + 50);
_local20.z = (((_local6[_local2][1] - _local4) * 100) + 50);
_local20.y = -50;
_local20.rotationX = 90;
cs.push(_local20);
scene.addChild(_local20);
_local21 = new Plane(planeMaterial, 100, 100);
_local21.x = ((_local6[_local2][0] * 100) + 50);
_local21.z = (((_local6[_local2][1] - _local4) * 100) + 50);
_local21.y = 50;
_local21.rotationX = 90;
cs.push(_local21);
scene.addChild(_local21);
_local4++;
};
} else {
if (_local6[_local2][2] == 12){
_local4 = _local6[_local2][1];
_local3 = _local6[_local2][0];
temp = [_local4, _local3];
makeTile(0, _local3, _local4);
makeTile(0, _local3, (_local4 + 1));
makeTile(0, _local3, (_local4 + 2));
makeTile(0, _local3, (_local4 + 3));
makeTile(0, _local3, (_local4 + 4));
makeTile(0, _local3, (_local4 + 5));
makeTile(0, (_local3 + 1), _local4);
makeTile(0, (_local3 + 2), _local4);
makeTile(0, (_local3 + 3), _local4);
makeTile(0, (_local3 + 3), (_local4 + 1));
makeTile(0, (_local3 + 3), (_local4 + 2));
makeTile(0, (_local3 + 3), (_local4 + 3));
makeTile(0, (_local3 + 3), (_local4 + 4));
makeTile(0, (_local3 + 3), (_local4 + 5));
makeTile(0, (_local3 + 2), (_local4 + 5));
makeTile(0, (_local3 + 1), (_local4 + 5));
} else {
if (_local6[_local2][2] == 13){
_local4 = _local6[_local2][1];
_local3 = _local6[_local2][0];
temp = [_local4, _local3];
makeTile(7, _local3, _local4);
makeTile(0, _local3, (_local4 + 1));
makeTile(0, _local3, (_local4 + 2));
makeTile(0, _local3, (_local4 + 3));
makeTile(0, _local3, (_local4 + 4));
makeTile(0, _local3, (_local4 + 5));
makeTile(0, (_local3 + 3), (_local4 + 1));
makeTile(0, (_local3 + 3), (_local4 + 2));
makeTile(0, (_local3 + 3), (_local4 + 3));
makeTile(0, (_local3 + 3), (_local4 + 4));
makeTile(0, (_local3 + 3), (_local4 + 5));
makeTile(0, (_local3 + 2), (_local4 + 5));
makeTile(0, (_local3 + 1), (_local4 + 5));
};
};
};
};
};
};
};
_local2++;
};
_local2 = 0;
while (_local2 < _local5.length) {
map2.push(_local5[_local2]);
_local2++;
};
if (temp){
_local2 = temp[0];
_local3 = temp[1];
if (txts.cntr.currentFrame >= 2){
makeTile(7, (_local3 + 1), (_local2 + 1));
map2[(_local2 + 1)][(_local3 + 1)] = 1;
};
if (txts.cntr.currentFrame >= 3){
makeTile(7, (_local3 + 2), (_local2 + 1));
map2[(_local2 + 1)][(_local3 + 2)] = 1;
};
if (txts.cntr.currentFrame >= 4){
makeTile(7, (_local3 + 1), (_local2 + 2));
map2[(_local2 + 2)][(_local3 + 1)] = 1;
};
if (txts.cntr.currentFrame >= 5){
makeTile(7, (_local3 + 2), (_local2 + 2));
map2[(_local2 + 2)][(_local3 + 2)] = 1;
};
if (txts.cntr.currentFrame >= 6){
makeTile(7, (_local3 + 1), (_local2 + 3));
map2[(_local2 + 3)][(_local3 + 1)] = 1;
};
if (txts.cntr.currentFrame >= 7){
makeTile(7, (_local3 + 2), (_local2 + 3));
map2[(_local2 + 3)][(_local3 + 2)] = 1;
};
if (txts.cntr.currentFrame >= 8){
makeTile(7, (_local3 + 1), (_local2 + 4));
map2[(_local2 + 4)][(_local3 + 1)] = 1;
};
if (txts.cntr.currentFrame >= 9){
makeTile(7, (_local3 + 2), (_local2 + 4));
map2[(_local2 + 4)][(_local3 + 2)] = 1;
};
temp = null;
};
}
public function keyDown(_arg1):Boolean{
var _local2:uint;
while (_local2 < k_keys.length) {
if (k_keys[_local2] == _arg1){
return (true);
};
_local2++;
};
return (false);
}
public function ef2(_arg1:Event):void{
if (invt < 100){
invt++;
} else {
btn3.removeEventListener(Event.ENTER_FRAME, ef2);
};
textMaterial.fillColor = avgC(10348771, 3221286, (invt / 100));
tm3.fillColor = avgC(10348771, 3221286, (1 - (invt / 100)));
}
public function avgC(_arg1:Number, _arg2:Number, _arg3:Number):Number{
var _local4:* = hexToRGB(_arg1);
var _local5:* = hexToRGB(_arg2);
if (_arg3 > 1){
_arg3 = 1;
};
if (_arg3 < 0){
_arg3 = 0;
};
var _local6:* = (1 - _arg3);
var _local7:Number = (_local4.r - ((_local4.r - _local5.r) * _arg3));
var _local8:Number = (_local4.g - ((_local4.g - _local5.g) * _arg3));
var _local9:Number = (_local4.b - ((_local4.b - _local5.b) * _arg3));
return (rgbToHex(_local7, _local8, _local9));
}
public function makeTile(_arg1:uint, _arg2:int, _arg3:int):void{
var _local7:Cube;
var _local8:Cube;
var _local9:testModel;
var _local10:Plane;
var _local11:Plane;
var _local12:Plane;
var _local4:MaterialsList = new MaterialsList();
_local4.addMaterial(planeMaterial, "front");
_local4.addMaterial(planeMaterial, "back");
_local4.addMaterial(planeMaterial, "left");
_local4.addMaterial(planeMaterial, "right");
_local4.addMaterial(planeMaterial, "top");
_local4.addMaterial(planeMaterial, "bottom");
var _local5:MaterialsList = new MaterialsList();
_local5.addMaterial(pm2, "front");
_local5.addMaterial(pm2, "back");
_local5.addMaterial(pm2, "left");
_local5.addMaterial(pm2, "right");
_local5.addMaterial(pm2, "top");
_local5.addMaterial(pm2, "bottom");
var _local6:MaterialsList = new MaterialsList();
_local6.addMaterial(pm3, "front");
_local6.addMaterial(pm3, "back");
_local6.addMaterial(pm3, "left");
_local6.addMaterial(pm3, "right");
_local6.addMaterial(pm3, "top");
_local6.addMaterial(pm3, "bottom");
if ((((_arg1 == 1)) || ((_arg1 == 7)))){
_local7 = new Cube(_local4, 100, 100, 100);
_local7.x = ((_arg2 * 100) + 50);
_local7.z = ((_arg3 * 100) + 50);
if (_arg1 == 1){
cs3.push(_local7);
} else {
cs.push(_local7);
};
scene.addChild(_local7);
} else {
if (_arg1 == 2){
_local8 = new Cube(_local5, 100, 100, 100);
_local8.x = ((_arg2 * 100) + 50);
_local8.z = ((_arg3 * 100) + 50);
cs3.push(_local8);
scene.addChild(_local8);
} else {
if (_arg1 == 4){
_local9 = new testModel(pm3, curMap);
_local9.x = ((_arg2 * 100) + 50);
_local9.z = ((_arg3 * 100) + 50);
_local9.scale = fgrscl;
cs2.push(_local9);
scene.addChild(_local9);
} else {
if (_arg1 == 5){
_local10 = new Plane(planeMaterial, 100, 100);
_local10.x = ((_arg2 * 100) + 50);
_local10.z = ((_arg3 * 100) + 50);
_local10.y = -50;
_local10.rotationX = 90;
cs3.push(_local10);
scene.addChild(_local10);
_local11 = new Plane(planeMaterial, 100, 100);
_local11.x = ((_arg2 * 100) + 50);
_local11.z = ((_arg3 * 100) + 50);
_local11.y = 50;
_local11.rotationX = 90;
cs3.push(_local11);
scene.addChild(_local11);
} else {
if (_arg1 == 0){
_local12 = new Plane(planeMaterial, 65, 65);
_local12.x = ((_arg2 * 100) + 50);
_local12.z = ((_arg3 * 100) + 50);
_local12.y = -50;
_local12.rotationX = 90;
cs.push(_local12);
scene.addChild(_local12);
};
};
};
};
};
}
public function rgbToHex(_arg1, _arg2, _arg3):Number{
return ((((_arg1 << 16) | (_arg2 << 8)) | _arg3));
}
public function testF(_arg1:MouseEvent):void{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpListener);
btn3.addEventListener(Event.ENTER_FRAME, ef2);
btn3.removeEventListener(MouseEvent.ROLL_OVER, dark);
btn3.removeEventListener(MouseEvent.ROLL_OUT, light);
btn3.removeEventListener(MouseEvent.CLICK, testF);
btn1.removeEventListener(MouseEvent.CLICK, mySite);
btn2.removeEventListener(MouseEvent.CLICK, BRO);
removeChild(btn1);
removeChild(btn2);
removeChild(btn3);
gameStart();
stage.focus = null;
}
public function hexToRGB(_arg1):Object{
var _local2:* = ((_arg1 & 0xFF0000) >> 16);
var _local3:* = ((_arg1 & 0xFF00) >> 8);
var _local4:* = (_arg1 & 0xFF);
return ({r:_local2, g:_local3, b:_local4});
}
public function BRO(_arg1:MouseEvent):void{
var _local2:URLRequest = new URLRequest("http://brotherandroid.110mb.com/");
navigateToURL(_local2, "_blank");
}
}
}//package